]> git.ipfire.org Git - thirdparty/openssh-portable.git/commitdiff
upstream: Allow full range of UIDs and GIDs for sftp chown and
authordtucker@openbsd.org <dtucker@openbsd.org>
Sun, 4 Oct 2020 03:04:02 +0000 (03:04 +0000)
committerDamien Miller <djm@mindrot.org>
Wed, 7 Oct 2020 02:33:12 +0000 (13:33 +1100)
chgrp on 32bit platforms instead of being limited by LONG_MAX.  bz#3206,
found by booking00 at sina.cn, ok markus@

OpenBSD-Commit-ID: 373b7bbf1f15ae482d39567ce30d18b51c9229b5

sftp.c

diff --git a/sftp.c b/sftp.c
index c88c861185beba8694c6d9ac63b1ef3dc0362df0..e09307b1a02e5e418d5ae9a948eb6239e09eec4d 100644 (file)
--- a/sftp.c
+++ b/sftp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sftp.c,v 1.201 2020/08/03 02:43:41 djm Exp $ */
+/* $OpenBSD: sftp.c,v 1.202 2020/10/04 03:04:02 dtucker Exp $ */
 /*
  * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
  *
@@ -1330,7 +1330,7 @@ parse_args(const char **cpp, int *ignore_errors, int *disable_echo, int *aflag,
        const char *cmd, *cp = *cpp;
        char *cp2, **argv;
        int base = 0;
-       long l;
+       long long ll;
        int path1_mandatory = 0, i, cmdnum, optidx, argc;
 
        /* Skip leading whitespace */
@@ -1488,16 +1488,16 @@ parse_args(const char **cpp, int *ignore_errors, int *disable_echo, int *aflag,
                if (argc - optidx < 1)
                        goto need_num_arg;
                errno = 0;
-               l = strtol(argv[optidx], &cp2, base);
+               ll = strtoll(argv[optidx], &cp2, base);
                if (cp2 == argv[optidx] || *cp2 != '\0' ||
-                   ((l == LONG_MIN || l == LONG_MAX) && errno == ERANGE) ||
-                   l < 0) {
+                   ((ll == LLONG_MIN || ll == LLONG_MAX) && errno == ERANGE) ||
+                   ll < 0 || ll > UINT32_MAX) {
  need_num_arg:
                        error("You must supply a numeric argument "
                            "to the %s command.", cmd);
                        return -1;
                }
-               *n_arg = l;
+               *n_arg = ll;
                if (cmdnum == I_LUMASK)
                        break;
                /* Get pathname (mandatory) */