summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2002-02-13 14:05:00 +1100
committerDamien Miller <djm@mindrot.org>2002-02-13 14:05:00 +1100
commit00c9217558c23bbde7567dd996c5686f473869c2 (patch)
tree0c21a305932eae1cc65711104ff1f6979b683d35
parent5873dfd829558cd3fdeb56f22c893b3fdc8e87c9 (diff)
- 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--ChangeLog5
-rw-r--r--sftp-server.c14
2 files changed, 16 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index aca92af3..edf07675 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);