upstream: Allow full range of UIDs and GIDs for sftp chown and

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
This commit is contained in:
dtucker@openbsd.org 2020-10-04 03:04:02 +00:00 committed by Damien Miller
parent 396d32f3a1
commit 2d39fc9f7e
1 changed files with 6 additions and 6 deletions

12
sftp.c
View File

@ -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> * 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; const char *cmd, *cp = *cpp;
char *cp2, **argv; char *cp2, **argv;
int base = 0; int base = 0;
long l; long long ll;
int path1_mandatory = 0, i, cmdnum, optidx, argc; int path1_mandatory = 0, i, cmdnum, optidx, argc;
/* Skip leading whitespace */ /* Skip leading whitespace */
@ -1488,16 +1488,16 @@ parse_args(const char **cpp, int *ignore_errors, int *disable_echo, int *aflag,
if (argc - optidx < 1) if (argc - optidx < 1)
goto need_num_arg; goto need_num_arg;
errno = 0; errno = 0;
l = strtol(argv[optidx], &cp2, base); ll = strtoll(argv[optidx], &cp2, base);
if (cp2 == argv[optidx] || *cp2 != '\0' || if (cp2 == argv[optidx] || *cp2 != '\0' ||
((l == LONG_MIN || l == LONG_MAX) && errno == ERANGE) || ((ll == LLONG_MIN || ll == LLONG_MAX) && errno == ERANGE) ||
l < 0) { ll < 0 || ll > UINT32_MAX) {
need_num_arg: need_num_arg:
error("You must supply a numeric argument " error("You must supply a numeric argument "
"to the %s command.", cmd); "to the %s command.", cmd);
return -1; return -1;
} }
*n_arg = l; *n_arg = ll;
if (cmdnum == I_LUMASK) if (cmdnum == I_LUMASK)
break; break;
/* Get pathname (mandatory) */ /* Get pathname (mandatory) */