ngompa / rpms / sudo

Forked from rpms/sudo 2 years ago
Clone
3b2065d
--- sudo-1.6.9p4/configure.in.getgrouplist	2007-08-20 11:41:32.000000000 +0200
3b2065d
+++ sudo-1.6.9p4/configure.in	2007-08-20 13:24:30.000000000 +0200
3b2065d
@@ -1677,7 +1677,7 @@
05db95f
 dnl
05db95f
 AC_CHECK_FUNCS(strchr strrchr memchr memcpy memset sysconf tzset \
3b2065d
 	       strftime setrlimit initgroups getgroups fstat gettimeofday \
3b2065d
-	       setlocale getaddrinfo)
3b2065d
+	       setlocale getaddrinfo getgrouplist)
05db95f
 if test -z "$SKIP_SETRESUID"; then
05db95f
     AC_CHECK_FUNCS(setresuid, [SKIP_SETREUID=yes])
3b2065d
 fi
3b2065d
--- sudo-1.6.9p4/check.c.getgrouplist	2007-07-06 21:52:13.000000000 +0200
3b2065d
+++ sudo-1.6.9p4/check.c	2007-08-20 13:21:10.000000000 +0200
3b2065d
@@ -308,6 +308,24 @@
05db95f
 	    return(TRUE);
05db95f
     }
05db95f
 
05db95f
+#ifdef HAVE_GETGROUPLIST
05db95f
+    {
05db95f
+	gid_t *grouplist, grouptmp;
05db95f
+	int n_groups, i;
05db95f
+	n_groups = 1;
05db95f
+	if (getgrouplist(user_name, user_gid, &grouptmp, &n_groups) == -1) {
05db95f
+	    grouplist = (gid_t *) emalloc(sizeof(gid_t) * (n_groups + 1));
05db95f
+	    if (getgrouplist(user_name, user_gid, grouplist, &n_groups) > 0)
05db95f
+		for (i = 0; i < n_groups; i++)
05db95f
+		    if (grouplist[i] == grp->gr_gid) {
05db95f
+			free(grouplist);
05db95f
+			return(TRUE);
05db95f
+		    }
05db95f
+	    free(grouplist);
05db95f
+	}
05db95f
+    }
05db95f
+#endif
05db95f
+
05db95f
     return(FALSE);
05db95f
 }
05db95f
 
e25038b