diff options
Diffstat (limited to 'src/rc')
-rw-r--r-- | src/rc/rc.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/rc/rc.c b/src/rc/rc.c index 56d6d580..0336264c 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); } |