Implemented option --userdump

This commit is contained in:
Klaus Schmidinger 2008-02-08 15:55:30 +01:00
parent f54c810bcd
commit e6f806d602
4 changed files with 20 additions and 7 deletions

View File

@ -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

View File

@ -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).

5
vdr.1
View File

@ -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.

16
vdr.c
View File

@ -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"