diff --git a/scheduler/cups-exec.c b/scheduler/cups-exec.c index 7b851d33c..190f64386 100644 --- a/scheduler/cups-exec.c +++ b/scheduler/cups-exec.c @@ -134,7 +134,13 @@ main(int argc, /* I - Number of command-line args */ # if CUPS_SNAP if (setgroups(0, NULL)) # else - if (setgroups(1, &gid)) +#include + struct passwd * pwd = getpwuid(uid); + if(initgroups(pwd->pw_name,pwd->pw_gid)) + { + fprintf(stderr, "DEBUG: initgroups failed\n"); + exit(errno + 100); + } # endif /* CUPS_SNAP */ exit(errno + 100); diff --git a/scheduler/util.c b/scheduler/util.c index 228733f38..42ffe1854 100644 --- a/scheduler/util.c +++ b/scheduler/util.c @@ -296,7 +296,16 @@ cupsdPipeCommand(int *pid, /* O - Process ID or 0 on error */ */ if (!getuid() && user) - setuid(user); /* Run as restricted user */ + { +#include + struct passwd * pwd = getpwuid(user); + if(initgroups(pwd->pw_name,pwd->pw_gid)) + { + fprintf(stderr, "DEBUG: initgroups failed\n"); + exit(errno + 100); + } + setuid(user); /* Run as restricted user */ + } if ((fd = open("/dev/null", O_RDONLY)) > 0) {