]> andersk Git - openssh.git/blobdiff - scp.c
- Fix sshd BindAddress and -b options for systems using fake-getaddrinfo.
[openssh.git] / scp.c
diff --git a/scp.c b/scp.c
index 60484e7692d2572f35a68588c4f7ced3aa7bcd84..35d4c5f7143e5a23bdf659f7a8200125fb7fdcab 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.102 2003/03/05 22:33:43 markus Exp $");
 
 #include "xmalloc.h"
 #include "atomicio.h"
@@ -96,7 +96,7 @@ void bwlimit(int);
 arglist args;
 
 /* Bandwidth limit */
-off_t limit = 0;
+off_t limitbw = 0;
 
 /* Name of current file being transferred. */
 char *curfile;
@@ -251,7 +251,7 @@ main(argc, argv)
                        speed = strtod(optarg, &endp);
                        if (speed <= 0 || *endp != '\0')
                                usage();
-                       limit = speed * 1024;
+                       limitbw = speed * 1024;
                        break;
                case 'p':
                        pflag = 1;
@@ -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;
@@ -397,8 +395,14 @@ toremote(targ, argc, argv)
                                suser = argv[i];
                                if (*suser == '\0')
                                        suser = pwd->pw_name;
-                               else if (!okname(suser))
+                               else if (!okname(suser)) {
+                                       xfree(bp);
                                        continue;
+                               }
+                               if (tuser && !okname(tuser)) {
+                                       xfree(bp);
+                                       continue;
+                               }
                                snprintf(bp, len,
                                    "%s%s %s -n "
                                    "-l %s %s %s %s '%s%s%s:%s'",
@@ -472,8 +476,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;
@@ -592,7 +594,7 @@ next:                       (void) close(fd);
                                        haderr = result >= 0 ? EIO : errno;
                                statbytes += result;
                        }
-                       if (limit)
+                       if (limitbw)
                                bwlimit(amt);
                }
                if (showprogress)
@@ -686,7 +688,7 @@ bwlimit(int amount)
                return;
 
        lamt *= 8;
-       wait = (double)1000000L * lamt / limit;
+       wait = (double)1000000L * lamt / limitbw;
 
        bwstart.tv_sec = wait / 1000000L;
        bwstart.tv_usec = wait % 1000000L;
@@ -915,7 +917,7 @@ bad:                        run_err("%s: %s", np, strerror(errno));
                                statbytes += j;
                        } while (amt > 0);
                
-                       if (limit)
+                       if (limitbw)
                                bwlimit(4096);
 
                        if (count == bp->cnt) {
@@ -1085,9 +1087,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.036079 seconds and 4 git commands to generate.