summaryrefslogtreecommitdiff
path: root/vdr.c
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 /vdr.c
parentf54c810bcd80221f5f07590233a563d93f49ffe8 (diff)
downloadvdr-e6f806d6023487374cecbbd86946065a6e54fa2b.tar.gz
vdr-e6f806d6023487374cecbbd86946065a6e54fa2b.tar.bz2
Implemented option --userdump
Diffstat (limited to 'vdr.c')
-rw-r--r--vdr.c16
1 files changed, 10 insertions, 6 deletions
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"