Author: rmacklem
Date: Thu Jun  4 00:28:20 2020
New Revision: 361780
URL: https://svnweb.freebsd.org/changeset/base/361780

Log:
  Fix mountd to handle getgrouplist() not returning groups[0] == groups[1].
  
  Prior to r174547, getgrouplist(3) always returned a groups list with
  element 0 and 1 set to the basegid argument, so long as ngroups was > 1.
  Post-r174547 this is not the case. r328304 disabled the deduplication that
  removed the duplicate, but the duplicate still does not occur unless the
  group for a user in the password database is also entered in the group
  database.
  This patch fixes mountd so that it handles the case where a user specified
  with the -maproot or -mapall exports option has a getgrouplist(3) groups
  list where groups[0] != groups[1].
  Found while testing another mountd patch.
  
  MFC after:    2 weeks

Modified:
  head/usr.sbin/mountd/mountd.c

Modified: head/usr.sbin/mountd/mountd.c
==============================================================================
--- head/usr.sbin/mountd/mountd.c       Wed Jun  3 23:21:44 2020        
(r361779)
+++ head/usr.sbin/mountd/mountd.c       Thu Jun  4 00:28:20 2020        
(r361780)
@@ -3434,10 +3434,16 @@ parsecred(char *namelist, struct xucred *cr)
                /*
                 * Compress out duplicate.
                 */
-               cr->cr_ngroups = ngroups - 1;
                cr->cr_groups[0] = groups[0];
-               for (cnt = 2; cnt < ngroups; cnt++)
-                       cr->cr_groups[cnt - 1] = groups[cnt];
+               if (ngroups > 1 && groups[0] == groups[1]) {
+                       cr->cr_ngroups = ngroups - 1;
+                       for (cnt = 2; cnt < ngroups; cnt++)
+                               cr->cr_groups[cnt - 1] = groups[cnt];
+               } else {
+                       cr->cr_ngroups = ngroups;
+                       for (cnt = 1; cnt < ngroups; cnt++)
+                               cr->cr_groups[cnt] = groups[cnt];
+               }
                return;
        }
        /*
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to