On Mon, Jan 27, 2020 at 04:42:41PM +0000, Daniel P. Berrangé wrote:
On Mon, Jan 27, 2020 at 12:44:01PM +0100, Pavel Hrdina wrote:
> On Thu, Jan 23, 2020 at 11:42:59AM +0000, Daniel P. Berrangé wrote:
> > The mgetgroups function is a GNULIB custom wrapper around
> > getgrouplist(). This implements a simplified version of
> > that code directly.
> >
> > Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
> > ---
> > src/internal.h | 4 ++++
> > src/util/virutil.c | 34 ++++++++++++++++++++++++++++------
> > 2 files changed, 32 insertions(+), 6 deletions(-)
> >
> > diff --git a/src/util/virutil.c b/src/util/virutil.c
> > index 87ca16c088..4bc0aef35f 100644
> > --- a/src/util/virutil.c
> > +++ b/src/util/virutil.c
> > @@ -1000,11 +1004,27 @@ virGetGroupList(uid_t uid, gid_t gid, gid_t **list)
> > /* invalid users have no supplementary groups */
> > if (uid != (uid_t)-1 &&
> > virGetUserEnt(uid, &user, &primary, NULL, NULL, true) >= 0)
{
> > - if ((ret = mgetgroups(user, primary, list)) < 0) {
> > - virReportSystemError(errno,
> > - _("cannot get group list for
'%s'"), user);
> > - ret = -1;
> > - goto cleanup;
> > + int nallocgrps = 10;
> > + gid_t *grps = g_new(gid_t, nallocgrps);
>
> This is never used anywhere except in the while loop.
The loop relies on the "grps" pointer being persistent across
loop iterations though.
Sorry, probably bad wording. I meant that we need to assign the "grps"
to *lists otherwise it's used only in the loop.
>
> > + while (1) {
> > + int nprevallocgrps = nallocgrps;
> > + int rv;
> > +
> > + rv = getgrouplist(user, primary, grps, &nallocgrps);
> > +
> > + /* Some systems (like Darwin) have a bug where they
> > + never increase max_n_groups. */
> > + if (rv < 0 && nprevallocgrps == nallocgrps)
> > + nallocgrps *= 2;
> > +
> > + /* either shrinks to actual size, or enlarges tonew size */
>
> s/tonew/to new/
>
> > + grps = g_renew(gid_t, grps, nallocgrps);
> > +
> > + if (rv >= 0) {
> > + ret = rv;
> > + break;
>
> Based on the GNULIB implementation here we should set *list = grps.
Yes.
>
> With that fixed:
>
> Reviewed-by: Pavel Hrdina <phrdina(a)redhat.com>
Regards,
Daniel
--
|:
https://berrange.com -o-
https://www.flickr.com/photos/dberrange :|
|:
https://libvirt.org -o-
https://fstop138.berrange.com :|
|:
https://entangle-photo.org -o-
https://www.instagram.com/dberrange :|