# HG changeset patch # User Vladimir Marek # Date 1361524266 -3600 # Node ID ba463e5578fa90f73127dad6cf9a684e89b55500 # Parent 11d0c46e4d36ffb41464dd97c7a357d901fd7690 16195225 use _getgroupsbymember() instead of slow getgrent() calls diff -r 11d0c46e4d36 -r ba463e5578fa components/sudo/Makefile --- a/components/sudo/Makefile Mon Feb 25 23:02:41 2013 -0800 +++ b/components/sudo/Makefile Fri Feb 22 10:11:06 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 11d0c46e4d36 -r ba463e5578fa components/sudo/patches/getgrset.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/components/sudo/patches/getgrset.patch Fri Feb 22 10:11:06 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 */