X-Git-Url: http://andersk.mit.edu/gitweb/openssh.git/blobdiff_plain/22f5e8721c337cc2518af785a9b6f0a19a763815..ad39a852789fc906b2167c5e7b32f3eeb63e1c38:/sftp-client.c diff --git a/sftp-client.c b/sftp-client.c index 1fda576b..2565a704 100644 --- a/sftp-client.c +++ b/sftp-client.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sftp-client.c,v 1.83 2008/06/07 21:52:46 djm Exp $ */ +/* $OpenBSD: sftp-client.c,v 1.85 2008/06/12 20:47:04 djm Exp $ */ /* * Copyright (c) 2001-2004 Damien Miller * @@ -244,7 +244,8 @@ get_decode_stat(int fd, u_int expected_id, int quiet) } static int -get_decode_statvfs(int fd, struct statvfs *st, u_int expected_id, int quiet) +get_decode_statvfs(int fd, struct sftp_statvfs *st, u_int expected_id, + int quiet) { Buffer msg; u_int type, id, flag; @@ -273,8 +274,8 @@ get_decode_statvfs(int fd, struct statvfs *st, u_int expected_id, int quiet) } bzero(st, sizeof(*st)); - st->f_bsize = buffer_get_int(&msg); - st->f_frsize = buffer_get_int(&msg); + st->f_bsize = buffer_get_int64(&msg); + st->f_frsize = buffer_get_int64(&msg); st->f_blocks = buffer_get_int64(&msg); st->f_bfree = buffer_get_int64(&msg); st->f_bavail = buffer_get_int64(&msg); @@ -282,8 +283,8 @@ get_decode_statvfs(int fd, struct statvfs *st, u_int expected_id, int quiet) st->f_ffree = buffer_get_int64(&msg); st->f_favail = buffer_get_int64(&msg); st->f_fsid = buffer_get_int64(&msg); - flag = buffer_get_int(&msg); - st->f_namemax = buffer_get_int(&msg); + flag = buffer_get_int64(&msg); + st->f_namemax = buffer_get_int64(&msg); st->f_flag = (flag & SSH2_FXE_STATVFS_ST_RDONLY) ? ST_RDONLY : 0; st->f_flag |= (flag & SSH2_FXE_STATVFS_ST_NOSUID) ? ST_NOSUID : 0; @@ -325,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); } @@ -812,7 +823,7 @@ do_readlink(struct sftp_conn *conn, char *path) #endif int -do_statvfs(struct sftp_conn *conn, const char *path, struct statvfs *st, +do_statvfs(struct sftp_conn *conn, const char *path, struct sftp_statvfs *st, int quiet) { Buffer msg; @@ -840,7 +851,7 @@ do_statvfs(struct sftp_conn *conn, const char *path, struct statvfs *st, #ifdef notyet int do_fstatvfs(struct sftp_conn *conn, const char *handle, u_int handle_len, - struct statvfs *st, int quiet) + struct sftp_statvfs *st, int quiet) { Buffer msg; u_int id;