- djm@cvs.openbsd.org 2002/04/06 00:30:08
[sftp-client.c] Fix occasional corruption on upload due to bad reuse of request id, spotted by chombier@mac.com; ok markus@
This commit is contained in:
parent
dc0594cc54
commit
06e9515eb8
|
@ -2,6 +2,12 @@
|
||||||
- (djm) Typo in Suse SPEC file. Fix from Carsten Grohmann
|
- (djm) Typo in Suse SPEC file. Fix from Carsten Grohmann
|
||||||
<carsten.grohmann@dr-baldeweg.de>
|
<carsten.grohmann@dr-baldeweg.de>
|
||||||
- (bal) Added MAP_FAILED to allow AIX and Trusted HP to compile.
|
- (bal) Added MAP_FAILED to allow AIX and Trusted HP to compile.
|
||||||
|
- (bal) OpenBSD CVS Sync
|
||||||
|
- djm@cvs.openbsd.org 2002/04/06 00:30:08
|
||||||
|
[sftp-client.c]
|
||||||
|
Fix occasional corruption on upload due to bad reuse of request id, spotted
|
||||||
|
by chombier@mac.com; ok markus@
|
||||||
|
|
||||||
|
|
||||||
20020405
|
20020405
|
||||||
- (bal) Patch for OpenSC SmartCard library; ok markus@; patch by
|
- (bal) Patch for OpenSC SmartCard library; ok markus@; patch by
|
||||||
|
@ -8172,4 +8178,4 @@
|
||||||
- Wrote replacements for strlcpy and mkdtemp
|
- Wrote replacements for strlcpy and mkdtemp
|
||||||
- Released 1.0pre1
|
- Released 1.0pre1
|
||||||
|
|
||||||
$Id: ChangeLog,v 1.2027 2002/04/06 04:11:28 mouring Exp $
|
$Id: ChangeLog,v 1.2028 2002/04/06 04:16:45 mouring Exp $
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
/* XXX: copy between two remote sites */
|
/* XXX: copy between two remote sites */
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
RCSID("$OpenBSD: sftp-client.c,v 1.30 2002/04/01 22:07:17 markus Exp $");
|
RCSID("$OpenBSD: sftp-client.c,v 1.31 2002/04/06 00:30:08 djm Exp $");
|
||||||
|
|
||||||
#include "openbsd-compat/fake-queue.h"
|
#include "openbsd-compat/fake-queue.h"
|
||||||
|
|
||||||
|
@ -1061,10 +1061,12 @@ do_upload(struct sftp_conn *conn, char *local_path, char *remote_path,
|
||||||
|
|
||||||
if (id == startid || len == 0 ||
|
if (id == startid || len == 0 ||
|
||||||
id - ackid >= conn->num_requests) {
|
id - ackid >= conn->num_requests) {
|
||||||
|
u_int r_id;
|
||||||
|
|
||||||
buffer_clear(&msg);
|
buffer_clear(&msg);
|
||||||
get_msg(conn->fd_in, &msg);
|
get_msg(conn->fd_in, &msg);
|
||||||
type = buffer_get_char(&msg);
|
type = buffer_get_char(&msg);
|
||||||
id = buffer_get_int(&msg);
|
r_id = buffer_get_int(&msg);
|
||||||
|
|
||||||
if (type != SSH2_FXP_STATUS)
|
if (type != SSH2_FXP_STATUS)
|
||||||
fatal("Expected SSH2_FXP_STATUS(%d) packet, "
|
fatal("Expected SSH2_FXP_STATUS(%d) packet, "
|
||||||
|
@ -1075,11 +1077,11 @@ do_upload(struct sftp_conn *conn, char *local_path, char *remote_path,
|
||||||
|
|
||||||
/* Find the request in our queue */
|
/* Find the request in our queue */
|
||||||
for(ack = TAILQ_FIRST(&acks);
|
for(ack = TAILQ_FIRST(&acks);
|
||||||
ack != NULL && ack->id != id;
|
ack != NULL && ack->id != r_id;
|
||||||
ack = TAILQ_NEXT(ack, tq))
|
ack = TAILQ_NEXT(ack, tq))
|
||||||
;
|
;
|
||||||
if (ack == NULL)
|
if (ack == NULL)
|
||||||
fatal("Can't find request for ID %d", id);
|
fatal("Can't find request for ID %d", r_id);
|
||||||
TAILQ_REMOVE(&acks, ack, tq);
|
TAILQ_REMOVE(&acks, ack, tq);
|
||||||
|
|
||||||
if (status != SSH2_FX_OK) {
|
if (status != SSH2_FX_OK) {
|
||||||
|
|
Loading…
Reference in New Issue