]> andersk Git - openssh.git/commitdiff
- markus@cvs.openbsd.org 2003/02/02 10:51:13
authordjm <djm>
Mon, 24 Feb 2003 00:52:58 +0000 (00:52 +0000)
committerdjm <djm>
Mon, 24 Feb 2003 00:52:58 +0000 (00:52 +0000)
     [scp.c]
     call okname() only when using system(3) for remote-remote copy;
     fixes bugs #483, #472; ok deraadt@, mouring@

ChangeLog
scp.c

index 725aa576150572a1f1b66830965b4606866f10b1..34894477634ce444026e374d087e25b336ee9935 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
      [sshd.8]
      typos; sshd(8): help and ok markus@
      help and ok millert@
+   - markus@cvs.openbsd.org 2003/02/02 10:51:13
+     [scp.c]
+     call okname() only when using system(3) for remote-remote copy;
+     fixes bugs #483, #472; ok deraadt@, mouring@
 
 20030211
  - (djm) Cygwin needs libcrypt too. Patch from vinschen@redhat.com
diff --git a/scp.c b/scp.c
index 60484e7692d2572f35a68588c4f7ced3aa7bcd84..e44a1cf699ce6a6d9283a698ffc8da856a9d7c2f 100644 (file)
--- a/scp.c
+++ b/scp.c
@@ -75,7 +75,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: scp.c,v 1.100 2003/01/23 14:06:15 markus Exp $");
+RCSID("$OpenBSD: scp.c,v 1.101 2003/02/02 10:51:13 markus Exp $");
 
 #include "xmalloc.h"
 #include "atomicio.h"
@@ -370,8 +370,6 @@ toremote(targ, argc, argv)
                tuser = argv[argc - 1];
                if (*tuser == '\0')
                        tuser = NULL;
-               else if (!okname(tuser))
-                       exit(1);
        } else {
                thost = argv[argc - 1];
                tuser = NULL;
@@ -399,6 +397,8 @@ toremote(targ, argc, argv)
                                        suser = pwd->pw_name;
                                else if (!okname(suser))
                                        continue;
+                               if (tuser && !okname(tuser))
+                                       continue;
                                snprintf(bp, len,
                                    "%s%s %s -n "
                                    "-l %s %s %s %s '%s%s%s:%s'",
@@ -472,8 +472,6 @@ tolocal(argc, argv)
                        suser = argv[i];
                        if (*suser == '\0')
                                suser = pwd->pw_name;
-                       else if (!okname(suser))
-                               continue;
                }
                host = cleanhostname(host);
                len = strlen(src) + CMDNEEDS + 20;
@@ -1085,9 +1083,18 @@ okname(cp0)
                c = (int)*cp;
                if (c & 0200)
                        goto bad;
-               if (!isalpha(c) && !isdigit(c) &&
-                   c != '@' && c != '_' && c != '-' && c != '.' && c != '+')
-                       goto bad;
+               if (!isalpha(c) && !isdigit(c)) {
+                       switch (c) {
+                       case '\'':
+                       case '"':
+                       case '`':
+                       case ' ':
+                       case '#':
+                               goto bad;
+                       default:
+                               break;
+                       }
+               }
        } while (*++cp);
        return (1);
 
This page took 0.13777 seconds and 5 git commands to generate.