From 21b564805d54f5f790d6185823459e823bb43b76 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Thu, 14 Mar 2013 09:38:06 +0100 Subject: [PATCH] When switching to a less privileged user id, VDR now sets the environment variables HOME, USER, LOGNAME and SHELL accordingly --- CONTRIBUTORS | 2 ++ HISTORY | 2 ++ vdr.c | 8 ++++++-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index d56459d8..421b9fb7 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2790,6 +2790,8 @@ Manuel Reimer seconds during replay for suggesting to synchronize system time to the transponder time using adjtime() in order to avoid discontinuities + for setting the environment variables HOME, USER, LOGNAME and SHELL accordingly + when switching to a less privileged user id Rene van den Braken for reporting a bug in writing the PCR pid into the PMT in diff --git a/HISTORY b/HISTORY index db43e707..13926c7b 100644 --- a/HISTORY +++ b/HISTORY @@ -7750,3 +7750,5 @@ Video Disk Recorder Revision History - Updated the introductory text of the vdr.1 man page. - Added a note to the INSTALL file regarding multiple disk setup becoming deprecated in a future version of VDR. +- When switching to a less privileged user id, VDR now sets the environment variables + HOME, USER, LOGNAME and SHELL accordingly (thanks to Manuel Reimer). diff --git a/vdr.c b/vdr.c index 742d1699..9231e689 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.tvdr.de * - * $Id: vdr.c 2.55 2013/03/12 13:27:40 kls Exp $ + * $Id: vdr.c 2.56 2013/03/14 09:34:57 kls Exp $ */ #include @@ -87,7 +87,7 @@ static int LastSignal = 0; -static bool SetUser(const char *UserName, bool UserDump)//XXX name? +static bool SetUser(const char *UserName, bool UserDump) { if (UserName) { struct passwd *user = getpwnam(UserName); @@ -109,6 +109,10 @@ static bool SetUser(const char *UserName, bool UserDump)//XXX name? } if (UserDump && prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) < 0) fprintf(stderr, "vdr: warning - cannot set dumpable: %s\n", strerror(errno)); + setenv("HOME", user->pw_dir, 1); + setenv("USER", user->pw_name, 1); + setenv("LOGNAME", user->pw_name, 1); + setenv("SHELL", user->pw_shell, 1); } return true; }