From f918323ce6896f09d030a7a562e220d8bbf3ec95 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sun, 28 Sep 2014 15:43:25 +0200 Subject: [PATCH] main: move -u and -g processing outside fork, fixes 2331 --- src/main.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main.c b/src/main.c index 2e77000e..fbf21447 100644 --- a/src/main.c +++ b/src/main.c @@ -696,14 +696,13 @@ main(int argc, char **argv) http_server_init(opt_bindaddr); // bind to ports only htsp_init(opt_bindaddr); // bind to ports only - /* Daemonise */ - if(opt_fork) { + /* Set priviledges */ + if(opt_fork || opt_group || opt_user) { const char *homedir; gid_t gid; uid_t uid; struct group *grp = getgrnam(opt_group ?: "video"); struct passwd *pw = opt_user ? getpwnam(opt_user) : NULL; - FILE *pidfile = fopen(opt_pidpath, "w+"); if(grp != NULL) { gid = grp->gr_gid; @@ -715,7 +714,7 @@ main(int argc, char **argv) if (getuid() != pw->pw_uid) { gid_t glist[10]; int gnum; - gnum = get_user_groups(pw, glist, 10); + gnum = get_user_groups(pw, glist, ARRAY_SIZE(glist)); if (setgroups(gnum, glist)) { tvhlog(LOG_ALERT, "START", "setgroups() failed, do you have permission?"); @@ -738,6 +737,11 @@ main(int argc, char **argv) "setuid() failed, do you have permission?"); return 1; } + } + + /* Daemonise */ + if(opt_fork) { + FILE *pidfile = fopen(opt_pidpath, "w+"); if(daemon(0, 0)) { exit(2);