diff options
author | Kevin Steves <stevesk@cvs.openbsd.org> | 2001-02-12 20:53:34 +0000 |
---|---|---|
committer | Kevin Steves <stevesk@cvs.openbsd.org> | 2001-02-12 20:53:34 +0000 |
commit | b07051936622bfdfe10e5ebde8a3c0193cc52f99 (patch) | |
tree | d665ec3ce08ab307841818b0bf9262cdfc940f03 | |
parent | 621046b2d7c1386017941dee072594a6d2361fc5 (diff) |
lumask now works with 1 numeric arg; ok markus@, djm@
-rw-r--r-- | usr.bin/ssh/sftp-int.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/usr.bin/ssh/sftp-int.c b/usr.bin/ssh/sftp-int.c index 9c3ebe5bf9c..c236f6dac20 100644 --- a/usr.bin/ssh/sftp-int.c +++ b/usr.bin/ssh/sftp-int.c @@ -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); |