From: Tomas Mraz Date: Thu, 16 Jan 2020 11:55:30 +0000 (+0100) Subject: Make the check for non-executable shell only a warning. X-Git-Tag: 4.8.1~3^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F210%2Fhead;p=thirdparty%2Fshadow.git Make the check for non-executable shell only a warning. Although it is a good idea to check for an inadvertent typo in the shell name it is possible that the shell might not be present on the system yet when the user is added. --- diff --git a/src/useradd.c b/src/useradd.c index c29ae949b..a679392d0 100644 --- a/src/useradd.c +++ b/src/useradd.c @@ -1328,15 +1328,22 @@ static void process_flags (int argc, char **argv) if ( ( !VALID (optarg) ) || ( ('\0' != optarg[0]) && ('/' != optarg[0]) - && ('*' != optarg[0]) ) - || (stat(optarg, &st) != 0) - || (S_ISDIR(st.st_mode)) - || (access(optarg, X_OK) != 0)) { + && ('*' != optarg[0]) )) { fprintf (stderr, _("%s: invalid shell '%s'\n"), Prog, optarg); exit (E_BAD_ARG); } + if ( '\0' != optarg[0] + && '*' != optarg[0] + && strcmp(optarg, "/sbin/nologin") != 0 + && ( stat(optarg, &st) != 0 + || S_ISDIR(st.st_mode) + || access(optarg, X_OK) != 0)) { + fprintf (stderr, + _("%s: Warning: missing or non-executable shell '%s'\n"), + Prog, optarg); + } user_shell = optarg; def_shell = optarg; sflg = true;