From 7a27ce3077d2fa42c87bfa5f0cc0ad770ad25883 Mon Sep 17 00:00:00 2001 From: david reid Date: Fri, 25 Aug 2017 23:17:17 +0100 Subject: [PATCH] Add the ability to set the group to run as. --- minidlna.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/minidlna.c b/minidlna.c index 10b4806..48e56ff 100644 --- a/minidlna.c +++ b/minidlna.c @@ -68,6 +68,7 @@ #include #include #include +#include #include "config.h" @@ -510,6 +511,7 @@ init(int argc, char **argv) int ifaces = 0; media_types types; uid_t uid = 0; + gid_t gid = 0; /* first check if "-f" option is used */ for (i=2; igr_gid; + } + } + else + DPRINTF(E_FATAL, L_GENERAL, "Option -%c takes one argument.\n", argv[i][1]); break; #ifdef __linux__ case 'S': @@ -896,7 +914,7 @@ init(int argc, char **argv) { printf("Usage:\n\t" "%s [-d] [-v] [-f config_file] [-p port]\n" - "\t\t[-i network_interface] [-u uid_to_run_as]\n" + "\t\t[-i network_interface] [-u uid_to_run_as] [-g group_to_run_as]\n" "\t\t[-t notify_interval] [-P pid_filename]\n" "\t\t[-s serial] [-m model_number]\n" #ifdef __linux__ @@ -997,6 +1015,10 @@ init(int argc, char **argv) db_path, uid, strerror(errno)); } + if (gid > 0 && setgid(gid) == -1) + DPRINTF(E_FATAL, L_GENERAL, "Failed to switch to gid '%d'. [%s] EXITING.\n", + gid, strerror(errno)); + if (uid > 0 && setuid(uid) == -1) DPRINTF(E_FATAL, L_GENERAL, "Failed to switch to uid '%d'. [%s] EXITING.\n", uid, strerror(errno));