31 lines
1.1 KiB
Diff
31 lines
1.1 KiB
Diff
diff -up shadow-4.8/src/useradd.c.invalid-shell shadow-4.8/src/useradd.c
|
|
--- shadow-4.8/src/useradd.c.invalid-shell 2020-01-16 08:47:13.841921106 +0100
|
|
+++ shadow-4.8/src/useradd.c 2020-01-16 08:57:26.338421901 +0100
|
|
@@ -1277,15 +1277,22 @@ static void process_flags (int argc, cha
|
|
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;
|