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.
This commit is contained in:
Tomas Mraz 2020-01-16 12:55:30 +01:00
parent 3e942adb21
commit 4ed08824e5

View File

@ -1328,15 +1328,22 @@ static void process_flags (int argc, char **argv)
if ( ( !VALID (optarg) ) if ( ( !VALID (optarg) )
|| ( ('\0' != optarg[0]) || ( ('\0' != optarg[0])
&& ('/' != optarg[0]) && ('/' != optarg[0])
&& ('*' != optarg[0]) ) && ('*' != optarg[0]) )) {
|| (stat(optarg, &st) != 0)
|| (S_ISDIR(st.st_mode))
|| (access(optarg, X_OK) != 0)) {
fprintf (stderr, fprintf (stderr,
_("%s: invalid shell '%s'\n"), _("%s: invalid shell '%s'\n"),
Prog, optarg); Prog, optarg);
exit (E_BAD_ARG); 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; user_shell = optarg;
def_shell = optarg; def_shell = optarg;
sflg = true; sflg = true;