aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2009-04-26 17:57:06 +0000
committerRoy Marples <roy@marples.name>2009-04-26 17:57:06 +0000
commit77c8f8abbb4034e409be2e71a22c1caaf1ce5f03 (patch)
tree5d5617b39cc5cf1512d86c96bb4f5f2f7154c3d4 /src
parent1d4818364641c84d0e53fda90a356772299dee8e (diff)
Use /bin/bash or user shell in /etc/passwd if none set before /bin/sh.
Diffstat (limited to 'src')
-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 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);
}