James, Sergey, > > So we may also need to do something like this: > > > > #if HAVE_SETGROUPS > > /* Use of setgroups() is restricted to root only. */ > > if (0 =3D=3D geteuid()) > > { > > /* We're either root or running setuid-root. */ > > gid_t groups[1]; > > groups[0] =3D gid; > > if (0 !=3D setgroups(1u, groups)) > > Yes, but on the other hand the caller might need to retain some > supplementary groups when dropping privileges.
What is the use-case that you are considering? A setuid/setgid executable, or an executable run by root? And what task does it do, related to the user's data and devices? > Perhaps it is worth to provide a mechanism for that too? Something like > > idpriv_drop_grp (size_t ngrp, gid_t *groups) Should that drop the specified supplementary groups (and keep the rest), or keep the specified supplementary groups? Bruno