diff --git a/src/main.c b/src/main.c index 711de23a..9d555e8e 100644 --- a/src/main.c +++ b/src/main.c @@ -6,9 +6,10 @@ * Copyright 2000-2004, Jack Moffitt , * oddsock , - * Karl Heyes + * Karl Heyes , * and others (see AUTHORS for details). * Copyright 2011-2012, Philipp "ph3-der-loewe" Schafft , + * Copyright 2014, Thomas B. Ruecker . */ /* -*- c-basic-offset: 4; indent-tabs-mode: nil; -*- */ @@ -396,14 +397,15 @@ static void _ch_root_uid_setup(void) return; } - if(gid != (gid_t)-1) { + if(uid != (uid_t)-1 && gid != (gid_t)-1) { if(!setgid(gid)) fprintf(stdout, "Changed groupid to %i.\n", (int)gid); else fprintf(stdout, "Error changing groupid: %s.\n", strerror(errno)); - } - - if(uid != (uid_t)-1) { + if(!initgroups(conf->user, gid)) + fprintf(stdout, "Changed supplementary groups based on user: %s.\n", conf->user); + else + fprintf(stdout, "Error changing supplementary groups: %s.\n", strerror(errno)); if(!setuid(uid)) fprintf(stdout, "Changed userid to %i.\n", (int)uid); else