summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY2
-rw-r--r--vdr.c8
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 <Manuel.Reimer@gmx.de>
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 <rene@vandenbraken.name>
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 <getopt.h>
@@ -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;
}