From 9b2140040471136e99e13806d0d4f88ccd8863fa Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Fri, 4 Jan 2013 16:25:31 +0100 Subject: Set supplementary groups --- src/config.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/config.c') diff --git a/src/config.c b/src/config.c index 2d387f3..b857d60 100644 --- a/src/config.c +++ b/src/config.c @@ -848,6 +848,20 @@ static void configure_user(fastd_context_t *ctx, fastd_config_t *conf) { conf->gid = grpr->gr_gid; } + + if (conf->user) { + int ngroups = 0; + if (getgrouplist(conf->user, conf->gid, NULL, &ngroups) < 0) { + /* the user has supplementary groups */ + + conf->groups = calloc(ngroups, sizeof(gid_t)); + if (getgrouplist(conf->user, conf->gid, conf->groups, &ngroups) < 0) + exit_errno(ctx, "getgrouplist"); + + conf->n_groups = ngroups; + } + } + } void fastd_configure(fastd_context_t *ctx, fastd_config_t *conf, int argc, char *const argv[]) { @@ -1036,6 +1050,7 @@ void fastd_config_release(fastd_context_t *ctx, fastd_config_t *conf) { free(conf->user); free(conf->group); + free(conf->groups); free(conf->ifname); free(conf->secret); free(conf->on_up); -- cgit v1.2.3