*/
#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"
arglist args;
/* Bandwidth limit */
-off_t limit = 0;
+off_t limitbw = 0;
/* Name of current file being transferred. */
char *curfile;
speed = strtod(optarg, &endp);
if (speed <= 0 || *endp != '\0')
usage();
- limit = speed * 1024;
+ limitbw = speed * 1024;
break;
case 'p':
pflag = 1;
tuser = argv[argc - 1];
if (*tuser == '\0')
tuser = NULL;
- else if (!okname(tuser))
- exit(1);
} else {
thost = argv[argc - 1];
tuser = NULL;
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'",
suser = argv[i];
if (*suser == '\0')
suser = pwd->pw_name;
- else if (!okname(suser))
- continue;
}
host = cleanhostname(host);
len = strlen(src) + CMDNEEDS + 20;
haderr = result >= 0 ? EIO : errno;
statbytes += result;
}
- if (limit)
+ if (limitbw)
bwlimit(amt);
}
if (showprogress)
return;
lamt *= 8;
- wait = (double)1000000L * lamt / limit;
+ wait = (double)1000000L * lamt / limitbw;
bwstart.tv_sec = wait / 1000000L;
bwstart.tv_usec = wait % 1000000L;
statbytes += j;
} while (amt > 0);
- if (limit)
+ if (limitbw)
bwlimit(4096);
if (count == bp->cnt) {
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);