From: nekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Date: Thu, 18 Mar 2010 23:21:00 +0000 (+0000)
Subject: 	* src/chsh.c: Even for root, warn if an invalid shell is
X-Git-Tag: 4.1.5~298
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5e38d92a95e26384ea1a53a508f50c45429e1dd4;p=shadow

	* src/chsh.c: Even for root, warn if an invalid shell is
	specified.
---

diff --git a/ChangeLog b/ChangeLog
index ea4f40aa..7c6d8776 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-03-18  Nicolas François  <nicolas.francois@centraliens.net>
+
+	* src/chsh.c: Even for root, warn if an invalid shell is
+	specified.
+
 2010-03-18  Nicolas François  <nicolas.francois@centraliens.net>
 
 	* 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));