author | Vladimir Marek <Vladimir.Marek@oracle.com> |
Sat, 19 Jan 2013 16:54:22 +0100 | |
changeset 1133 | d8e2284538ee |
permissions | -rw-r--r-- |
1133
d8e2284538ee
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 |
d8e2284538ee
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. |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
3 |
|
d8e2284538ee
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 |
d8e2284538ee
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 |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
6 |
@@ -36,6 +36,15 @@ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
7 |
|
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
8 |
#include "missing.h" |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
9 |
|
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
10 |
+#ifdef HAVE__GETGRPSBYMEMBER |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
11 |
+extern int _getgroupsbymember |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
12 |
+( |
d8e2284538ee
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[], |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
14 |
+ int maxgids, int numgids |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
15 |
+); |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
16 |
+#endif /* HAVE__GETGRPSBYMEMBER */ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
17 |
+ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
18 |
+ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
19 |
#ifdef HAVE_GETGRSET |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
20 |
/* |
d8e2284538ee
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) |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
22 |
@@ -81,6 +90,25 @@ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
23 |
|
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
24 |
#else /* HAVE_GETGRSET */ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
25 |
|
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
26 |
+#ifdef HAVE__GETGRPSBYMEMBER |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
27 |
+int |
d8e2284538ee
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) |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
29 |
+{ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
30 |
+ int grpsize = *ngroupsp; |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
31 |
+ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
32 |
+ if (grpsize <= 0) |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
33 |
+ return -1; |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
34 |
+ groups[0] = basegid; |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
35 |
+ |
d8e2284538ee
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) |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
37 |
+ return -1; |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
38 |
+ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
39 |
+ *ngroupsp = grpsize; |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
40 |
+ return 0; |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
41 |
+} |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
42 |
+ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
43 |
+#else /* ! HAVE__GETGRPSBYMEMBER */ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
44 |
+ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
45 |
/* |
d8e2284538ee
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) |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
47 |
*/ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
48 |
@@ -128,4 +156,7 @@ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
49 |
|
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
50 |
return rval; |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
51 |
} |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
52 |
+ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
53 |
+#endif /* ! HAVE__GETGRPSBYMEMBER */ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
54 |
+ |
d8e2284538ee
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Vladimir Marek <Vladimir.Marek@oracle.com>
parents:
diff
changeset
|
55 |
#endif /* HAVE_GETGRSET */ |