diff --git a/ChangeLog b/ChangeLog index 5e24ffc8..18bd0e00 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,12 @@ 2007-11-17 Nicolas François - * src/usermod.c: Make usermod -d and -m work independant of the + * src/usermod.c: Validate that two of the -L, -p, and -U options + are not used at the same time after the parsing of options. -U + used to be allowed after -p or -L, but not before. + +2007-11-17 Nicolas François + + * src/usermod.c: Make usermod -d and -m work independent of the argument order. Thanks to Justin Pryzby for the patch. This fixes Debian's bug #451518. diff --git a/src/usermod.c b/src/usermod.c index 61a9acf0..78e596a2 100644 --- a/src/usermod.c +++ b/src/usermod.c @@ -981,9 +981,6 @@ static void process_flags (int argc, char **argv) user_newname = optarg; break; case 'L': - if (Uflg || pflg) - usage (); - Lflg++; break; case 'm': @@ -996,9 +993,6 @@ static void process_flags (int argc, char **argv) oflg++; break; case 'p': - if (Lflg || Uflg) - usage (); - user_pass = optarg; pflg++; break; @@ -1021,9 +1015,6 @@ static void process_flags (int argc, char **argv) uflg++; break; case 'U': - if (Lflg && pflg) - usage (); - Uflg++; break; default: @@ -1056,6 +1047,14 @@ static void process_flags (int argc, char **argv) exit (E_USAGE); } + if ((Lflg && (pflg || Uflg)) || (pflg && Uflg)) { + fprintf (stderr, + _("%s: the -L, -p, and -U flags are exclusive\n"), + Prog); + usage (); + exit (E_USAGE); + } + if (mflg && !dflg) { fprintf (stderr, _("%s: -m flag is ONLY allowed with the -d flag\n"),