From: Alejandro Colomar Date: Thu, 16 May 2024 12:02:54 +0000 (+0200) Subject: src/usermod.c: update_group_file(): Reduce scope of local variable X-Git-Tag: 4.15.2~20 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=68d42a8fbe42b89cf13d3f672ad8502dbaf05835;p=thirdparty%2Fshadow.git src/usermod.c: update_group_file(): Reduce scope of local variable After _every_ iteration, 'changed' is always 'false'. We don't need to have it outside of the loop. See: $ grepc update_group_file . \ | grep -e changed -e goto -e continue -e break -e free_ngrp -e '{' -e '}' \ | pcre2grep -v -M '{\n\t*}'; { bool changed; changed = false; while ((grp = gr_next ()) != NULL) { if (!was_member && !is_member) { continue; } if (was_member) { if ((!Gflg) || is_member) { if (lflg) { changed = true; } } else { changed = true; } } else if (is_member) { changed = true; } if (!changed) goto free_ngrp; changed = false; free_ngrp: } } This was already true in the commit that introduced the code: $ git show 45c6603cc:src/usermod.c \ | grepc update_group \ | grep -e changed -e goto -e break -e continue -e '\' -e '{' -e '}' \ | pcre2grep -v -M '{\n\t*}'; { int changed; changed = 0; while ((grp = gr_next())) { * See if the user specified this group as one of their if (!was_member && !is_member) continue; if (was_member && (!Gflg || is_member)) { if (lflg) { changed = 1; } } else if (was_member && Gflg && !is_member) { changed = 1; } else if (!was_member && Gflg && is_member) { changed = 1; } if (!changed) continue; changed = 0; } } Fixes: 45c6603cc86c ("[svn-upgrade] Integrating new upstream version, shadow (19990709)") Signed-off-by: Alejandro Colomar --- diff --git a/src/usermod.c b/src/usermod.c index bb5d35355..30f47b8aa 100644 --- a/src/usermod.c +++ b/src/usermod.c @@ -688,19 +688,20 @@ fail_exit (int code) static void update_group_file(void) { - bool changed; const struct group *grp; - changed = false; - /* * Scan through the entire group file looking for the groups that * the user is a member of. */ while ((grp = gr_next ()) != NULL) { + bool changed; bool is_member; bool was_member; struct group *ngrp; + + changed = false; + /* * See if the user specified this group as one of their * concurrent groups. @@ -783,7 +784,6 @@ update_group_file(void) if (!changed) goto free_ngrp; - changed = false; if (gr_update (ngrp) == 0) { fprintf (stderr, _("%s: failed to prepare the new %s entry '%s'\n"),