From: Alejandro Colomar Date: Fri, 1 Dec 2023 19:23:48 +0000 (+0100) Subject: lib/, src/: getlong(): Use the usual -1 as an error code X-Git-Tag: 4.15.0-rc1~56 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2d581cb33797e7b4525bed327ea439a37364e8f1;p=thirdparty%2Fshadow.git lib/, src/: getlong(): Use the usual -1 as an error code Signed-off-by: Alejandro Colomar --- diff --git a/lib/getdef.c b/lib/getdef.c index 32ec8135c..99f8ea5d6 100644 --- a/lib/getdef.c +++ b/lib/getdef.c @@ -245,7 +245,7 @@ int getdef_num (const char *item, int dflt) return dflt; } - if ( (getlong (d->value, &val) == 0) + if ( (getlong(d->value, &val) == -1) || (val > INT_MAX) || (val < -1)) { fprintf (shadow_logfd, @@ -280,7 +280,7 @@ unsigned int getdef_unum (const char *item, unsigned int dflt) return dflt; } - if ( (getlong (d->value, &val) == 0) + if ( (getlong(d->value, &val) == -1) || (val < 0) || (val > INT_MAX)) { fprintf (shadow_logfd, @@ -315,8 +315,7 @@ long getdef_long (const char *item, long dflt) return dflt; } - if ( (getlong (d->value, &val) == 0) - || (val < -1)) { + if (getlong(d->value, &val) == -1 || val < -1) { fprintf (shadow_logfd, _("configuration error - cannot parse %s value: '%s'"), item, d->value); diff --git a/lib/getlong.c b/lib/getlong.c index 8c8083fbc..1f85f2885 100644 --- a/lib/getlong.c +++ b/lib/getlong.c @@ -4,33 +4,33 @@ * SPDX-License-Identifier: BSD-3-Clause */ + #include #ident "$Id$" #include #include + #include "prototypes.h" + /* * getlong - extract a long integer provided by the numstr string in *result * * It supports decimal, hexadecimal or octal representations. - * - * Returns 0 on failure, 1 on success. */ -int getlong (const char *numstr, /*@out@*/long *result) +int +getlong(const char *numstr, /*@out@*/long *result) { - long val; - char *endptr; + char *endptr; + long val; errno = 0; val = strtol(numstr, &endptr, 0); - if (('\0' == *numstr) || ('\0' != *endptr) || (0 != errno)) { - return 0; - } + if (('\0' == *numstr) || ('\0' != *endptr) || (0 != errno)) + return -1; *result = val; - return 1; + return 0; } - diff --git a/lib/limits.c b/lib/limits.c index 1aa4dc296..9c6f1d9a9 100644 --- a/lib/limits.c +++ b/lib/limits.c @@ -89,7 +89,7 @@ static int set_prio (const char *value) { long prio; - if ( (getlong (value, &prio) == 0) + if ( (getlong(value, &prio) == -1) || (prio != (int) prio)) { return 0; } @@ -482,7 +482,7 @@ void setup_limits (const struct passwd *info) if (strncmp (cp, "pri=", 4) == 0) { long inc; - if ( (getlong (cp + 4, &inc) == 1) + if ( (getlong(cp + 4, &inc) == 0) && (inc >= -20) && (inc <= 20)) { errno = 0; if ( (nice (inc) != -1) @@ -500,8 +500,7 @@ void setup_limits (const struct passwd *info) } if (strncmp (cp, "ulimit=", 7) == 0) { long blocks; - - if ( (getlong (cp + 7, &blocks) == 0) + if ( (getlong(cp + 7, &blocks) == -1) || (blocks != (int) blocks) || (set_filesize_limit (blocks) != 0)) { SYSLOG ((LOG_WARN, diff --git a/lib/sgetspent.c b/lib/sgetspent.c index 0bdc21f15..128175421 100644 --- a/lib/sgetspent.c +++ b/lib/sgetspent.c @@ -92,7 +92,7 @@ struct spwd *sgetspent (const char *string) if (fields[2][0] == '\0') { spwd.sp_lstchg = -1; - } else if ( (getlong (fields[2], &spwd.sp_lstchg) == 0) + } else if ( (getlong(fields[2], &spwd.sp_lstchg) == -1) || (spwd.sp_lstchg < 0)) { return 0; } @@ -103,7 +103,7 @@ struct spwd *sgetspent (const char *string) if (fields[3][0] == '\0') { spwd.sp_min = -1; - } else if ( (getlong (fields[3], &spwd.sp_min) == 0) + } else if ( (getlong(fields[3], &spwd.sp_min) == -1) || (spwd.sp_min < 0)) { return 0; } @@ -114,7 +114,7 @@ struct spwd *sgetspent (const char *string) if (fields[4][0] == '\0') { spwd.sp_max = -1; - } else if ( (getlong (fields[4], &spwd.sp_max) == 0) + } else if ( (getlong(fields[4], &spwd.sp_max) == -1) || (spwd.sp_max < 0)) { return 0; } @@ -139,7 +139,7 @@ struct spwd *sgetspent (const char *string) if (fields[5][0] == '\0') { spwd.sp_warn = -1; - } else if ( (getlong (fields[5], &spwd.sp_warn) == 0) + } else if ( (getlong(fields[5], &spwd.sp_warn) == -1) || (spwd.sp_warn < 0)) { return 0; } @@ -151,7 +151,7 @@ struct spwd *sgetspent (const char *string) if (fields[6][0] == '\0') { spwd.sp_inact = -1; - } else if ( (getlong (fields[6], &spwd.sp_inact) == 0) + } else if ( (getlong(fields[6], &spwd.sp_inact) == -1) || (spwd.sp_inact < 0)) { return 0; } @@ -163,7 +163,7 @@ struct spwd *sgetspent (const char *string) if (fields[7][0] == '\0') { spwd.sp_expire = -1; - } else if ( (getlong (fields[7], &spwd.sp_expire) == 0) + } else if ( (getlong(fields[7], &spwd.sp_expire) == -1) || (spwd.sp_expire < 0)) { return 0; } diff --git a/lib/shadow.c b/lib/shadow.c index 4c4650b1f..fca077a9e 100644 --- a/lib/shadow.c +++ b/lib/shadow.c @@ -166,7 +166,7 @@ static struct spwd *my_sgetspent (const char *string) if (fields[2][0] == '\0') { spwd.sp_lstchg = -1; } else { - if (getlong (fields[2], &spwd.sp_lstchg) == 0) { + if (getlong(fields[2], &spwd.sp_lstchg) == -1) { #ifdef USE_NIS if (nis_used) { spwd.sp_lstchg = -1; @@ -185,7 +185,7 @@ static struct spwd *my_sgetspent (const char *string) if (fields[3][0] == '\0') { spwd.sp_min = -1; } else { - if (getlong (fields[3], &spwd.sp_min) == 0) { + if (getlong(fields[3], &spwd.sp_min) == -1) { #ifdef USE_NIS if (nis_used) { spwd.sp_min = -1; @@ -206,7 +206,7 @@ static struct spwd *my_sgetspent (const char *string) if (fields[4][0] == '\0') { spwd.sp_max = -1; } else { - if (getlong (fields[4], &spwd.sp_max) == 0) { + if (getlong(fields[4], &spwd.sp_max) == -1) { #ifdef USE_NIS if (nis_used) { spwd.sp_max = -1; @@ -239,7 +239,7 @@ static struct spwd *my_sgetspent (const char *string) if (fields[5][0] == '\0') { spwd.sp_warn = -1; } else { - if (getlong (fields[5], &spwd.sp_warn) == 0) { + if (getlong(fields[5], &spwd.sp_warn) == -1) { #ifdef USE_NIS if (nis_used) { spwd.sp_warn = -1; @@ -261,7 +261,7 @@ static struct spwd *my_sgetspent (const char *string) if (fields[6][0] == '\0') { spwd.sp_inact = -1; } else { - if (getlong (fields[6], &spwd.sp_inact) == 0) { + if (getlong(fields[6], &spwd.sp_inact) == -1) { #ifdef USE_NIS if (nis_used) { spwd.sp_inact = -1; @@ -283,7 +283,7 @@ static struct spwd *my_sgetspent (const char *string) if (fields[7][0] == '\0') { spwd.sp_expire = -1; } else { - if (getlong (fields[7], &spwd.sp_expire) == 0) { + if (getlong(fields[7], &spwd.sp_expire) == -1) { #ifdef USE_NIS if (nis_used) { spwd.sp_expire = -1; diff --git a/lib/strtoday.c b/lib/strtoday.c index d4c22af23..ad1ed61f4 100644 --- a/lib/strtoday.c +++ b/lib/strtoday.c @@ -62,7 +62,7 @@ long strtoday (const char *str) } if (isnum) { long retdate; - if (getlong (str, &retdate) == 0) { + if (getlong(str, &retdate) == -1) { return -2; } return retdate; diff --git a/src/chage.c b/src/chage.c index 4277e9d81..e13848c90 100644 --- a/src/chage.c +++ b/src/chage.c @@ -167,14 +167,14 @@ static int new_fields (void) SNPRINTF(buf, "%ld", mindays); change_field (buf, sizeof buf, _("Minimum Password Age")); - if ( (getlong (buf, &mindays) == 0) + if ( (getlong(buf, &mindays) == -1) || (mindays < -1)) { return 0; } SNPRINTF(buf, "%ld", maxdays); change_field (buf, sizeof buf, _("Maximum Password Age")); - if ( (getlong (buf, &maxdays) == 0) + if ( (getlong(buf, &maxdays) == -1) || (maxdays < -1)) { return 0; } @@ -198,14 +198,14 @@ static int new_fields (void) SNPRINTF(buf, "%ld", warndays); change_field (buf, sizeof buf, _("Password Expiration Warning")); - if ( (getlong (buf, &warndays) == 0) + if ( (getlong(buf, &warndays) == -1) || (warndays < -1)) { return 0; } SNPRINTF(buf, "%ld", inactdays); change_field (buf, sizeof buf, _("Password Inactive")); - if ( (getlong (buf, &inactdays) == 0) + if ( (getlong(buf, &inactdays) == -1) || (inactdays < -1)) { return 0; } @@ -393,7 +393,7 @@ static void process_flags (int argc, char **argv) break; case 'I': Iflg = true; - if ( (getlong (optarg, &inactdays) == 0) + if ( (getlong(optarg, &inactdays) == -1) || (inactdays < -1)) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), @@ -406,7 +406,7 @@ static void process_flags (int argc, char **argv) break; case 'm': mflg = true; - if ( (getlong (optarg, &mindays) == 0) + if ( (getlong(optarg, &mindays) == -1) || (mindays < -1)) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), @@ -416,7 +416,7 @@ static void process_flags (int argc, char **argv) break; case 'M': Mflg = true; - if ( (getlong (optarg, &maxdays) == 0) + if ( (getlong(optarg, &maxdays) == -1) || (maxdays < -1)) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), @@ -430,7 +430,7 @@ static void process_flags (int argc, char **argv) break; case 'W': Wflg = true; - if ( (getlong (optarg, &warndays) == 0) + if ( (getlong(optarg, &warndays) == -1) || (warndays < -1)) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), diff --git a/src/chgpasswd.c b/src/chgpasswd.c index d7cdd76a9..41dadc508 100644 --- a/src/chgpasswd.c +++ b/src/chgpasswd.c @@ -195,19 +195,19 @@ static void process_flags (int argc, char **argv) } #if defined(USE_SHA_CRYPT) if ( ( ((0 == strcmp (crypt_method, "SHA256")) || (0 == strcmp (crypt_method, "SHA512"))) - && (0 == getlong(optarg, &sha_rounds)))) { + && (-1 == getlong(optarg, &sha_rounds)))) { bad_s = 1; } #endif /* USE_SHA_CRYPT */ #if defined(USE_BCRYPT) if (( (0 == strcmp (crypt_method, "BCRYPT")) - && (0 == getlong(optarg, &bcrypt_rounds)))) { + && (-1 == getlong(optarg, &bcrypt_rounds)))) { bad_s = 1; } #endif /* USE_BCRYPT */ #if defined(USE_YESCRYPT) if (( (0 == strcmp (crypt_method, "YESCRYPT")) - && (0 == getlong(optarg, &yescrypt_cost)))) { + && (-1 == getlong(optarg, &yescrypt_cost)))) { bad_s = 1; } #endif /* USE_YESCRYPT */ diff --git a/src/chpasswd.c b/src/chpasswd.c index c2546ec50..3a4bd4fe7 100644 --- a/src/chpasswd.c +++ b/src/chpasswd.c @@ -190,19 +190,19 @@ static void process_flags (int argc, char **argv) bad_s = 0; #if defined(USE_SHA_CRYPT) if ((IS_CRYPT_METHOD("SHA256") || IS_CRYPT_METHOD("SHA512")) - && (0 == getlong(optarg, &sha_rounds))) { + && (-1 == getlong(optarg, &sha_rounds))) { bad_s = 1; } #endif /* USE_SHA_CRYPT */ #if defined(USE_BCRYPT) if (IS_CRYPT_METHOD("BCRYPT") - && (0 == getlong(optarg, &bcrypt_rounds))) { + && (-1 == getlong(optarg, &bcrypt_rounds))) { bad_s = 1; } #endif /* USE_BCRYPT */ #if defined(USE_YESCRYPT) if (IS_CRYPT_METHOD("YESCRYPT") - && (0 == getlong(optarg, &yescrypt_cost))) { + && (-1 == getlong(optarg, &yescrypt_cost))) { bad_s = 1; } #endif /* USE_YESCRYPT */ diff --git a/src/faillog.c b/src/faillog.c index e4eca198e..83439505f 100644 --- a/src/faillog.c +++ b/src/faillog.c @@ -547,7 +547,7 @@ int main (int argc, char **argv) usage (E_SUCCESS); /*@notreached@*/break; case 'l': - if (getlong (optarg, &fail_locktime) == 0) { + if (getlong(optarg, &fail_locktime) == -1) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog, optarg); @@ -559,7 +559,7 @@ int main (int argc, char **argv) { long lmax; - if ( (getlong (optarg, &lmax) == 0) + if ( (getlong(optarg, &lmax) == -1) || ((long)(short) lmax != lmax)) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), @@ -576,7 +576,7 @@ int main (int argc, char **argv) case 'R': /* no-op, handled in process_root_flag () */ break; case 't': - if (getlong (optarg, &days) == 0) { + if (getlong(optarg, &days) == -1) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), Prog, optarg); diff --git a/src/newusers.c b/src/newusers.c index bb34e9701..6eb335055 100644 --- a/src/newusers.c +++ b/src/newusers.c @@ -673,19 +673,19 @@ static void process_flags (int argc, char **argv) } #if defined(USE_SHA_CRYPT) if ( ( ((0 == strcmp (crypt_method, "SHA256")) || (0 == strcmp (crypt_method, "SHA512"))) - && (0 == getlong(optarg, &sha_rounds)))) { + && (-1 == getlong(optarg, &sha_rounds)))) { bad_s = 1; } #endif /* USE_SHA_CRYPT */ #if defined(USE_BCRYPT) if (( (0 == strcmp (crypt_method, "BCRYPT")) - && (0 == getlong(optarg, &bcrypt_rounds)))) { + && (-1 == getlong(optarg, &bcrypt_rounds)))) { bad_s = 1; } #endif /* USE_BCRYPT */ #if defined(USE_YESCRYPT) if (( (0 == strcmp (crypt_method, "YESCRYPT")) - && (0 == getlong(optarg, &yescrypt_cost)))) { + && (-1 == getlong(optarg, &yescrypt_cost)))) { bad_s = 1; } #endif /* USE_YESCRYPT */ diff --git a/src/passwd.c b/src/passwd.c index f494a9257..efa444097 100644 --- a/src/passwd.c +++ b/src/passwd.c @@ -775,7 +775,7 @@ int main (int argc, char **argv) usage (E_SUCCESS); /*@notreached@*/break; case 'i': - if ( (getlong (optarg, &inact) == 0) + if ( (getlong(optarg, &inact) == -1) || (inact < -1)) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), @@ -794,7 +794,7 @@ int main (int argc, char **argv) anyflag = true; break; case 'n': - if ( (getlong (optarg, &age_min) == 0) + if ( (getlong(optarg, &age_min) == -1) || (age_min < -1)) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), @@ -829,7 +829,7 @@ int main (int argc, char **argv) anyflag = true; break; case 'w': - if ( (getlong (optarg, &warn) == 0) + if ( (getlong(optarg, &warn) == -1) || (warn < -1)) { (void) fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), @@ -840,7 +840,7 @@ int main (int argc, char **argv) anyflag = true; break; case 'x': - if ( (getlong (optarg, &age_max) == 0) + if ( (getlong(optarg, &age_max) == -1) || (age_max < -1)) { (void) fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), diff --git a/src/useradd.c b/src/useradd.c index 31d89686e..3437a5721 100644 --- a/src/useradd.c +++ b/src/useradd.c @@ -412,7 +412,7 @@ static void get_defaults (void) * Default Password Inactive value */ else if (MATCH (buf, DINACT)) { - if ( (getlong (cp, &def_inactive) == 0) + if ( (getlong(cp, &def_inactive) == -1) || (def_inactive < -1)) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), @@ -1315,7 +1315,7 @@ static void process_flags (int argc, char **argv) eflg = true; break; case 'f': - if ( (getlong (optarg, &def_inactive) == 0) + if ( (getlong(optarg, &def_inactive) == -1) || (def_inactive < -1)) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"), diff --git a/src/usermod.c b/src/usermod.c index 6ec67da34..8ff0202da 100644 --- a/src/usermod.c +++ b/src/usermod.c @@ -1067,7 +1067,7 @@ static void process_flags (int argc, char **argv) eflg = true; break; case 'f': - if ( (getlong (optarg, &user_newinactive) == 0) + if ( (getlong(optarg, &user_newinactive) == -1) || (user_newinactive < -1)) { fprintf (stderr, _("%s: invalid numeric argument '%s'\n"),