+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,
- 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.
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':
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,
_