summaryrefslogtreecommitdiff
path: root/scp.c
diff options
context:
space:
mode:
authordjm <djm>2003-02-24 00:52:58 +0000
committerdjm <djm>2003-02-24 00:52:58 +0000
commit8678dbeb117e6dd43e5a1264e8702895aa892b4e (patch)
tree660afb4dbec6f9c1eeab4c1c3c10457b4b32879c /scp.c
parentda277bb553ba1470ccfa1c9b5cd8034e1b34dd91 (diff)
downloadopenssh-8678dbeb117e6dd43e5a1264e8702895aa892b4e.tar.gz
- 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@
Diffstat (limited to 'scp.c')
-rw-r--r--scp.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/scp.c b/scp.c
index 60484e76..e44a1cf6 100644
--- 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);