From: Alejandro Colomar Date: Mon, 2 Dec 2024 12:16:56 +0000 (+0100) Subject: lib/, src/: Use streq() instead of its pattern X-Git-Tag: 4.17.0~6 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=7182d6402f39e1be4c13d241edfed40dbe6eebe4;p=thirdparty%2Fshadow.git lib/, src/: Use streq() instead of its pattern Except for the added (and sorted) includes, the removal of redundant parentheses, a few cases that have been refactored for readability, and a couple of non-string cases that I've left out of the change, this patch can be approximated with the following semantic patch: $ cat ~/tmp/spatch/streq.sp @@ expression s; @@ - '\0' == *s + streq(s, "") @@ expression s; @@ - '\0' == s[0] + streq(s, "") @@ expression s; @@ - *s == '\0' + streq(s, "") @@ expression s; @@ - s[0] == '\0' + streq(s, "") $ find contrib/ lib* src/ -type f \ | xargs spatch --in-place --sp-file ~/tmp/spatch/streq.sp; Signed-off-by: Alejandro Colomar --- diff --git a/lib/getdef.c b/lib/getdef.c index c59e8807f..d234fe18b 100644 --- a/lib/getdef.c +++ b/lib/getdef.c @@ -567,7 +567,7 @@ static void def_load (void) * Break the line into two fields. */ name = stpspn(buf, " \t"); /* first nonwhite */ - if (*name == '\0' || *name == '#') + if (streq(name, "") || *name == '#') continue; /* comment or empty */ s = stpsep(name, " \t"); /* next field */ diff --git a/lib/getrange.c b/lib/getrange.c index 603152e68..44a055c7f 100644 --- a/lib/getrange.c +++ b/lib/getrange.c @@ -13,6 +13,7 @@ #include "atoi/a2i/a2u.h" #include "defines.h" #include "prototypes.h" +#include "string/strcmp/streq.h" /* @@ -53,7 +54,7 @@ getrange(const char *range, return 0; /* */ case '-': - if ('\0' == *end) + if (streq(end, "")) return 0; /* - */ parse_max: if (!isdigit((unsigned char) *end)) diff --git a/lib/limits.c b/lib/limits.c index 5a98a1295..e1c3b1797 100644 --- a/lib/limits.c +++ b/lib/limits.c @@ -413,9 +413,9 @@ static int setup_user_limits (const char *uname) } } (void) fclose (fil); - if (limits[0] == '\0') { + if (streq(limits, "")) { /* no user specific limits */ - if (deflimits[0] == '\0') { /* no default limits */ + if (streq(deflimits, "")) { /* no default limits */ return 0; } strcpy (limits, deflimits); /* use the default limits */ diff --git a/lib/list.c b/lib/list.c index a18c71862..27aa02565 100644 --- a/lib/list.c +++ b/lib/list.c @@ -209,7 +209,7 @@ comma_to_list(const char *comma) * Empty list is special - 0 members, not 1 empty member. --marekm */ - if ('\0' == *members) { + if (streq(members, "")) { *array = NULL; free (members); return array; diff --git a/lib/port.c b/lib/port.c index 52ed67e87..4f5d06066 100644 --- a/lib/port.c +++ b/lib/port.c @@ -44,7 +44,7 @@ static int portcmp (const char *pattern, const char *port) port++; } - if (('\0' == *pattern) && ('\0' == *port)) { + if (streq(pattern, "") && streq(port, "")) { return 0; } if (streq(orig, "SU")) @@ -204,7 +204,7 @@ next: cp = field; - if ('\0' == *cp) { + if (streq(cp, "")) { port.pt_times = NULL; return &port; } diff --git a/lib/prefix_flag.c b/lib/prefix_flag.c index ea0a0d723..c09b8d082 100644 --- a/lib/prefix_flag.c +++ b/lib/prefix_flag.c @@ -98,7 +98,7 @@ extern const char* process_prefix_flag (const char* short_opt, int argc, char ** exit (EXIT_FAILURE); } - if (prefix[0] == '\0' || streq(prefix, "/")) + if (streq(prefix, "") || streq(prefix, "/")) return ""; /* if prefix is "/" then we ignore the flag option */ /* should we prevent symbolic link from being used as a prefix? */ diff --git a/lib/pwauth.c b/lib/pwauth.c index 0434dd08f..afdc2337a 100644 --- a/lib/pwauth.c +++ b/lib/pwauth.c @@ -26,6 +26,7 @@ #include "getdef.h" #include "string/memset/memzero.h" #include "string/sprintf/snprintf.h" +#include "string/strcmp/streq.h" #ifdef SKEY #include @@ -102,7 +103,7 @@ int pw_auth (const char *cipher, * matter. */ - if ((NULL == cipher) || ('\0' == *cipher)) { + if ((NULL == cipher) || streq(cipher, "")) { return 0; } @@ -169,7 +170,7 @@ int pw_auth (const char *cipher, * ...Re-prompt, with echo on. * -- AR 8/22/1999 */ - if ((0 != retval) && ('\0' == input[0]) && use_skey) { + if ((0 != retval) && streq(input, "") && use_skey) { erase_pass(clear); clear = agetpass(prompt); input = (clear == NULL) ? "" : clear; diff --git a/lib/salt.c b/lib/salt.c index f2432512e..753e9d450 100644 --- a/lib/salt.c +++ b/lib/salt.c @@ -419,7 +419,7 @@ static /*@observer@*/const char *gensalt (size_t salt_size) * Prepare DES setting for crypt_gensalt(), if result * has not been filled with anything previously. */ - if ('\0' == result[0]) { + if (streq(result, "")) { /* Avoid -Wunused-but-set-variable. */ salt_len = GENSALT_SETTING_SIZE - 1; rounds = 0; diff --git a/lib/setupenv.c b/lib/setupenv.c index f49c6adef..63f7fb95d 100644 --- a/lib/setupenv.c +++ b/lib/setupenv.c @@ -28,6 +28,7 @@ #include "shadowlog.h" #include "string/sprintf/xasprintf.h" #include "string/strchr/stpspn.h" +#include "string/strcmp/streq.h" #include "string/strdup/xstrdup.h" #include "string/strtok/stpsep.h" @@ -60,7 +61,7 @@ static void read_env_file (const char *filename) cp = buf; /* ignore whitespace and comments */ cp = stpspn(cp, " \t"); - if (('\0' == *cp) || ('#' == *cp)) { + if (streq(cp, "") || ('#' == *cp)) { continue; } /* @@ -209,7 +210,7 @@ void setup_env (struct passwd *info) * Create the SHELL environmental variable and export it. */ - if ((NULL == info->pw_shell) || ('\0' == *info->pw_shell)) { + if ((NULL == info->pw_shell) || streq(info->pw_shell, "")) { free (info->pw_shell); info->pw_shell = xstrdup (SHELL); } diff --git a/lib/sgetgrent.c b/lib/sgetgrent.c index 42b4efb77..eeeed4b6f 100644 --- a/lib/sgetgrent.c +++ b/lib/sgetgrent.c @@ -21,6 +21,7 @@ #include "atoi/getnum.h" #include "defines.h" #include "prototypes.h" +#include "string/strcmp/streq.h" #include "string/strtok/stpsep.h" @@ -54,7 +55,7 @@ list(char *s) return NULL; } } - if (!s || s[0] == '\0') + if (!s || streq(s, "")) break; members[i++] = strsep(&s, ","); } @@ -89,7 +90,7 @@ struct group *sgetgrent (const char *buf) for (cp = grpbuf, i = 0; (i < NFIELDS) && (NULL != cp); i++) grpfields[i] = strsep(&cp, ":"); - if (i < NFIELDS || *grpfields[2] == '\0' || cp != NULL) { + if (i < NFIELDS || streq(grpfields[2], "") || cp != NULL) { return NULL; } grent.gr_name = grpfields[0]; diff --git a/lib/sgetpwent.c b/lib/sgetpwent.c index 5704d19ae..b13d5bc54 100644 --- a/lib/sgetpwent.c +++ b/lib/sgetpwent.c @@ -20,6 +20,7 @@ #include "defines.h" #include "prototypes.h" #include "shadowlog_internal.h" +#include "string/strcmp/streq.h" #define NFIELDS 7 @@ -76,7 +77,11 @@ sgetpwent(const char *buf) * the entry is invalid. Also, the UID and GID must be non-blank. */ - if (i != NFIELDS || *fields[2] == '\0' || *fields[3] == '\0') + if (i != NFIELDS) + return NULL; + if (streq(fields[2], "")) + return NULL; + if (streq(fields[3], "")) return NULL; /* diff --git a/lib/sgetspent.c b/lib/sgetspent.c index 97f64edd5..f34853ec6 100644 --- a/lib/sgetspent.c +++ b/lib/sgetspent.c @@ -24,6 +24,7 @@ #include "defines.h" #include "prototypes.h" #include "shadowlog_internal.h" +#include "string/strcmp/streq.h" #include "string/strtok/stpsep.h" @@ -85,7 +86,7 @@ sgetspent(const char *string) * incorrectly formatted number. */ - if (fields[2][0] == '\0') + if (streq(fields[2], "")) spwd.sp_lstchg = -1; else if (a2sl(&spwd.sp_lstchg, fields[2], NULL, 0, 0, LONG_MAX) == -1) return NULL; @@ -94,7 +95,7 @@ sgetspent(const char *string) * Get the minimum period between password changes. */ - if (fields[3][0] == '\0') + if (streq(fields[3], "")) spwd.sp_min = -1; else if (a2sl(&spwd.sp_min, fields[3], NULL, 0, 0, LONG_MAX) == -1) return NULL; @@ -103,7 +104,7 @@ sgetspent(const char *string) * Get the maximum number of days a password is valid. */ - if (fields[4][0] == '\0') + if (streq(fields[4], "")) spwd.sp_max = -1; else if (a2sl(&spwd.sp_max, fields[4], NULL, 0, 0, LONG_MAX) == -1) return NULL; @@ -126,7 +127,7 @@ sgetspent(const char *string) * Get the number of days of password expiry warning. */ - if (fields[5][0] == '\0') + if (streq(fields[5], "")) spwd.sp_warn = -1; else if (a2sl(&spwd.sp_warn, fields[5], NULL, 0, 0, LONG_MAX) == -1) return NULL; @@ -136,7 +137,7 @@ sgetspent(const char *string) * disabled. */ - if (fields[6][0] == '\0') + if (streq(fields[6], "")) spwd.sp_inact = -1; else if (a2sl(&spwd.sp_inact, fields[6], NULL, 0, 0, LONG_MAX) == -1) return NULL; @@ -146,7 +147,7 @@ sgetspent(const char *string) * set to expire. */ - if (fields[7][0] == '\0') + if (streq(fields[7], "")) spwd.sp_expire = -1; else if (a2sl(&spwd.sp_expire, fields[7], NULL, 0, 0, LONG_MAX) == -1) return NULL; @@ -156,7 +157,7 @@ sgetspent(const char *string) * to have anything other than a valid integer in it. */ - if (fields[8][0] == '\0') + if (streq(fields[8], "")) spwd.sp_flag = SHADOW_SP_FLAG_UNSET; else if (str2ul(&spwd.sp_flag, fields[8]) == -1) return NULL; diff --git a/lib/sssd.c b/lib/sssd.c index 09f539f46..c795229a2 100644 --- a/lib/sssd.c +++ b/lib/sssd.c @@ -1,7 +1,9 @@ /* Author: Peter Vrabec */ #include + #ifdef USE_SSSD +#include "sssd.h" #include #include @@ -12,9 +14,8 @@ #include "exitcodes.h" #include "defines.h" #include "prototypes.h" -#include "sssd.h" - #include "shadowlog_internal.h" +#include "string/strcmp/streq.h" #define MSG_SSSD_FLUSH_CACHE_FAILED "%s: Failed to flush the sssd cache." @@ -46,7 +47,7 @@ sssd_flush_cache(int dbflags) if (dbflags & SSSD_DB_GROUP) stpcpy(p, "G"); - if (*p == '\0') { + if (streq(p, "")) { /* Neither passwd nor group, nothing to do */ free(sss_cache_args); return 0; diff --git a/lib/strtoday.c b/lib/strtoday.c index db0866097..056fa931e 100644 --- a/lib/strtoday.c +++ b/lib/strtoday.c @@ -11,12 +11,11 @@ #include -#ident "$Id$" - #include "atoi/str2i/str2s.h" #include "getdate.h" #include "prototypes.h" #include "string/strchr/stpspn.h" +#include "string/strcmp/streq.h" /* @@ -44,7 +43,7 @@ long strtoday (const char *str) * which is not what we expect, unless you're a BOFH :-). * (useradd sets sp_expire = current date for new lusers) */ - if ((NULL == str) || ('\0' == *str)) { + if ((NULL == str) || streq(str, "")) { return -1; } diff --git a/lib/subordinateio.c b/lib/subordinateio.c index 9329c455b..bf02328e7 100644 --- a/lib/subordinateio.c +++ b/lib/subordinateio.c @@ -108,7 +108,13 @@ subordinate_parse(const char *line) * There must be exactly SUBID_NFIELDS colon separated fields or * the entry is invalid. Also, fields must be non-blank. */ - if (i != SUBID_NFIELDS || *fields[0] == '\0' || *fields[1] == '\0' || *fields[2] == '\0') + if (i != SUBID_NFIELDS) + return NULL; + if (streq(fields[0], "")) + return NULL; + if (streq(fields[1], "")) + return NULL; + if (streq(fields[2], "")) return NULL; range.owner = fields[0]; if (str2ul(&range.start, fields[1]) == -1) diff --git a/lib/utmp.c b/lib/utmp.c index 37a1bbdae..2b59dc6d9 100644 --- a/lib/utmp.c +++ b/lib/utmp.c @@ -53,13 +53,13 @@ is_my_tty(const char tty[UTX_LINESIZE]) strcpy (full_tty, "/dev/"); strncat(full_tty, tty, UTX_LINESIZE); - if ('\0' == tmptty[0]) { + if (streq(tmptty, "")) { const char *tname = ttyname (STDIN_FILENO); if (NULL != tname) STRTCPY(tmptty, tname); } - if ('\0' == tmptty[0]) { + if (streq(tmptty, "")) { (void) puts (_("Unable to determine your tty name.")); exit (EXIT_FAILURE); } diff --git a/lib/valid.c b/lib/valid.c index d21afc5f7..a237e9e1f 100644 --- a/lib/valid.c +++ b/lib/valid.c @@ -42,8 +42,8 @@ bool valid (const char *password, const struct passwd *ent) * routine is meant to waste CPU time. */ - if ((NULL != ent->pw_name) && ('\0' == ent->pw_passwd[0])) { - if ('\0' == password[0]) { + if ((NULL != ent->pw_name) && streq(ent->pw_passwd, "")) { + if (streq(password, "")) { return true; /* user entered nothing */ } else { return false; /* user entered something! */ @@ -54,7 +54,7 @@ bool valid (const char *password, const struct passwd *ent) * If there is no entry then we need a salt to use. */ - if ((NULL == ent->pw_name) || ('\0' == ent->pw_passwd[0])) { + if ((NULL == ent->pw_name) || streq(ent->pw_passwd, "")) { salt = "xx"; } else { salt = ent->pw_passwd; diff --git a/src/grpck.c b/src/grpck.c index 405ae6c5e..6bac2849f 100644 --- a/src/grpck.c +++ b/src/grpck.c @@ -580,7 +580,8 @@ static void check_grp_file (int *errors, bool *changed) */ if ( (NULL != grp->gr_mem[0]) && (NULL == grp->gr_mem[1]) - && ('\0' == grp->gr_mem[0][0])) { + && streq(grp->gr_mem[0], "")) + { grp->gr_mem[0] = NULL; } diff --git a/src/login.c b/src/login.c index 31162af18..9cd1688c9 100644 --- a/src/login.c +++ b/src/login.c @@ -661,7 +661,7 @@ int main (int argc, char **argv) /* if we didn't get a user on the command line, set it to NULL */ get_pam_user (&pam_user); - if ((NULL != pam_user) && ('\0' == pam_user[0])) { + if ((NULL != pam_user) && streq(pam_user, "")) { retcode = pam_set_item (pamh, PAM_USER, NULL); PAM_FAIL_CHECK; } @@ -838,7 +838,7 @@ int main (int argc, char **argv) username = XMALLOC(max_size, char); login_prompt(username, max_size); - if ('\0' == username[0]) { + if (streq(username, "")) { /* Prompt for a new login */ free (username); username = NULL; @@ -963,7 +963,7 @@ int main (int argc, char **argv) * guys won't see that the passwordless account exists at * all). --marekm */ - if (user_passwd[0] == '\0') { + if (streq(user_passwd, "")) { pw_auth ("!", username, reason, NULL); } diff --git a/src/login_nopam.c b/src/login_nopam.c index 56692e15d..fd058a656 100644 --- a/src/login_nopam.c +++ b/src/login_nopam.c @@ -29,7 +29,6 @@ #ifndef USE_PAM #ident "$Id$" -#include "prototypes.h" /* * This module implements a simple but effective form of login access * control based on login names and on host (or domain) names, internet @@ -38,27 +37,29 @@ * * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands. */ -#include -#include -#include -#include +#include /* for inet_ntoa() */ #include -#include +#include #include +#include +#include #ifdef PRIMARY_GROUP_MATCH #include #endif -#include -#include -#include +#include +#include #include +#include #include #include -#include -#include /* for inet_ntoa() */ +#include +#include +#include +#include "prototypes.h" #include "sizeof.h" #include "string/strchr/strrspn.h" +#include "string/strcmp/streq.h" #include "string/strtok/stpsep.h" @@ -110,7 +111,7 @@ login_access(const char *user, const char *from) continue; /* comment line */ } stpcpy(strrspn(line, " \t"), ""); - if (line[0] == '\0') { /* skip blank lines */ + if (streq(line, "")) { /* skip blank lines */ continue; } p = line; @@ -182,7 +183,7 @@ static char *myhostname (void) { static char name[MAXHOSTNAMELEN + 1] = ""; - if (name[0] == '\0') { + if (streq(name, "")) { gethostname (name, sizeof (name)); stpcpy(&name[MAXHOSTNAMELEN], ""); } diff --git a/src/newgrp.c b/src/newgrp.c index 427ae586a..17f961126 100644 --- a/src/newgrp.c +++ b/src/newgrp.c @@ -150,7 +150,7 @@ static void check_perms (const struct group *grp, spw_free (spwd); } - if ((pwd->pw_passwd[0] == '\0') && (grp->gr_passwd[0] != '\0')) { + if (streq(pwd->pw_passwd, "") && (grp->gr_passwd[0] != '\0')) { needspasswd = true; } @@ -188,8 +188,8 @@ static void check_perms (const struct group *grp, goto failure; } - if (grp->gr_passwd[0] == '\0' || - !streq(cpasswd, grp->gr_passwd)) { + if (streq(grp->gr_passwd, "") || + !streq(grp->gr_passwd, cpasswd)) { #ifdef WITH_AUDIT SNPRINTF(audit_buf, "authentication new-gid=%lu", (unsigned long) grp->gr_gid); diff --git a/src/passwd.c b/src/passwd.c index e75b0b94f..be038172c 100644 --- a/src/passwd.c +++ b/src/passwd.c @@ -441,7 +441,7 @@ static /*@observer@*/const char *pw_status (const char *pass) if (*pass == '*' || *pass == '!') { return "L"; } - if (*pass == '\0') { + if (streq(pass, "")) { return "NP"; } return "P"; diff --git a/src/su.c b/src/su.c index 67195ea0d..653b58beb 100644 --- a/src/su.c +++ b/src/su.c @@ -862,7 +862,7 @@ static void process_flags (int argc, char **argv) if (optind < argc) { STRTCPY(name, argv[optind++]); /* use this login id */ } - if ('\0' == name[0]) { /* use default user */ + if (streq(name, "")) { /* use default user */ struct passwd *root_pw = getpwnam ("root"); if ((NULL != root_pw) && (0 == root_pw->pw_uid)) { (void) strcpy (name, "root"); @@ -1080,7 +1080,7 @@ int main (int argc, char **argv) /* * Set the default shell. */ - if ((NULL == shellstr) || ('\0' == shellstr[0])) { + if ((NULL == shellstr) || streq(shellstr, "")) { shellstr = SHELL; } diff --git a/src/suauth.c b/src/suauth.c index 936b3a2f2..8d961fd5b 100644 --- a/src/suauth.c +++ b/src/suauth.c @@ -86,7 +86,7 @@ check_su_auth(const char *actual_id, const char *wanted_id, bool su_to_root) stpcpy(strrspn(temp, " \t"), ""); p = stpspn(temp, " \t"); - if (*p == '#' || *p == '\0') + if (*p == '#' || streq(p, "")) continue; to_users = strsep(&p, ":"); diff --git a/src/sulogin.c b/src/sulogin.c index 6af471b59..655a583ab 100644 --- a/src/sulogin.c +++ b/src/sulogin.c @@ -27,6 +27,7 @@ /*@-exitarg@*/ #include "exitcodes.h" #include "shadowlog.h" +#include "string/strcmp/streq.h" #include "string/strdup/xstrdup.h" @@ -153,7 +154,7 @@ main(int argc, char *argv[]) * it will work with standard getpass() (no NULL on EOF). * --marekm */ - if ((NULL == pass) || ('\0' == *pass)) { + if ((NULL == pass) || streq(pass, "")) { erase_pass (pass); (void) puts (""); #ifdef TELINIT diff --git a/src/useradd.c b/src/useradd.c index 891fd1420..a9944eef6 100644 --- a/src/useradd.c +++ b/src/useradd.c @@ -439,7 +439,7 @@ get_defaults(void) * Default Skeleton information */ else if (streq(buf, DSKEL)) { - if ('\0' == *ccp) + if (streq(ccp, "")) ccp = SKEL_DIR; if (prefix[0]) { @@ -456,7 +456,7 @@ get_defaults(void) * Default Usr Skeleton information */ else if (streq(buf, DUSRSKEL)) { - if ('\0' == *ccp) + if (streq(ccp, "")) ccp = USRSKELDIR; if (prefix[0]) { @@ -472,7 +472,7 @@ get_defaults(void) * Create by default user mail spool or not ? */ else if (streq(buf, DCREATE_MAIL_SPOOL)) { - if (*ccp == '\0') + if (streq(ccp, "")) ccp = "no"; def_create_mail_spool = xstrdup(ccp); @@ -482,7 +482,7 @@ get_defaults(void) * By default do we add the user to the lastlog and faillog databases ? */ else if (streq(buf, DLOG_INIT)) { - if (*ccp == '\0') + if (streq(ccp, "")) ccp = def_log_init; def_log_init = xstrdup(ccp); @@ -770,7 +770,7 @@ static int get_groups (char *list) user_groups[i++] = NULL; } - if ('\0' == *list) { + if (streq(list, "")) { return 0; } diff --git a/src/userdel.c b/src/userdel.c index 6552c5ae7..1e7367637 100644 --- a/src/userdel.c +++ b/src/userdel.c @@ -1131,7 +1131,7 @@ int main (int argc, char **argv) * Note: This is a best effort basis. The user may log in between, * a cron job may be started on her behalf, etc. */ - if ((prefix[0] == '\0') && !Rflg && user_busy (user_name, user_id) != 0) { + if (streq(prefix, "") && !Rflg && user_busy(user_name, user_id) != 0) { if (!fflg) { #ifdef WITH_AUDIT audit_logger (AUDIT_DEL_USER, Prog, @@ -1264,7 +1264,7 @@ int main (int argc, char **argv) * Cancel any crontabs or at jobs. Have to do this before we remove * the entry from /etc/passwd. */ - if (prefix[0] == '\0') + if (streq(prefix, "")) user_cancel (user_name); close_files (); diff --git a/src/usermod.c b/src/usermod.c index f33aec31e..69a19ff27 100644 --- a/src/usermod.c +++ b/src/usermod.c @@ -227,7 +227,7 @@ static int get_groups (char *list) */ user_groups[0] = NULL; - if ('\0' == *list) { + if (streq(list, "")) { return 0; } @@ -2186,7 +2186,7 @@ int main (int argc, char **argv) * be changed while the user is logged in. * Note: no need to check if a prefix is specified... */ - if ( (prefix[0] == '\0') && (uflg || lflg || dflg + if (streq(prefix, "") && (uflg || lflg || dflg #ifdef ENABLE_SUBIDS || Vflg || Wflg #endif /* ENABLE_SUBIDS */