From: Miklos S. <mi...@sz...> - 2009-02-12 21:28:19
|
This patch turns off sending unnecessary attributes: - the nanosecond part of timestamps if they are zero - the 32bit atime and mtime if the 64bit atime/mtime are sent Index: ssh/sftp-common.c =================================================================== --- ssh.orig/sftp-common.c 2009-02-12 14:11:31.000000000 +0100 +++ ssh/sftp-common.c 2009-02-12 15:54:13.000000000 +0100 @@ -87,12 +87,18 @@ stat_to_attrib(const struct stat *st, At a->mtime = st->st_mtime; a->ext_flags |= SSH2_FXE_EXTATTR_CTIME; a->ctime = st->st_ctime; - a->ext_flags |= SSH2_FXE_EXTATTR_ATIMENSEC; - a->atimensec = st->st_atimensec; - a->ext_flags |= SSH2_FXE_EXTATTR_MTIMENSEC; - a->mtimensec = st->st_mtimensec; - a->ext_flags |= SSH2_FXE_EXTATTR_CTIMENSEC; - a->ctimensec = st->st_ctimensec; + if (st->st_atimensec) { + a->ext_flags |= SSH2_FXE_EXTATTR_ATIMENSEC; + a->atimensec = st->st_atimensec; + } + if (st->st_mtimensec) { + a->ext_flags |= SSH2_FXE_EXTATTR_MTIMENSEC; + a->mtimensec = st->st_mtimensec; + } + if (st->st_ctimensec) { + a->ext_flags |= SSH2_FXE_EXTATTR_CTIMENSEC; + a->ctimensec = st->st_ctimensec; + } a->ext_flags |= SSH2_FXE_EXTATTR_DEV; a->dev = st->st_dev; a->ext_flags |= SSH2_FXE_EXTATTR_INO; Index: ssh/sftp-server.c =================================================================== --- ssh.orig/sftp-server.c 2009-02-12 14:37:39.000000000 +0100 +++ ssh/sftp-server.c 2009-02-12 16:00:10.000000000 +0100 @@ -1271,6 +1271,13 @@ process_extended_attrconfig(u_int32_t id mask = get_int(); dir_ext_attr_mask = mask & SUPPORTED_EXT_ATTR; + if ((stat_ext_attr_mask & SSH2_FXE_EXTATTR_ATIME) && + (stat_ext_attr_mask & SSH2_FXE_EXTATTR_MTIME)) + stat_attr_mask &= ~SSH2_FILEXFER_ATTR_ACMODTIME; + if ((dir_ext_attr_mask & SSH2_FXE_EXTATTR_ATIME) && + (dir_ext_attr_mask & SSH2_FXE_EXTATTR_MTIME)) + dir_attr_mask &= ~SSH2_FILEXFER_ATTR_ACMODTIME; + debug3("request %u: attrconfig", id); send_attrconfig_reply(id); |