From 00a2285917002726747929b1d13b6742ee87ea58 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 30 Apr 2016 01:09:07 +0000 Subject: pty.c: user shell * ext/pty/pty.c (establishShell): honor USER environment variable and login name over uid, one pid can be shared by some login names. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54822 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/pty/extconf.rb | 1 + ext/pty/pty.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'ext') diff --git a/ext/pty/extconf.rb b/ext/pty/extconf.rb index b37057f3c9..844902b1f7 100644 --- a/ext/pty/extconf.rb +++ b/ext/pty/extconf.rb @@ -9,6 +9,7 @@ if /mswin|mingw|bccwin|nacl/ !~ RUBY_PLATFORM have_header("libutil.h") have_header("util.h") # OpenBSD openpty have_header("pty.h") + have_header("pwd.h") have_library("util", "openpty") if have_func("posix_openpt") or have_func("openpty") or diff --git a/ext/pty/pty.c b/ext/pty/pty.c index 106f35329d..8340e96f1d 100644 --- a/ext/pty/pty.c +++ b/ext/pty/pty.c @@ -9,7 +9,9 @@ #include #include #include +#ifdef HAVE_PWD_H #include +#endif #ifdef HAVE_SYS_IOCTL_H #include #endif @@ -157,7 +159,6 @@ establishShell(int argc, VALUE *argv, struct pty_info *info, int master, slave, status = 0; rb_pid_t pid; char *p, *getenv(); - struct passwd *pwent; VALUE v; struct child_info carg; char errbuf[32]; @@ -169,11 +170,16 @@ establishShell(int argc, VALUE *argv, struct pty_info *info, shellname = p; } else { - pwent = getpwuid(getuid()); +#if defined HAVE_PWD_H + const char *username = getenv("USER"); + struct passwd *pwent = getpwnam(username ? username : getlogin()); if (pwent && pwent->pw_shell) shellname = pwent->pw_shell; else shellname = "/bin/sh"; +#else + shellname = "/bin/sh"; +#endif } v = rb_str_new2(shellname); argc = 1; -- cgit v1.2.3