Check that the new fields set with -u, -s, -l, -g, -f, -e, -d, and -c
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Wed, 23 Jan 2008 21:50:27 +0000 (21:50 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Wed, 23 Jan 2008 21:50:27 +0000 (21:50 +0000)
differ from the old ones. If a requested new value is equal to the old
one, no changes will be performed for that field. If no fields are
changed, usermod will exist successfully with a warning. This avoids
logging changes to syslog when there are actually no changes.

ChangeLog
NEWS
src/usermod.c

index 2a336ad4b5f6bdc29dbb4452ff2c02447753ecd6..88e79b49ace5bd7f9d856461c02c4a266e6ab0e7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-01-23  Nicolas François  <nicolas.francois@centraliens.net>
+
+       * NEWS, src/usermod.c: Check that the new fields set with -u, -s,
+       -l, -g, -f, -e, -d, and -c differ from the old ones. If a
+       requested new value is equal to the old one, no changes will
+       be performed for that field. If no fields are changed, usermod
+       will exist successfully with a warning. This avoids logging
+       changes to syslog when there are actually no changes.
+
 2008-01-23  Nicolas François  <nicolas.francois@centraliens.net>
 
        * src/usermod.c: Always define user_newcomment, user_newshell,
diff --git a/NEWS b/NEWS
index d0c892968ae0a6a98efe0f7a089178012b667a36..a653d295974852f944f6261288338e60417ce778 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -50,6 +50,11 @@ shadow-4.1.0 -> shadow-4.1.1                                         UNRELEASED
 - usermod
   * Keep the access and modification time of files when moving an user's home
     directory.
+  * Check that the new fields set with -u, -s, -l, -g, -f, -e, -d, and -c
+    differ from the old ones. If a requested new value is equal to the old
+    one, no changes will be performed for that field. If no fields are
+    changed, usermod will exist successfully with a warning. This avoids
+    logging changes to syslog when there are actually no changes.
 - vipw/vigr
   * Recommend editing the shadowed (resp. regular) file if the regular (resp.
     shadowed) file was edited.
index 55a21e75f9fd2613f34b397d16f97fd490e9bdde..cc0a124303ad60c03529ae151517f73062e23ee7 100644 (file)
@@ -930,15 +930,7 @@ static void process_flags (int argc, char **argv)
                                                 Prog, optarg);
                                        exit (E_BAD_ARG);
                                }
-
-                               /*
-                                * If the name does not really change, we mustn't
-                                * set the flag as this will cause rather serious
-                                * problems later!
-                                */
-                               if (strcmp (user_name, optarg))
-                                       lflg++;
-
+                               lflg++;
                                user_newname = optarg;
                                break;
                        case 'L':
@@ -982,6 +974,38 @@ static void process_flags (int argc, char **argv)
                fprintf (stderr, _("%s: no flags given\n"), Prog);
                exit (E_USAGE);
        }
+
+       if (user_newid == user_id) {
+               uflg = 0;
+       }
+       if (user_newgid == user_gid) {
+               gflg = 0;
+       }
+       if (strcmp (user_newshell, user_shell) == 0) {
+               sflg = 0;
+       }
+       if (strcmp (user_newname, user_name) == 0) {
+               lflg = 0;
+       }
+       if (user_newinactive == user_inactive) {
+               fflg = 0;
+       }
+       if (user_newexpire == user_expire) {
+               eflg = 0;
+       }
+       if (strcmp (user_newhome, user_home) == 0) {
+               dflg = 0;
+       }
+       if (strcmp (user_newcomment, user_comment) == 0) {
+               cflg = 0;
+       }
+
+       if (Uflg + uflg + sflg + pflg + oflg + mflg + Lflg + lflg + Gflg +
+           gflg + fflg + eflg + dflg + cflg == 0) {
+               fprintf (stderr, _("%s: no changes\n"), Prog);
+               exit (E_SUCCESS);
+       }
+
        if (!is_shadow_pwd && (eflg || fflg)) {
                fprintf (stderr,
                         _