]> 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)
committerAlejandro Colomar <alx@kernel.org>
Mon, 19 Jan 2026 13:27:28 +0000 (14:27 +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>
Cherry-picked-from: d25bbc48d607 (2026-01-19; "Revert "src/usermod.c: Remove optimizations"")
Signed-off-by: Alejandro Colomar <alx@kernel.org>
src/usermod.c

index e8c9da6687ed3d59738b630d641b21c50ef4c3a7..e26f01101bfe94144591ee32a1d218ddc0dd9b6d 100644 (file)
@@ -1388,6 +1388,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"),