]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
Revert "src/usermod.c: Remove optimizations"
authorAlejandro Colomar <alx@kernel.org>
Fri, 16 Jan 2026 23:56:21 +0000 (00:56 +0100)
committerIker Pedrosa <ikerpedrosam@gmail.com>
Mon, 19 Jan 2026 09:13:52 +0000 (10:13 +0100)
This wasn't only an optimization; it also skipped some checks that were
now spuriously triggering errors.  We may be able to get rid of the
optimizations, but that will need more analysis.  For now, let's revert
to a known-good state.

Fixes: 6a8a25dc7de6 (2025-10-15; "src/usermod.c: Remove optimizations")
Reverts: 6a8a25dc7de6 (2025-10-15; "src/usermod.c: Remove optimizations")
Closes: <https://github.com/shadow-maint/shadow/issues/1509>
Reported-by: Adam Williamson <awilliam@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
src/usermod.c

index 7400bf8462331927f32545a323e1cdb616eca5a6..7cd7a8596d506fe1a293ab5247e3032208f61fff 100644 (file)
@@ -1391,6 +1391,48 @@ process_flags(int argc, char **argv, struct option_flags *flags)
        }
 #endif                         /* WITH_SELINUX */
 
+       if (user_newid == user_id) {
+               uflg = false;
+               oflg = false;
+       }
+       if (user_newgid == user_gid) {
+               gflg = false;
+       }
+       if (   (NULL != user_newshell)
+           && streq(user_newshell, user_shell)) {
+               sflg = false;
+       }
+       if (streq(user_newname, user_name)) {
+               lflg = false;
+       }
+       if (user_newinactive == user_inactive) {
+               fflg = false;
+       }
+       if (user_newexpire == user_expire) {
+               eflg = false;
+       }
+       if (   (NULL != user_newhome)
+           && streq(user_newhome, user_home)) {
+               dflg = false;
+               mflg = false;
+       }
+       if (   (NULL != user_newcomment)
+           && streq(user_newcomment, user_comment)) {
+               cflg = false;
+       }
+
+       if (!(Uflg || uflg || sflg || pflg || mflg || Lflg ||
+             lflg || Gflg || gflg || fflg || eflg || dflg || cflg
+#ifdef ENABLE_SUBIDS
+             || vflg || Vflg || wflg || Wflg
+#endif                         /* ENABLE_SUBIDS */
+#ifdef WITH_SELINUX
+             || Zflg
+#endif                         /* WITH_SELINUX */
+       )) {
+               exit (E_SUCCESS);
+       }
+
        if (!is_shadow_pwd && (eflg || fflg)) {
                fprintf (stderr,
                         _("%s: shadow passwords required for -e and -f\n"),