From eb870efaff2d846f108a442263b446e562a293fd Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Wed, 18 Oct 2017 09:11:23 +0200 Subject: [PATCH] Add support for setting effective group ID of services Finit has long since supported an @user:group syntax to services, tasks, and run stanzas. Setting UID was implemented at that time, but setting GID never was. This patch fixes that oversight. Signed-off-by: Joachim Nilsson --- src/service.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/service.c b/src/service.c index ee76826e..1e1c31d7 100644 --- a/src/service.c +++ b/src/service.c @@ -184,12 +184,14 @@ static int service_start(svc_t *svc) char *home = NULL; #ifdef ENABLE_STATIC int uid = 0; /* XXX: Fix better warning that dropprivs is disabled. */ + int gid = 0; #else int uid = getuser(svc->username, &home); + int gid = getgroup(svc->group); #endif char *args[MAX_NUM_SVC_ARGS]; - /* Set desired user */ + /* Set desired user+group */ if (uid >= 0) { setuid(uid); @@ -202,6 +204,9 @@ static int service_start(svc_t *svc) } } + if (gid >= 0) + setgid(gid); + /* Serve copy of args to process in case it modifies them. */ for (i = 0; i < (MAX_NUM_SVC_ARGS - 1) && svc->args[i][0] != 0; i++) args[i] = svc->args[i];