summaryrefslogtreecommitdiff
path: root/src/rc/rc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rc/rc.c')
-rw-r--r--src/rc/rc.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/rc/rc.c b/src/rc/rc.c
index 56d6d58..0336264 100644
--- a/src/rc/rc.c
+++ b/src/rc/rc.c
@@ -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);
}