diff options
-rw-r--r-- | CONTRIBUTORS | 4 | ||||
-rw-r--r-- | HISTORY | 2 | ||||
-rw-r--r-- | vdr.1 | 5 | ||||
-rw-r--r-- | vdr.c | 16 |
4 files changed, 20 insertions, 7 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS index d79f152b..8565c331 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2270,3 +2270,7 @@ Benjamin Hess <benjamin.h@gmx.ch> Winfried Koehler <w_koehl@gmx.de> for fixing finding new transponders + +Hans-Werner Hilse <hilse@web.de> + for adding the command line option --userdump to enable core dumps in case VDR + is run as root with option -u @@ -5589,3 +5589,5 @@ Video Disk Recorder Revision History in version 1.7.0. Note that you may need to switch back to an older version of your channels.conf file if you have already used version 1.5.14, because it introduced new parameters. +- Added the new command line option --userdump to enable core dumps in case VDR + is run as root with option -u (thanks to Hans-Werner Hilse). @@ -8,7 +8,7 @@ .\" License as specified in the file COPYING that comes with the .\" vdr distribution. .\" -.\" $Id: vdr.1 1.29 2007/02/24 17:40:20 kls Exp $ +.\" $Id: vdr.1 1.30 2008/02/08 15:55:26 kls Exp $ .\" .TH vdr 1 "07 Jan 2007" "1.4.5" "Video Disk Recorder" .SH NAME @@ -139,6 +139,9 @@ be set from the transponder data, but for security reasons vdr can switch to a lesser privileged user id during normal operation. .TP +.BI \-\-userdump +allow coredumps if -u is given (only for debugging). +.TP .BI \-\-vfat Encode special characters in recording names to avoid problems with VFAT file systems. @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/vdr * - * $Id: vdr.c 1.307 2008/01/27 14:38:45 kls Exp $ + * $Id: vdr.c 1.308 2008/02/08 15:55:30 kls Exp $ */ #include <getopt.h> @@ -86,7 +86,7 @@ static int LastSignal = 0; -static bool SetUser(const char *UserName) +static bool SetUser(const char *UserName, bool UserDump)//XXX name? { if (UserName) { struct passwd *user = getpwnam(UserName); @@ -106,10 +106,8 @@ static bool SetUser(const char *UserName) fprintf(stderr, "vdr: cannot set user id %u: %s\n", (unsigned int)user->pw_uid, strerror(errno)); return false; } - if (prctl(PR_SET_DUMPABLE, 2, 0, 0, 0) < 0) { + if (UserDump && prctl(PR_SET_DUMPABLE, 1, 0, 0, 0) < 0) fprintf(stderr, "vdr: warning - cannot set dumpable: %s\n", strerror(errno)); - // always non-fatal, and will not work with kernel < 2.6.13 - } } return true; } @@ -187,6 +185,7 @@ int main(int argc, char *argv[]) bool StartedAsRoot = false; const char *VdrUser = NULL; + bool UserDump = false; int SVDRPport = DEFAULTSVDRPPORT; const char *AudioCommand = NULL; const char *ConfigDirectory = NULL; @@ -241,6 +240,7 @@ int main(int argc, char *argv[]) { "shutdown", required_argument, NULL, 's' }, { "terminal", required_argument, NULL, 't' }, { "user", required_argument, NULL, 'u' }, + { "userdump", no_argument, NULL, 'u' | 0x100 }, { "version", no_argument, NULL, 'V' }, { "vfat", no_argument, NULL, 'v' | 0x100 }, { "video", required_argument, NULL, 'v' }, @@ -346,6 +346,9 @@ int main(int argc, char *argv[]) case 'u': if (*optarg) VdrUser = optarg; break; + case 'u' | 0x100: + UserDump = true; + break; case 'V': DisplayVersion = true; break; case 'v' | 0x100: @@ -376,7 +379,7 @@ int main(int argc, char *argv[]) if (strcmp(VdrUser, "root")) { if (!SetKeepCaps(true)) return 2; - if (!SetUser(VdrUser)) + if (!SetUser(VdrUser, UserDump)) return 2; if (!SetKeepCaps(false)) return 2; @@ -431,6 +434,7 @@ int main(int argc, char *argv[]) " -t TTY, --terminal=TTY controlling tty\n" " -u USER, --user=USER run as user USER; only applicable if started as\n" " root\n" + " --userdump allow coredumps if -u is given (debugging)\n" " -v DIR, --video=DIR use DIR as video directory (default: %s)\n" " -V, --version print version information and exit\n" " --vfat encode special characters in recording names to\n" |