From c345d8e94589e3c74a9fac40f440affbc359c8d1 Mon Sep 17 00:00:00 2001
From: Denis Vlasenko <vda.linux@googlemail.com>
Date: Sat, 14 Oct 2006 11:47:02 +0000
Subject: [PATCH] sulogin: add support for $SUSHELL & $sushell

---
 loginutils/adduser.c | 10 +++++-----
 loginutils/sulogin.c | 18 ++++++++++++++----
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/loginutils/adduser.c b/loginutils/adduser.c
index 8101b20b4..a99f47d68 100644
--- a/loginutils/adduser.c
+++ b/loginutils/adduser.c
@@ -114,11 +114,11 @@ static int adduser(struct passwd *p, unsigned long flags)
 	file = xfopen(bb_path_shadow_file, "a");
 	fseek(file, 0, SEEK_END);
 	fprintf(file, "%s:!:%ld:%d:%d:%d:::\n",
-					p->pw_name,				/* username */
-					time(NULL) / 86400,		/* sp->sp_lstchg */ 
-					0,						/* sp->sp_min */
-					99999,					/* sp->sp_max */
-					7);						/* sp->sp_warn */
+			p->pw_name,             /* username */
+			time(NULL) / 86400,     /* sp->sp_lstchg */ 
+			0,                      /* sp->sp_min */
+			99999,                  /* sp->sp_max */
+			7);                     /* sp->sp_warn */
 	fclose(file);
 #endif
 
diff --git a/loginutils/sulogin.c b/loginutils/sulogin.c
index 679439544..c07264e7b 100644
--- a/loginutils/sulogin.c
+++ b/loginutils/sulogin.c
@@ -42,6 +42,7 @@ int sulogin_main(int argc, char **argv)
 	const char * const *p;
 	struct passwd *pwd;
 	struct spwd *spwd;
+	const char *shell;
 
 	logmode = LOGMODE_BOTH;
 	openlog(applet_name, 0, LOG_AUTH);
@@ -69,12 +70,14 @@ int sulogin_main(int argc, char **argv)
 
 	signal(SIGALRM, catchalarm);
 
-	if (!(pwd = getpwuid(0))) {
+	pwd = getpwuid(0);
+	if (!pwd) {
 		goto auth_error;
 	}
 
 	if (ENABLE_FEATURE_SHADOWPASSWDS) {
-		if (!(spwd = getspnam(pwd->pw_name))) {
+		spwd = getspnam(pwd->pw_name);
+		if (!spwd) {
 			goto auth_error;
 		}
 		pwd->pw_passwd = spwd->sp_pwdp;
@@ -103,9 +106,16 @@ int sulogin_main(int argc, char **argv)
 
 	USE_SELINUX(renew_current_security_context());
 
-	run_shell(pwd->pw_shell, 1, 0, 0);
+	shell = getenv("SUSHELL");
+	if (!shell) shell = getenv("sushell");
+	if (!shell) {
+		shell = "/bin/sh";
+		if (pwd->pw_shell[0])
+			shell = pwd->pw_shell;
+	}
+	run_shell(shell, 1, 0, 0);
 	/* never returns */
 
 auth_error:
-	bb_error_msg_and_die("no password entry for `root'");
+	bb_error_msg_and_die("no password entry for 'root'");
 }