Use /bin/bash or user shell in /etc/passwd if none set before /bin/sh.

This commit is contained in:
Roy Marples 2009-04-26 17:57:06 +00:00
parent 1d48183646
commit 77c8f8abbb
2 changed files with 15 additions and 2 deletions

View File

@ -15,6 +15,8 @@
#rc_interactive="YES"
# If we need to drop to a shell, you can specify it here.
# If not specified we use $SHELL, otherwise the one specified in /etc/passwd,
# otherwise /bin/sh
# Linux users could specify /sbin/sulogin
#rc_shell=/bin/sh

View File

@ -53,6 +53,7 @@ const char rc_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
#include <getopt.h>
#include <libgen.h>
#include <limits.h>
#include <pwd.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
@ -315,6 +316,7 @@ static void
open_shell(void)
{
const char *shell;
struct passwd *pw;
#ifdef __linux__
const char *sys = rc_sys();
@ -330,8 +332,17 @@ open_shell(void)
#endif
shell = rc_conf_value("rc_shell");
if (shell == NULL)
shell = "/bin/sh";
/* No shell set, so obey env, then passwd, then default to /bin/sh */
if (shell == NULL) {
shell = getenv("SHELL");
if (shell == NULL) {
pw = getpwuid(getuid());
if (pw)
shell = pw->pw_shell;
if (shell == NULL)
shell = "/bin/sh";
}
}
run_program(shell);
}