From 5e38d92a95e26384ea1a53a508f50c45429e1dd4 Mon Sep 17 00:00:00 2001 From: nekral-guest Date: Thu, 18 Mar 2010 23:21:00 +0000 Subject: [PATCH] * src/chsh.c: Even for root, warn if an invalid shell is specified. --- ChangeLog | 5 +++++ src/chsh.c | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) 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));