diff options
| author | Stanislav Brabec <sbrabec@suse.cz> | 2019-10-10 01:08:25 +0200 |
|---|---|---|
| committer | Karel Zak <kzak@redhat.com> | 2019-10-11 10:08:03 +0200 |
| commit | a174eefb41a2ce8b467bb7e1546953c8bd1223dd (patch) | |
| tree | 0d63ab8bead7a61ad53b3639f1cebfaa97f6641e | |
| parent | a72a19865d72481c2dd40110919863121cc644bd (diff) | |
| download | util-linux-a174eefb41a2ce8b467bb7e1546953c8bd1223dd.tar.gz | |
nologin: Prevent error from su -c
"su -c" can pass "-c" to nologin. It causes ugly error:
su -c "echo OK" - man
-nologin: invalid option -- 'c'
Try '-nologin --help' for more information.
Accept -c to prevent this error.
Signed-off-by: Josef Cejka <jcejka@suse.com>
Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
| -rw-r--r-- | login-utils/nologin.8 | 11 | ||||
| -rw-r--r-- | login-utils/nologin.c | 9 |
2 files changed, 16 insertions, 4 deletions
diff --git a/login-utils/nologin.8 b/login-utils/nologin.8 index ee59484430..9389a86c66 100644 --- a/login-utils/nologin.8 +++ b/login-utils/nologin.8 @@ -18,9 +18,16 @@ The exit code returned by is always 1. .PP .SH OPTIONS -.IP "\fB\-h, \-\-help\fP" + + +.TP +.IP "\fB\-c\fR, \fB\-\-command\fR \fIcommand\fR" +Ignored. For compatibility with +.I su -c "command" - user +that would cause error otherwise. +.IP "\fB\-h\fR, \fB\-\-help\fR" Display help text and exit. -.IP "\fB-V, \-\-version" +.IP "\fB-V\fR, \fB\-\-version\fR" Display version information and exit. .SH NOTES .B nologin diff --git a/login-utils/nologin.c b/login-utils/nologin.c index 14a091715e..c0010fc3d6 100644 --- a/login-utils/nologin.c +++ b/login-utils/nologin.c @@ -30,7 +30,8 @@ static void __attribute__((__noreturn__)) usage(void) fputs(_("Politely refuse a login.\n"), out); fputs(USAGE_OPTIONS, out); - printf(USAGE_HELP_OPTIONS(16)); + fputs(_(" -c, --command <command> does nothing (for compatibility with su -c)\n"), out); + printf(USAGE_HELP_OPTIONS(26)); printf(USAGE_MAN_TAIL("nologin(8)")); exit(EXIT_FAILURE); @@ -41,6 +42,7 @@ int main(int argc, char *argv[]) int c, fd = -1; struct stat st; static const struct option longopts[] = { + { "command", required_argument, NULL, 'c' }, { "help", 0, NULL, 'h' }, { "version", 0, NULL, 'V' }, { NULL, 0, NULL, 0 } @@ -50,8 +52,11 @@ int main(int argc, char *argv[]) bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); - while ((c = getopt_long(argc, argv, "hV", longopts, NULL)) != -1) { + while ((c = getopt_long(argc, argv, "c:hV", longopts, NULL)) != -1) { switch (c) { + case 'c': + /* Ignore the command, just don't print unknown option error. */ + break; case 'h': usage(); case 'V': |
