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


Reply via email to