policycoreutils/semodule: Allow enabling/disabling multiple modules at once

Unify behaviour for all module actions.
The same behaviour is already present for -i/-u/-r/-e switches.

Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1545218

Signed-off-by: Vit Mojzis <vmojzis@redhat.com>
This commit is contained in:
Vit Mojzis 2018-03-19 12:08:12 +01:00 committed by stephensmalley
parent a0c4e64238
commit 0d1fad884a

View File

@ -311,28 +311,29 @@ static void parse_command_line(int argc, char **argv)
}
if (optind < argc) {
int mode;
int mode = commands ? (int) commands[num_commands - 1].mode : -1;
/* if -i/u/r/E was the last command treat any remaining
* arguments as args. Will allow 'semodule -i *.pp' to
* work as expected.
*/
if (commands && commands[num_commands - 1].mode == INSTALL_M) {
mode = INSTALL_M;
} else if (commands && commands[num_commands - 1].mode == REMOVE_M) {
mode = REMOVE_M;
} else if (commands && commands[num_commands - 1].mode == EXTRACT_M) {
mode = EXTRACT_M;
} else {
fprintf(stderr, "unknown additional arguments:\n");
while (optind < argc)
fprintf(stderr, " %s", argv[optind++]);
fprintf(stderr, "\n\n");
usage(argv[0]);
exit(1);
switch (mode) {
case INSTALL_M:
case REMOVE_M:
case EXTRACT_M:
case ENABLE_M:
case DISABLE_M:
while (optind < argc)
set_mode(mode, argv[optind++]);
break;
default:
fprintf(stderr, "unknown additional arguments:\n");
while (optind < argc)
fprintf(stderr, " %s", argv[optind++]);
fprintf(stderr, "\n\n");
usage(argv[0]);
exit(1);
}
while (optind < argc)
set_mode(mode, argv[optind++]);
}
}