components/sudo/patches/getgrset.patch
author Vladimir Marek <Vladimir.Marek@oracle.com>
Sat, 19 Jan 2013 16:54:22 +0100
changeset 1133 d8e2284538ee
permissions -rw-r--r--
16195225 use _getgroupsbymember() instead of slow getgrent() calls
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 */