]> andersk Git - openssh.git/commitdiff
- markus@cvs.openbsd.org 2004/04/01 12:19:57
authordtucker <dtucker>
Mon, 19 Apr 2004 13:50:16 +0000 (13:50 +0000)
committerdtucker <dtucker>
Mon, 19 Apr 2004 13:50:16 +0000 (13:50 +0000)
     [scp.c]
     limit trust between local and remote rcp/scp process,
     noticed by lcamtuf; ok deraadt@, djm@

ChangeLog
scp.c

index 4ada7458d9fa6a516afa441b0d6298ac7a674307..bee7d495b99cc8221b347da8a11e06a17bc0d15e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
    - djm@cvs.openbsd.org 2004/03/31 21:58:47
      [canohost.c]
      don't skip ip options check when UseDNS=no; ok markus@ (ID sync only)
+   - markus@cvs.openbsd.org 2004/04/01 12:19:57
+     [scp.c]
+     limit trust between local and remote rcp/scp process,
+     noticed by lcamtuf; ok deraadt@, djm@
 
 20040418
  - (dtucker) [auth-pam.c] Log username and source host for failed PAM
diff --git a/scp.c b/scp.c
index 1daa2ccf7a26b54c281a479e8a5e35f22de10d2d..8621a4409b7aab658c3b31fbd6a544ae3c7291a8 100644 (file)
--- a/scp.c
+++ b/scp.c
@@ -71,7 +71,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: scp.c,v 1.113 2003/11/23 23:21:21 djm Exp $");
+RCSID("$OpenBSD: scp.c,v 1.114 2004/04/01 12:19:57 markus Exp $");
 
 #include "xmalloc.h"
 #include "atomicio.h"
@@ -759,6 +759,8 @@ sink(int argc, char **argv)
                        *cp++ = ch;
                } while (cp < &buf[sizeof(buf) - 1] && ch != '\n');
                *cp = 0;
+               if (verbose_mode)
+                       fprintf(stderr, "Sink: %s", buf);
 
                if (buf[0] == '\01' || buf[0] == '\02') {
                        if (iamremote == 0)
@@ -822,6 +824,10 @@ sink(int argc, char **argv)
                        size = size * 10 + (*cp++ - '0');
                if (*cp++ != ' ')
                        SCREWUP("size not delimited");
+               if ((strchr(cp, '/') != NULL) || (strcmp(cp, "..") == 0)) {
+                       run_err("error: unexpected filename: %s", cp);
+                       exit(1);
+               }
                if (targisdir) {
                        static char *namebuf;
                        static int cursize;
@@ -843,6 +849,8 @@ sink(int argc, char **argv)
                exists = stat(np, &stb) == 0;
                if (buf[0] == 'D') {
                        int mod_flag = pflag;
+                       if (!iamrecursive)
+                               SCREWUP("received directory without -r");
                        if (exists) {
                                if (!S_ISDIR(stb.st_mode)) {
                                        errno = ENOTDIR;
This page took 0.045078 seconds and 5 git commands to generate.