]> andersk Git - openssh.git/blobdiff - sftp-client.c
- stevesk@cvs.openbsd.org 2009/04/13 19:07:44
[openssh.git] / sftp-client.c
index 8d0666b852712b3188d55356ab00a2b2cfb2ea2e..5e39aa7d21bd6f8b309d1e774c0230ed7fc75aa9 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: sftp-client.c,v 1.84 2008/06/08 20:15:29 dtucker Exp $ */
+/* $OpenBSD: sftp-client.c,v 1.86 2008/06/26 06:10:09 djm Exp $ */
 /*
  * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
  *
@@ -326,17 +326,27 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests)
        while (buffer_len(&msg) > 0) {
                char *name = buffer_get_string(&msg, NULL);
                char *value = buffer_get_string(&msg, NULL);
+               int known = 0;
 
-               debug2("Init extension: \"%s\"", name);
                if (strcmp(name, "posix-rename@openssh.com") == 0 &&
-                   strcmp(value, "1") == 0)
+                   strcmp(value, "1") == 0) {
                        exts |= SFTP_EXT_POSIX_RENAME;
-               if (strcmp(name, "statvfs@openssh.com") == 0 &&
-                   strcmp(value, "2") == 0)
+                       known = 1;
+               } else if (strcmp(name, "statvfs@openssh.com") == 0 &&
+                   strcmp(value, "2") == 0) {
                        exts |= SFTP_EXT_STATVFS;
-               if (strcmp(name, "fstatvfs@openssh.com") == 0 &&
-                   strcmp(value, "2") == 0)
+                       known = 1;
+               } if (strcmp(name, "fstatvfs@openssh.com") == 0 &&
+                   strcmp(value, "2") == 0) {
                        exts |= SFTP_EXT_FSTATVFS;
+                       known = 1;
+               }
+               if (known) {
+                       debug2("Server supports extension \"%s\" revision %s",
+                           name, value);
+               } else {
+                       debug2("Unrecognised server extension \"%s\"", name);
+               }
                xfree(name);
                xfree(value);
        }
@@ -910,7 +920,7 @@ do_download(struct sftp_conn *conn, char *remote_path, char *local_path,
        if (a == NULL)
                return(-1);
 
-       /* XXX: should we preserve set[ug]id? */
+       /* Do not preserve set[ug]id here, as we do not preserve ownership */
        if (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS)
                mode = a->perm & 0777;
        else
@@ -1213,7 +1223,8 @@ do_upload(struct sftp_conn *conn, char *local_path, char *remote_path,
                        len = 0;
                else do
                        len = read(local_fd, data, conn->transfer_buflen);
-               while ((len == -1) && (errno == EINTR || errno == EAGAIN));
+               while ((len == -1) &&
+                   (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK));
 
                if (len == -1)
                        fatal("Couldn't read from \"%s\": %s", local_path,
This page took 0.034554 seconds and 4 git commands to generate.