# HG changeset patch # User Vladimir Marek # Date 1358610862 -3600 # Node ID d8e2284538ee849775093bde90094c1576b5e890 # Parent a62391631ea1a974b41d05483e264ef5f349dcf2 16195225 use _getgroupsbymember() instead of slow getgrent() calls diff -r a62391631ea1 -r d8e2284538ee components/sudo/Makefile --- a/components/sudo/Makefile Wed Jan 23 12:17:32 2013 -0800 +++ b/components/sudo/Makefile Sat Jan 19 16:54:22 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 @@ -41,7 +41,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)" diff -r a62391631ea1 -r d8e2284538ee components/sudo/patches/getgrset.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/sudo/patches/getgrset.patch Sat Jan 19 16:54:22 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 */