16195225 use _getgroupsbymember() instead of slow getgrent() calls s11-sru
authorVladimir Marek <Vladimir.Marek@oracle.com>
Fri, 22 Feb 2013 10:08:20 +0100
branchs11-sru
changeset 2508 09133c97cc65
parent 2414 befefebde130
child 2690 6435fcfe8d40
16195225 use _getgroupsbymember() instead of slow getgrent() calls
components/sudo/Makefile
components/sudo/patches/getgrset.patch
--- a/components/sudo/Makefile	Wed Oct 31 15:47:49 2012 -0700
+++ b/components/sudo/Makefile	Fri Feb 22 10:08:20 2013 +0100
@@ -19,7 +19,7 @@
 # CDDL HEADER END
 
 #
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
 #
 
 include ../../make-rules/shared-macros.mk
@@ -40,7 +40,7 @@
 include $(WS_TOP)/make-rules/ips.mk
 
 CONFIGURE_ENV +=	"CC=$(CC)"
-CONFIGURE_ENV +=	"CFLAGS=$(CFLAGS)"
+CONFIGURE_ENV +=	"CFLAGS=$(CFLAGS) -DHAVE__GETGRPSBYMEMBER"
 CONFIGURE_ENV +=	"CXX=$(CXX)"
 CONFIGURE_ENV +=	"MAKE=$(GMAKE)"
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/sudo/patches/getgrset.patch	Fri Feb 22 10:08:20 2013 +0100
@@ -0,0 +1,55 @@
+This patch is using solaris private interface _getgroupsbymember(). We should
+switch to similar public interface once Solaris has one.
+
+--- sudo-1.8.4p5/compat/getgrouplist.c	Sat Jan 19 22:45:01 2013
++++ sudo-1.8.4p5/compat/getgrouplist.c	Sat Jan 19 22:44:59 2013
+@@ -36,6 +36,15 @@
+ 
+ #include "missing.h"
+ 
++#ifdef HAVE__GETGRPSBYMEMBER
++extern int _getgroupsbymember
++(
++    const char* username, gid_t gid_array[],
++    int maxgids, int numgids
++); 
++#endif /* HAVE__GETGRPSBYMEMBER */
++
++
+ #ifdef HAVE_GETGRSET
+ /*
+  * BSD-compatible getgrouplist(3) using getgrset(3)
+@@ -81,6 +90,25 @@
+ 
+ #else /* HAVE_GETGRSET */
+ 
++#ifdef HAVE__GETGRPSBYMEMBER
++int
++getgrouplist(const char *name, gid_t basegid, gid_t *groups, int *ngroupsp)
++{
++    int grpsize = *ngroupsp;
++
++    if (grpsize <= 0)
++	return -1;
++    groups[0] = basegid;
++
++    if ((grpsize = _getgroupsbymember(name, groups, grpsize, 1)) == -1)
++	return -1;
++
++    *ngroupsp = grpsize;
++    return 0;
++}
++
++#else /* ! HAVE__GETGRPSBYMEMBER */
++
+ /*
+  * BSD-compatible getgrouplist(3) using getgrent(3)
+  */
+@@ -128,4 +156,7 @@
+ 
+     return rval;
+ }
++
++#endif /* ! HAVE__GETGRPSBYMEMBER */
++
+ #endif /* HAVE_GETGRSET */