diff --git a/ChangeLog b/ChangeLog index ea4f40aa..7c6d8776 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-03-18 Nicolas François + + * src/chsh.c: Even for root, warn if an invalid shell is + specified. + 2010-03-18 Nicolas François * man/limits.5.xml: Document the selection of the limits when diff --git a/src/chsh.c b/src/chsh.c index c0dc948c..21d3b8b4 100644 --- a/src/chsh.c +++ b/src/chsh.c @@ -535,10 +535,17 @@ int main (int argc, char **argv) if ( !amroot && ( is_restricted_shell (loginsh) || (access (loginsh, X_OK) != 0))) { - fprintf (stderr, _("%s: %s is an invalid shell.\n"), Prog, loginsh); + fprintf (stderr, _("%s: %s is an invalid shell\n"), Prog, loginsh); fail_exit (1); } + /* Even for root, warn if an invalid shell is specified. */ + if (access (loginsh, F_OK) != 0) { + fprintf (stderr, _("%s: Warning: %s does not exist\n"), Prog, loginsh); + } else if (access (loginsh, X_OK) != 0) { + fprintf (stderr, _("%s: Warning: %s is not executable\n"), Prog, loginsh); + } + update_shell (user, loginsh); SYSLOG ((LOG_INFO, "changed user '%s' shell to '%s'", user, loginsh));