summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2008-02-08 15:55:30 +0100
committerKlaus Schmidinger <vdr@tvdr.de>2008-02-08 15:55:30 +0100
commite6f806d6023487374cecbbd86946065a6e54fa2b (patch)
tree9ca325c26095cd676a57310996159b2730f0e097
parentf54c810bcd80221f5f07590233a563d93f49ffe8 (diff)
downloadvdr-e6f806d6023487374cecbbd86946065a6e54fa2b.tar.gz
vdr-e6f806d6023487374cecbbd86946065a6e54fa2b.tar.bz2
Implemented option --userdump
-rw-r--r--CONTRIBUTORS4
-rw-r--r--HISTORY2
-rw-r--r--vdr.15
-rw-r--r--vdr.c16
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
diff --git a/HISTORY b/HISTORY
index 8e3a2dab..9af72e8e 100644
--- a/HISTORY
+++ b/HISTORY
@@ -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).
diff --git a/vdr.1 b/vdr.1
index 1fa65392..fe25669f 100644
--- a/vdr.1
+++ b/vdr.1
@@ -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.
diff --git a/vdr.c b/vdr.c
index 2ad39733..0bd5416c 100644
--- a/vdr.c
+++ b/vdr.c
@@ -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"