diff options
author | Damien Miller <djm@mindrot.org> | 2002-02-13 14:05:00 +1100 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2002-02-13 14:05:00 +1100 |
commit | 00c9217558c23bbde7567dd996c5686f473869c2 (patch) | |
tree | 0c21a305932eae1cc65711104ff1f6979b683d35 | |
parent | 5873dfd829558cd3fdeb56f22c893b3fdc8e87c9 (diff) | |
download | openssh-git-00c9217558c23bbde7567dd996c5686f473869c2.tar.gz |
- markus@cvs.openbsd.org 2002/02/13 00:28:13
[sftp-server.c]
handle SSH2_FILEXFER_ATTR_SIZE in SSH2_FXP_(F)SETSTAT; ok djm@
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sftp-server.c | 14 |
2 files changed, 16 insertions, 3 deletions
@@ -24,6 +24,9 @@ [sftp-client.c] Let overlapped upload path handle servers which reorder ACKs. This may be permitted by the protocol spec; ok markus@ + - markus@cvs.openbsd.org 2002/02/13 00:28:13 + [sftp-server.c] + handle SSH2_FILEXFER_ATTR_SIZE in SSH2_FXP_(F)SETSTAT; ok djm@ 20020210 - (djm) OpenBSD CVS Sync @@ -7571,4 +7574,4 @@ - Wrote replacements for strlcpy and mkdtemp - Released 1.0pre1 -$Id: ChangeLog,v 1.1845 2002/02/13 03:04:37 djm Exp $ +$Id: ChangeLog,v 1.1846 2002/02/13 03:05:00 djm Exp $ diff --git a/sftp-server.c b/sftp-server.c index 6d665861..117e6cc1 100644 --- a/sftp-server.c +++ b/sftp-server.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. + * Copyright (c) 2000, 2001, 2002 Markus Friedl. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -22,7 +22,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "includes.h" -RCSID("$OpenBSD: sftp-server.c,v 1.32 2001/12/29 21:56:01 stevesk Exp $"); +RCSID("$OpenBSD: sftp-server.c,v 1.33 2002/02/13 00:28:13 markus Exp $"); #include "buffer.h" #include "bufaux.h" @@ -589,6 +589,11 @@ process_setstat(void) name = get_string(NULL); a = get_attrib(); TRACE("setstat id %d name %s", id, name); + if (a->flags & SSH2_FILEXFER_ATTR_SIZE) { + ret = truncate(name, a->size); + if (ret == -1) + status = errno_to_portable(errno); + } if (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) { ret = chmod(name, a->perm & 0777); if (ret == -1) @@ -626,6 +631,11 @@ process_fsetstat(void) if (fd < 0 || name == NULL) { status = SSH2_FX_FAILURE; } else { + if (a->flags & SSH2_FILEXFER_ATTR_SIZE) { + ret = ftruncate(fd, a->size); + if (ret == -1) + status = errno_to_portable(errno); + } if (a->flags & SSH2_FILEXFER_ATTR_PERMISSIONS) { #ifdef HAVE_FCHMOD ret = fchmod(fd, a->perm & 0777); |