1 |
slords |
1.1 |
diff -up cpu-1.4.3/src/plugins/ldap/ld.c.supp-groups cpu-1.4.3/src/plugins/ldap/ld.c |
2 |
|
|
--- cpu-1.4.3/src/plugins/ldap/ld.c.supp-groups 2010-11-07 19:00:21.000000000 -0700 |
3 |
|
|
+++ cpu-1.4.3/src/plugins/ldap/ld.c 2010-11-07 18:56:18.000000000 -0700 |
4 |
|
|
@@ -29,6 +29,7 @@ |
5 |
|
|
|
6 |
|
|
gid_t getlGid (LDAP * ld, char *groupn); |
7 |
|
|
char *checkSupGroups (LDAP * ld); |
8 |
|
|
+void getSupGroups (LDAP * ld, char *uname); |
9 |
|
|
void rmUsrFrmOldSupGrp (LDAP * ld, char *uname); |
10 |
|
|
int checkIsPrimaryGroup (LDAP * ld); |
11 |
|
|
int groupExists (LDAP * ld, int cgid); |
12 |
|
|
@@ -193,6 +194,7 @@ ldapOperation (ldapop_t optype) |
13 |
|
|
return -1; |
14 |
|
|
} |
15 |
|
|
} |
16 |
|
|
+ getSupGroups (ld, globalLdap->passent->pw_name); |
17 |
|
|
tstr = NULL; |
18 |
|
|
if ((tstr = checkSupGroups (ld)) != NULL) |
19 |
|
|
{ |
20 |
|
|
@@ -755,6 +757,65 @@ checkSupGroups (LDAP * ld) |
21 |
|
|
return NULL; |
22 |
|
|
} |
23 |
|
|
|
24 |
|
|
+void |
25 |
|
|
+getSupGroups (LDAP * ld, char *uname) |
26 |
|
|
+{ |
27 |
|
|
+ LDAPMessage *res[2]; |
28 |
|
|
+ LDAPMessage *pos; |
29 |
|
|
+ int filtsize = 0; |
30 |
|
|
+ struct timeval timeout; |
31 |
|
|
+ char **vals; |
32 |
|
|
+ char *filter = NULL; |
33 |
|
|
+ char *temp; |
34 |
|
|
+ int num_tokens = 0; |
35 |
|
|
+ char *attrs[7] = { |
36 |
|
|
+ "cn", |
37 |
|
|
+ NULL |
38 |
|
|
+ }; |
39 |
|
|
+ |
40 |
|
|
+ if (globalLdap->memberUid != NULL) |
41 |
|
|
+ return; |
42 |
|
|
+ |
43 |
|
|
+ timeout = globalLdap->timeout; |
44 |
|
|
+ res[1] = NULL; |
45 |
|
|
+ |
46 |
|
|
+ temp = cfg_get_str ("LDAP", "GROUP_FILTER"); |
47 |
|
|
+ if (temp == NULL) |
48 |
|
|
+ temp = strdup ("(objectClass=PosixGroup)"); |
49 |
|
|
+ filtsize = strlen (temp) + strlen (uname) + 18; |
50 |
|
|
+ filter = (char *) malloc (sizeof (char) * filtsize); |
51 |
|
|
+ bzero (filter, filtsize); |
52 |
|
|
+ |
53 |
|
|
+ snprintf (filter, filtsize, "(&%s (memberUid=%s))", temp, uname); |
54 |
|
|
+ if (ldap_search_st (ld, globalLdap->group_base, LDAP_SCOPE_SUBTREE, |
55 |
|
|
+ filter, attrs, 0, &timeout, res) != LDAP_SUCCESS) |
56 |
|
|
+ { |
57 |
|
|
+ Free (filter); |
58 |
|
|
+ CPU_ldapPerror (ld, globalLdap, "getSupGroups: ldap_search_st"); |
59 |
|
|
+ return; |
60 |
|
|
+ } |
61 |
|
|
+ free (filter); |
62 |
|
|
+ if (ldap_count_entries (ld, res[0]) < 1) |
63 |
|
|
+ return; |
64 |
|
|
+ |
65 |
|
|
+ for (pos = ldap_first_entry (ld, res[0]); pos != NULL; |
66 |
|
|
+ pos = ldap_next_entry (ld, pos)) |
67 |
|
|
+ { |
68 |
|
|
+ if ((vals = ldap_get_values (ld, pos, "cn")) != NULL) |
69 |
|
|
+ { |
70 |
|
|
+ if (vals[0] != NULL) |
71 |
|
|
+ { |
72 |
|
|
+ globalLdap->memberUid = (char **) |
73 |
|
|
+ realloc (globalLdap->memberUid, |
74 |
|
|
+ sizeof(char*)*((num_tokens+1)*4)); |
75 |
|
|
+ globalLdap->memberUid[num_tokens] = strdup(vals[0]); |
76 |
|
|
+ num_tokens++; |
77 |
|
|
+ } |
78 |
|
|
+ } |
79 |
|
|
+ } |
80 |
|
|
+ globalLdap->memberUid[num_tokens] = NULL; |
81 |
|
|
+} |
82 |
|
|
+ |
83 |
|
|
int |
84 |
|
|
groupExists (LDAP * ld, int cgid) |
85 |
|
|
{ |
86 |
|
|
diff -up cpu-1.4.3/src/plugins/ldap/commandline.c.supp-groups cpu-1.4.3/src/plugins/ldap/commandline.c |
87 |
|
|
--- cpu-1.4.3/src/plugins/ldap/commandline.c.supp-groups 2010-11-07 20:45:35.000000000 -0700 |
88 |
|
|
+++ cpu-1.4.3/src/plugins/ldap/commandline.c 2010-11-07 20:45:20.000000000 -0700 |
89 |
|
|
@@ -175,15 +175,20 @@ |
90 |
|
|
if (isalnum ((int)optarg[0])) |
91 |
|
|
gtemp = strdup (optarg); |
92 |
|
|
if (gtemp == NULL) |
93 |
|
|
- return -1; |
94 |
|
|
- while (gtemp != NULL && *gtemp) |
95 |
|
|
- { |
96 |
|
|
+ { |
97 |
|
|
globalLdap->memberUid = |
98 |
|
|
(char **) realloc (globalLdap->memberUid, |
99 |
|
|
sizeof(char*)*((num_tokens+1)*4)); |
100 |
|
|
- globalLdap->memberUid[num_tokens] = getToken(>emp,","); |
101 |
|
|
- num_tokens++; |
102 |
|
|
- } |
103 |
|
|
+ } |
104 |
|
|
+ else |
105 |
|
|
+ while (gtemp != NULL && *gtemp) |
106 |
|
|
+ { |
107 |
|
|
+ globalLdap->memberUid = |
108 |
|
|
+ (char **) realloc (globalLdap->memberUid, |
109 |
|
|
+ sizeof(char*)*((num_tokens+1)*4)); |
110 |
|
|
+ globalLdap->memberUid[num_tokens] = getToken(>emp,","); |
111 |
|
|
+ num_tokens++; |
112 |
|
|
+ } |
113 |
|
|
globalLdap->memberUid[num_tokens] = NULL; |
114 |
|
|
break; |
115 |
|
|
} |