author | Vladimir Marek <Vladimir.Marek@oracle.com> |
Mon, 04 Mar 2013 21:41:55 +0100 | |
branch | s11u1-sru |
changeset 2511 | 4a3540719f56 |
permissions | -rw-r--r-- |
2511
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
1 |
This patch is using solaris private interface _getgroupsbymember(). We should |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
2 |
switch to similar public interface once Solaris has one. |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
3 |
|
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
4 |
--- sudo-1.8.4p5/compat/getgrouplist.c Sat Jan 19 22:45:01 2013 |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
5 |
+++ sudo-1.8.4p5/compat/getgrouplist.c Sat Jan 19 22:44:59 2013 |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
6 |
@@ -36,6 +36,15 @@ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
7 |
|
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
8 |
#include "missing.h" |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
9 |
|
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
10 |
+#ifdef HAVE__GETGRPSBYMEMBER |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
11 |
+extern int _getgroupsbymember |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
12 |
+( |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
13 |
+ const char* username, gid_t gid_array[], |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
14 |
+ int maxgids, int numgids |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
15 |
+); |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
16 |
+#endif /* HAVE__GETGRPSBYMEMBER */ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
17 |
+ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
18 |
+ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
19 |
#ifdef HAVE_GETGRSET |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
20 |
/* |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
21 |
* BSD-compatible getgrouplist(3) using getgrset(3) |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
22 |
@@ -81,6 +90,25 @@ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
23 |
|
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
24 |
#else /* HAVE_GETGRSET */ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
25 |
|
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
26 |
+#ifdef HAVE__GETGRPSBYMEMBER |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
27 |
+int |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
28 |
+getgrouplist(const char *name, gid_t basegid, gid_t *groups, int *ngroupsp) |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
29 |
+{ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
30 |
+ int grpsize = *ngroupsp; |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
31 |
+ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
32 |
+ if (grpsize <= 0) |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
33 |
+ return -1; |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
34 |
+ groups[0] = basegid; |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
35 |
+ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
36 |
+ if ((grpsize = _getgroupsbymember(name, groups, grpsize, 1)) == -1) |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
37 |
+ return -1; |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
38 |
+ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
39 |
+ *ngroupsp = grpsize; |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
40 |
+ return 0; |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
41 |
+} |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
42 |
+ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
43 |
+#else /* ! HAVE__GETGRPSBYMEMBER */ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
44 |
+ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
45 |
/* |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
46 |
* BSD-compatible getgrouplist(3) using getgrent(3) |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
47 |
*/ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
48 |
@@ -128,4 +156,7 @@ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
49 |
|
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
50 |
return rval; |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
51 |
} |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
52 |
+ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
53 |
+#endif /* ! HAVE__GETGRPSBYMEMBER */ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
54 |
+ |
4a3540719f56
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
55 |
#endif /* HAVE_GETGRSET */ |