diff options
author | mouring <mouring> | 2001-02-15 03:19:56 +0000 |
---|---|---|
committer | mouring <mouring> | 2001-02-15 03:19:56 +0000 |
commit | 447c94861ec4d02310977f05a7fc48006e45627f (patch) | |
tree | e28d74666b9a103f0e5b8294b3869b341e65b78a /sftp-int.c | |
parent | f499863008ebf2731b34425ca2b165efd84f1e2b (diff) | |
download | openssh-447c94861ec4d02310977f05a7fc48006e45627f.tar.gz |
- stevesk@cvs.openbsd.org 2001/02/12 20:53:33
[sftp-int.c]
lumask now works with 1 numeric arg; ok markus@, djm@
Diffstat (limited to 'sftp-int.c')
-rw-r--r-- | sftp-int.c | 17 |
1 files changed, 13 insertions, 4 deletions
@@ -28,7 +28,7 @@ /* XXX: recursive operations */ #include "includes.h" -RCSID("$OpenBSD: sftp-int.c,v 1.20 2001/02/10 00:45:26 djm Exp $"); +RCSID("$OpenBSD: sftp-int.c,v 1.21 2001/02/12 20:53:33 stevesk Exp $"); #include "buffer.h" #include "xmalloc.h" @@ -293,7 +293,9 @@ parse_args(const char **cpp, int *pflag, unsigned long *n_arg, char **path1, char **path2) { const char *cmd, *cp = *cpp; + char *cp2; int base = 0; + long l; int i, cmdnum; /* Skip leading whitespace */ @@ -387,18 +389,24 @@ parse_args(const char **cpp, int *pflag, unsigned long *n_arg, /* Uses the rest of the line */ break; case I_LUMASK: + base = 8; case I_CHMOD: base = 8; case I_CHOWN: case I_CHGRP: /* Get numeric arg (mandatory) */ - if (*cp < '0' && *cp > '9') { + l = strtol(cp, &cp2, base); + if (cp2 == cp || ((l == LONG_MIN || l == LONG_MAX) && + errno == ERANGE) || l < 0) { error("You must supply a numeric argument " "to the %s command.", cmd); return(-1); } - *n_arg = strtoul(cp, (char**)&cp, base); - if (!*cp || !strchr(WHITESPACE, *cp)) { + cp = cp2; + *n_arg = l; + if (cmdnum == I_LUMASK && strchr(WHITESPACE, *cp)) + break; + if (cmdnum == I_LUMASK || !strchr(WHITESPACE, *cp)) { error("You must supply a numeric argument " "to the %s command.", cmd); return(-1); @@ -530,6 +538,7 @@ parse_dispatch_command(int in, int out, const char *cmd, char **pwd) break; case I_LUMASK: umask(n_arg); + printf("Local umask: %03lo\n", n_arg); break; case I_CHMOD: path1 = make_absolute(path1, *pwd); |