summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--sftp-client.c13
2 files changed, 15 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 812312bd9..0a597a4fe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -31,6 +31,12 @@
31 introduce atomiciov() function that wraps readv/writev to retry 31 introduce atomiciov() function that wraps readv/writev to retry
32 interrupted transfers like atomicio() does for read/write; 32 interrupted transfers like atomicio() does for read/write;
33 feedback deraadt@ dtucker@ stevesk@ ok deraadt@ 33 feedback deraadt@ dtucker@ stevesk@ ok deraadt@
34 - djm@cvs.openbsd.org 2006/04/16 00:54:10
35 [sftp-client.c]
36 avoid making a tiny 4-byte write to send the packet length of sftp
37 commands, which would result in a separate tiny packet on the wire by
38 using atomiciov(writev, ...) to write the length and the command in one
39 pass; ok deraadt@
34 40
3520060421 4120060421
36 - (djm) [Makefile.in configure.ac session.c sshpty.c] 42 - (djm) [Makefile.in configure.ac session.c sshpty.c]
@@ -4542,4 +4548,4 @@
4542 - (djm) Trim deprecated options from INSTALL. Mention UsePAM 4548 - (djm) Trim deprecated options from INSTALL. Mention UsePAM
4543 - (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu 4549 - (djm) Fix quote handling in sftp; Patch from admorten AT umich.edu
4544 4550
4545$Id: ChangeLog,v 1.4308 2006/04/23 02:06:20 djm Exp $ 4551$Id: ChangeLog,v 1.4309 2006/04/23 02:06:35 djm Exp $
diff --git a/sftp-client.c b/sftp-client.c
index c71c66f33..8778439b9 100644
--- a/sftp-client.c
+++ b/sftp-client.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp-client.c,v 1.64 2006/03/30 09:58:16 djm Exp $ */ 1/* $OpenBSD: sftp-client.c,v 1.65 2006/04/16 00:54:10 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> 3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
4 * 4 *
@@ -61,16 +61,19 @@ static void
61send_msg(int fd, Buffer *m) 61send_msg(int fd, Buffer *m)
62{ 62{
63 u_char mlen[4]; 63 u_char mlen[4];
64 struct iovec iov[2];
64 65
65 if (buffer_len(m) > SFTP_MAX_MSG_LENGTH) 66 if (buffer_len(m) > SFTP_MAX_MSG_LENGTH)
66 fatal("Outbound message too long %u", buffer_len(m)); 67 fatal("Outbound message too long %u", buffer_len(m));
67 68
68 /* Send length first */ 69 /* Send length first */
69 put_u32(mlen, buffer_len(m)); 70 put_u32(mlen, buffer_len(m));
70 if (atomicio(vwrite, fd, mlen, sizeof(mlen)) != sizeof(mlen)) 71 iov[0].iov_base = mlen;
71 fatal("Couldn't send packet: %s", strerror(errno)); 72 iov[0].iov_len = sizeof(mlen);
72 73 iov[1].iov_base = buffer_ptr(m);
73 if (atomicio(vwrite, fd, buffer_ptr(m), buffer_len(m)) != buffer_len(m)) 74 iov[1].iov_len = buffer_len(m);
75
76 if (atomiciov(writev, fd, iov, 2) != buffer_len(m) + sizeof(mlen))
74 fatal("Couldn't send packet: %s", strerror(errno)); 77 fatal("Couldn't send packet: %s", strerror(errno));
75 78
76 buffer_clear(m); 79 buffer_clear(m);