1 |
85ad3d82
|
Assos Assos
|
<?php
|
2 |
|
|
|
3 |
bc175c27
|
Assos Assos
|
/**
|
4 |
|
|
* @file
|
5 |
|
|
*/
|
6 |
|
|
|
7 |
85ad3d82
|
Assos Assos
|
module_load_include('inc', 'ldap_servers', 'ldap_servers.functions');
|
8 |
|
|
|
9 |
|
|
/**
|
10 |
|
|
* @file
|
11 |
|
|
*/
|
12 |
|
|
|
13 |
|
|
/**
|
14 |
|
|
* Implements the LDAP server test page.
|
15 |
|
|
*
|
16 |
|
|
* @param $form_state
|
17 |
|
|
* A form state array.
|
18 |
|
|
* @param $op
|
19 |
|
|
* An operatin - add or edit.
|
20 |
|
|
* @param $sid
|
21 |
|
|
* A LDAP server ID.
|
22 |
|
|
*
|
23 |
|
|
* @return
|
24 |
|
|
* The form structure.
|
25 |
|
|
*/
|
26 |
|
|
function ldap_servers_test_form($form, &$form_state, $op = NULL, $sid = NULL) {
|
27 |
|
|
|
28 |
|
|
$ldap_server = ldap_servers_get_servers($sid, 'all', TRUE);
|
29 |
|
|
|
30 |
32700c57
|
Assos Assos
|
drupal_set_title(t('Test LDAP Server Configuration: !server', ['!server' => $ldap_server->name]));
|
31 |
85ad3d82
|
Assos Assos
|
|
32 |
|
|
$form['#prefix'] = t('This form tests an LDAP configuration to see if
|
33 |
|
|
it can bind and basic user and group functions. It also shows token examples
|
34 |
|
|
and a sample user. The only data this function will modify is the test LDAP group, which will be deleted and added');
|
35 |
|
|
|
36 |
32700c57
|
Assos Assos
|
$variables = [
|
37 |
|
|
'ldap_server' => $ldap_server,
|
38 |
|
|
'actions' => FALSE,
|
39 |
|
|
'type' => 'detail',
|
40 |
|
|
];
|
41 |
85ad3d82
|
Assos Assos
|
|
42 |
32700c57
|
Assos Assos
|
$form['server_variables'] = [
|
43 |
85ad3d82
|
Assos Assos
|
'#markup' => theme('ldap_servers_server', $variables),
|
44 |
32700c57
|
Assos Assos
|
];
|
45 |
85ad3d82
|
Assos Assos
|
|
46 |
32700c57
|
Assos Assos
|
$form['sid'] = [
|
47 |
85ad3d82
|
Assos Assos
|
'#type' => 'hidden',
|
48 |
|
|
'#default_value' => $sid,
|
49 |
32700c57
|
Assos Assos
|
];
|
50 |
85ad3d82
|
Assos Assos
|
|
51 |
32700c57
|
Assos Assos
|
$form['binding']['bindpw'] = [
|
52 |
85ad3d82
|
Assos Assos
|
'#type' => 'password',
|
53 |
|
|
'#title' => t('Password for non-anonymous search'),
|
54 |
|
|
'#size' => 20,
|
55 |
|
|
'#maxlength' => 255,
|
56 |
|
|
'#description' => t('Leave empty to test with currently stored password.'),
|
57 |
32700c57
|
Assos Assos
|
];
|
58 |
85ad3d82
|
Assos Assos
|
|
59 |
32700c57
|
Assos Assos
|
$form['testing_drupal_username'] = [
|
60 |
85ad3d82
|
Assos Assos
|
'#type' => 'textfield',
|
61 |
|
|
'#title' => t('Testing Drupal Username'),
|
62 |
|
|
'#default_value' => $ldap_server->testingDrupalUsername,
|
63 |
|
|
'#size' => 30,
|
64 |
|
|
'#maxlength' => 255,
|
65 |
|
|
'#description' => t('This is optional and used for testing this server\'s configuration against an actual username. The user need not exist in Drupal and testing will not affect the user\'s LDAP or Drupal Account.'),
|
66 |
32700c57
|
Assos Assos
|
];
|
67 |
85ad3d82
|
Assos Assos
|
|
68 |
32700c57
|
Assos Assos
|
$form['testingDrupalUserDn'] = [
|
69 |
85ad3d82
|
Assos Assos
|
'#type' => 'textfield',
|
70 |
|
|
'#title' => t('Testing Drupal DN'),
|
71 |
|
|
'#default_value' => $ldap_server->testingDrupalUserDn,
|
72 |
|
|
'#size' => 120,
|
73 |
|
|
'#maxlength' => 255,
|
74 |
|
|
'#description' => t('This is optional and used for testing this server\'s configuration against an actual username. The user need not exist in Drupal and testing will not affect the user\'s LDAP or Drupal Account.'),
|
75 |
32700c57
|
Assos Assos
|
];
|
76 |
85ad3d82
|
Assos Assos
|
|
77 |
32700c57
|
Assos Assos
|
$form['grp_test_grp_dn'] = [
|
78 |
85ad3d82
|
Assos Assos
|
'#type' => 'textfield',
|
79 |
|
|
'#title' => t('Testing Group DN'),
|
80 |
|
|
'#default_value' => $ldap_server->groupTestGroupDn,
|
81 |
|
|
'#size' => 120,
|
82 |
|
|
'#maxlength' => 255,
|
83 |
|
|
'#description' => t('This is optional and used for testing this server\'s group configuration.'),
|
84 |
32700c57
|
Assos Assos
|
];
|
85 |
85ad3d82
|
Assos Assos
|
|
86 |
32700c57
|
Assos Assos
|
$form['grp_test_grp_dn_writeable'] = [
|
87 |
85ad3d82
|
Assos Assos
|
'#type' => 'textfield',
|
88 |
|
|
'#title' => t('Testing Group DN that is writeable. Warning! In test, this group will be deleted, created, have members added to it!'),
|
89 |
|
|
'#default_value' => $ldap_server->groupTestGroupDnWriteable,
|
90 |
|
|
'#size' => 120,
|
91 |
|
|
'#maxlength' => 255,
|
92 |
|
|
'#description' => t('This is optional and used for testing this server\'s group configuration.'),
|
93 |
32700c57
|
Assos Assos
|
];
|
94 |
85ad3d82
|
Assos Assos
|
|
95 |
bc175c27
|
Assos Assos
|
if ($ldap_server->bind_method == LDAP_SERVERS_BIND_METHOD_ANON_USER) {
|
96 |
32700c57
|
Assos Assos
|
$form['testing_drupal_userpw'] = [
|
97 |
85ad3d82
|
Assos Assos
|
'#type' => 'password',
|
98 |
|
|
'#title' => t('Testing Drupal User Password'),
|
99 |
|
|
'#size' => 30,
|
100 |
|
|
'#maxlength' => 255,
|
101 |
|
|
'#description' => t('This is optional and used for testing this server\'s configuration against the username above.'),
|
102 |
32700c57
|
Assos Assos
|
];
|
103 |
85ad3d82
|
Assos Assos
|
}
|
104 |
|
|
|
105 |
32700c57
|
Assos Assos
|
$form['submit'] = [
|
106 |
85ad3d82
|
Assos Assos
|
'#type' => 'submit',
|
107 |
|
|
'#value' => 'Test',
|
108 |
|
|
'#weight' => 100,
|
109 |
32700c57
|
Assos Assos
|
];
|
110 |
85ad3d82
|
Assos Assos
|
|
111 |
|
|
if (!empty($form_state['ldap_server_test_data'])) {
|
112 |
|
|
$test_data = $form_state['ldap_server_test_data'];
|
113 |
|
|
|
114 |
|
|
if (isset($test_data['username']) && isset($test_data['ldap_user'])) {
|
115 |
|
|
$form['#prefix'] = theme('ldap_server_ldap_entry_table',
|
116 |
32700c57
|
Assos Assos
|
[
|
117 |
85ad3d82
|
Assos Assos
|
'entry' => $test_data['ldap_user']['attr'],
|
118 |
|
|
'username' => $test_data['username'],
|
119 |
|
|
'dn' => $test_data['ldap_user']['dn'],
|
120 |
32700c57
|
Assos Assos
|
]);
|
121 |
85ad3d82
|
Assos Assos
|
}
|
122 |
|
|
|
123 |
32700c57
|
Assos Assos
|
$titles = [
|
124 |
85ad3d82
|
Assos Assos
|
'basic' => 'Test Results',
|
125 |
|
|
'group1' => 'Group Create, Delete, Add Member, Remove Member Tests',
|
126 |
|
|
'group2' => 'User Group Membership Functions Test',
|
127 |
|
|
'tokens' => 'User Token Samples',
|
128 |
|
|
'groupfromDN' => 'Groups Derived From User DN',
|
129 |
32700c57
|
Assos Assos
|
];
|
130 |
85ad3d82
|
Assos Assos
|
foreach ($test_data['results_tables'] as $table_name => $table_data) {
|
131 |
32700c57
|
Assos Assos
|
$form['#prefix'] .= '<h2>' . $titles[$table_name] . '</h2>' . theme('table', ['header' => ['Test', 'Result'], 'rows' => $table_data]);
|
132 |
85ad3d82
|
Assos Assos
|
}
|
133 |
|
|
|
134 |
|
|
if (function_exists('dpm') && !empty($test_data['username'])) {
|
135 |
|
|
$user_name = $test_data['username'];
|
136 |
|
|
if ($user = user_load_by_name($user_name)) {
|
137 |
|
|
dpm("Corresponding Drupal user object for: $user_name");
|
138 |
|
|
dpm($user);
|
139 |
|
|
if (function_exists('entity_load_single')) {
|
140 |
|
|
$user_entity = entity_load_single('user', $user->uid);
|
141 |
|
|
dpm("Drupal user entity for: $user_name");
|
142 |
|
|
dpm($user_entity);
|
143 |
|
|
}
|
144 |
bc175c27
|
Assos Assos
|
if (isset($test_data['group_entry'][0])) {
|
145 |
|
|
dpm("Test Group LDAP Entry");
|
146 |
|
|
dpm($test_data['group_entry'][0]);
|
147 |
|
|
}
|
148 |
85ad3d82
|
Assos Assos
|
}
|
149 |
|
|
}
|
150 |
|
|
}
|
151 |
|
|
return $form;
|
152 |
|
|
}
|
153 |
|
|
|
154 |
32700c57
|
Assos Assos
|
/**
|
155 |
|
|
*
|
156 |
|
|
*/
|
157 |
bc175c27
|
Assos Assos
|
function ldap_servers_string_binary_check($input) {
|
158 |
|
|
if (preg_match('~[^\x20-\x7E\t\r\n]~', $input) > 0) {
|
159 |
|
|
$truncatedString = truncate_utf8($input, 200);
|
160 |
|
|
return t('Binary (excerpt): @excerpt', ['@excerpt' => $truncatedString]);
|
161 |
|
|
}
|
162 |
|
|
else {
|
163 |
|
|
return $input;
|
164 |
|
|
}
|
165 |
|
|
}
|
166 |
|
|
|
167 |
85ad3d82
|
Assos Assos
|
/**
|
168 |
|
|
* Validate hook for the LDAP server form.
|
169 |
|
|
*/
|
170 |
|
|
function ldap_servers_test_form_validate($form, &$form_state) {
|
171 |
|
|
$values = $form_state['values'];
|
172 |
|
|
if (!$values['sid']) {
|
173 |
|
|
form_set_error(NULL, t('No server id found in form'));
|
174 |
|
|
}
|
175 |
|
|
elseif (!$ldap_server = ldap_servers_get_servers($values['sid'], 'all', TRUE)) {
|
176 |
32700c57
|
Assos Assos
|
form_set_error(NULL, t('Failed to create server object for server with server id=%sid', ['%sid' => $values['sid']]));
|
177 |
85ad3d82
|
Assos Assos
|
}
|
178 |
|
|
}
|
179 |
|
|
|
180 |
|
|
/**
|
181 |
|
|
* Submit hook for the LDAP server form.
|
182 |
|
|
*/
|
183 |
|
|
function ldap_servers_test_form_submit($form, &$form_state) {
|
184 |
|
|
|
185 |
32700c57
|
Assos Assos
|
// Pass data back to form builder.
|
186 |
85ad3d82
|
Assos Assos
|
$form_state['rebuild'] = TRUE;
|
187 |
|
|
|
188 |
|
|
ldap_servers_module_load_include('inc', 'ldap_servers', 'ldap_servers.functions');
|
189 |
|
|
$errors = FALSE;
|
190 |
|
|
$has_errors = FALSE;
|
191 |
|
|
$values = $form_state['values'];
|
192 |
|
|
$sid = $values['sid'];
|
193 |
|
|
$ldap_server = ldap_servers_get_servers($sid, 'all', TRUE);
|
194 |
|
|
|
195 |
32700c57
|
Assos Assos
|
$results = [];
|
196 |
|
|
$results_tables = [];
|
197 |
85ad3d82
|
Assos Assos
|
if ($values['bindpw']) {
|
198 |
|
|
$bindpw = $values['bindpw'];
|
199 |
|
|
$bindpw_type = t('entered in form.');
|
200 |
|
|
}
|
201 |
|
|
else {
|
202 |
|
|
$bindpw = NULL;
|
203 |
|
|
$bindpw_type = t('stored in configuration');
|
204 |
|
|
}
|
205 |
|
|
|
206 |
|
|
if ($ldap_server->bind_method == LDAP_SERVERS_BIND_METHOD_SERVICE_ACCT) {
|
207 |
32700c57
|
Assos Assos
|
$results_tables['basic'][] = [
|
208 |
|
|
t('Binding with DN for non-anonymous search (%bind_dn). Using password ',
|
209 |
|
|
['%bind_dn' => $ldap_server->binddn]) . ' ' . $bindpw_type,
|
210 |
|
|
];
|
211 |
85ad3d82
|
Assos Assos
|
}
|
212 |
|
|
else {
|
213 |
32700c57
|
Assos Assos
|
$results_tables['basic'][] = [t('Binding with null DN for anonymous search.')];
|
214 |
85ad3d82
|
Assos Assos
|
}
|
215 |
|
|
|
216 |
|
|
if (@$values['grp_test_grp_dn_writeable'] && @$values['grp_test_grp_dn']) {
|
217 |
|
|
$user_test_dn = @$values['grp_test_grp_dn'];
|
218 |
|
|
$group_create_test_dn = $values['grp_test_grp_dn_writeable'];
|
219 |
32700c57
|
Assos Assos
|
$group_create_test_attr = [
|
220 |
|
|
'objectClass' => [$ldap_server->groupObjectClass, 'top'],
|
221 |
|
|
];
|
222 |
85ad3d82
|
Assos Assos
|
|
223 |
32700c57
|
Assos Assos
|
// 1. delete test group if it exists.
|
224 |
|
|
if ($ldap_server->dnExists($group_create_test_dn, 'ldap_entry', ['cn', 'member'])) {
|
225 |
85ad3d82
|
Assos Assos
|
$result = $ldap_server->groupRemoveGroup($group_create_test_dn, FALSE);
|
226 |
|
|
}
|
227 |
|
|
|
228 |
32700c57
|
Assos Assos
|
$group_exists = $ldap_server->dnExists($group_create_test_dn, 'ldap_entry', ['cn', 'member']);
|
229 |
85ad3d82
|
Assos Assos
|
$result = ($group_exists === FALSE) ? "PASS" : "FAIL";
|
230 |
32700c57
|
Assos Assos
|
$results_tables['group1'][] = ["Starting test without group: $group_create_test_dn ", $result];
|
231 |
85ad3d82
|
Assos Assos
|
|
232 |
32700c57
|
Assos Assos
|
// 2. make sure call to members in empty group returns false.
|
233 |
85ad3d82
|
Assos Assos
|
$result = $ldap_server->groupAllMembers($group_create_test_dn);
|
234 |
|
|
$result = ($result === FALSE) ? "PASS" : 'FAIL';
|
235 |
32700c57
|
Assos Assos
|
$results_tables['group1'][] = ["LdapServer::groupAllMembers($group_create_test_dn) call on nonexistent group returns FALSE", $result];
|
236 |
85ad3d82
|
Assos Assos
|
|
237 |
32700c57
|
Assos Assos
|
// 3. add group.
|
238 |
85ad3d82
|
Assos Assos
|
$result = $ldap_server->groupAddGroup($group_create_test_dn, $group_create_test_attr);
|
239 |
bc175c27
|
Assos Assos
|
$result = ($result) ? "PASS" : 'FAIL';
|
240 |
85ad3d82
|
Assos Assos
|
$attr = serialize($group_create_test_attr);
|
241 |
32700c57
|
Assos Assos
|
$results_tables['group1'][] = ["LdapServer::groupAddGroup($group_create_test_dn, $attr)", $result];
|
242 |
85ad3d82
|
Assos Assos
|
|
243 |
32700c57
|
Assos Assos
|
// 4. call to all members in an empty group returns emtpy array, not FALSE.
|
244 |
85ad3d82
|
Assos Assos
|
$result = $ldap_server->groupAllMembers($group_create_test_dn);
|
245 |
bc175c27
|
Assos Assos
|
$result = (is_array($result) && count($result) == 0) ? 'PASS' : 'FAIL';
|
246 |
32700c57
|
Assos Assos
|
$results_tables['group1'][] = ["LdapServer::groupAllMembers($group_create_test_dn) returns empty array for empty group ", $result];
|
247 |
85ad3d82
|
Assos Assos
|
|
248 |
32700c57
|
Assos Assos
|
// 5. add member to group.
|
249 |
85ad3d82
|
Assos Assos
|
$result = $ldap_server->groupAddMember($group_create_test_dn, $user_test_dn);
|
250 |
|
|
$result = is_array($ldap_server->groupAllMembers($group_create_test_dn)) ? 'PASS' : 'FAIL';
|
251 |
32700c57
|
Assos Assos
|
$results_tables['group1'][] = ["LdapServer::groupAddMember($group_create_test_dn, $user_test_dn)", $result];
|
252 |
85ad3d82
|
Assos Assos
|
|
253 |
32700c57
|
Assos Assos
|
// 6. try to remove group with member in it.
|
254 |
85ad3d82
|
Assos Assos
|
$only_if_group_empty = TRUE;
|
255 |
|
|
$result = $ldap_server->groupRemoveGroup($group_create_test_dn, $only_if_group_empty);
|
256 |
|
|
$result = ($result) ? 'FAIL' : 'PASS';
|
257 |
32700c57
|
Assos Assos
|
$results_tables['group1'][] = ["LdapServer::groupRemoveGroup($group_create_test_dn, $only_if_group_empty)", $result];
|
258 |
85ad3d82
|
Assos Assos
|
|
259 |
32700c57
|
Assos Assos
|
// 7. remove group member.
|
260 |
85ad3d82
|
Assos Assos
|
$result = $ldap_server->groupRemoveMember($group_create_test_dn, $user_test_dn);
|
261 |
|
|
$result = $ldap_server->groupAllMembers($group_create_test_dn);
|
262 |
|
|
$result = (is_array($result) && count($result) == 0) ? 'PASS' : 'FAIL';
|
263 |
32700c57
|
Assos Assos
|
$results_tables['group1'][] = ["LdapServer::groupRemoveMember($group_create_test_dn, $user_test_dn)", $result];
|
264 |
85ad3d82
|
Assos Assos
|
|
265 |
|
|
$only_if_group_empty = TRUE;
|
266 |
|
|
$result = $ldap_server->groupRemoveGroup($group_create_test_dn, $only_if_group_empty);
|
267 |
32700c57
|
Assos Assos
|
$result = ($ldap_server->dnExists($group_create_test_dn, 'ldap_entry', ['cn', 'member'])) ? "FAIL" : 'PASS';
|
268 |
|
|
$results_tables['group1'][] = ["LdapServer::groupRemoveGroup($group_create_test_dn, $only_if_group_empty)", $result];
|
269 |
85ad3d82
|
Assos Assos
|
}
|
270 |
|
|
|
271 |
32700c57
|
Assos Assos
|
// Connect to ldap.
|
272 |
85ad3d82
|
Assos Assos
|
list($has_errors, $more_results) = ldap_servers_test_binding_credentials($ldap_server, $bindpw, $results_tables);
|
273 |
|
|
$results = array_merge($results, $more_results);
|
274 |
|
|
if ($ldap_server->bind_method == LDAP_SERVERS_BIND_METHOD_ANON_USER) {
|
275 |
|
|
list($has_errors, $more_results, $ldap_user) = ldap_servers_test_user_mapping($values['testing_drupal_username'], $ldap_server);
|
276 |
|
|
$results = array_merge($results, $more_results);
|
277 |
|
|
if (!$has_errors) {
|
278 |
|
|
$mapping[] = "dn = " . $ldap_user['dn'];
|
279 |
|
|
foreach ($ldap_user['attr'] as $key => $value) {
|
280 |
|
|
if (is_array($value)) {
|
281 |
|
|
$mapping[] = "$key = " . $value[0];
|
282 |
|
|
}
|
283 |
|
|
}
|
284 |
32700c57
|
Assos Assos
|
$results_tables['basic'][] = [theme_item_list(['items' => $mapping, 'title' => t('Attributes available to anonymous search', ['%bind_dn' => $ldap_server->binddn]), 'type' => 'ul', 'attributes' => []])];
|
285 |
85ad3d82
|
Assos Assos
|
}
|
286 |
32700c57
|
Assos Assos
|
$results_tables['basic'][] = [
|
287 |
|
|
t('Binding with DN (%bind_dn). Using supplied password ',
|
288 |
|
|
['%bind_dn' => $ldap_user['dn']]),
|
289 |
|
|
];
|
290 |
85ad3d82
|
Assos Assos
|
$result = $ldap_server->bind($ldap_user['dn'], $values['testing_drupal_userpw'], FALSE);
|
291 |
|
|
if ($result == LDAP_SUCCESS) {
|
292 |
32700c57
|
Assos Assos
|
$results_tables['basic'][] = [t('Successfully bound to server'), 'PASS'];
|
293 |
85ad3d82
|
Assos Assos
|
}
|
294 |
|
|
else {
|
295 |
32700c57
|
Assos Assos
|
$results_tables['basic'][] = [t('Failed to bind to server. ldap error #') . $result . ' ' . $ldap_server->errorMsg('ldap'), 'FAIL'];
|
296 |
85ad3d82
|
Assos Assos
|
}
|
297 |
|
|
}
|
298 |
|
|
|
299 |
|
|
if (!$has_errors && isset($values['grp_test_grp_dn'])) {
|
300 |
|
|
$group_dn = $values['grp_test_grp_dn'];
|
301 |
|
|
|
302 |
|
|
$result = @ldap_read($ldap_server->connection, $group_dn, 'objectClass=*');
|
303 |
be58a50c
|
Assos Assos
|
if (is_array($result)) {
|
304 |
|
|
$group_entry = ldap_get_entries($ldap_server->connection, $result);
|
305 |
|
|
}
|
306 |
85ad3d82
|
Assos Assos
|
$user = isset($values['testing_drupal_username']) ? $values['testing_drupal_username'] : NULL;
|
307 |
|
|
|
308 |
32700c57
|
Assos Assos
|
// FALSE.
|
309 |
|
|
foreach ([FALSE, TRUE] as $nested) {
|
310 |
85ad3d82
|
Assos Assos
|
$nested_display = ($nested) ? 'Yes' : 'No';
|
311 |
|
|
if ($user) {
|
312 |
32700c57
|
Assos Assos
|
// This is the parent function that will call FromUserAttr or FromEntry.
|
313 |
85ad3d82
|
Assos Assos
|
$memberships = $ldap_server->groupMembershipsFromUser($user, 'group_dns', $nested);
|
314 |
32700c57
|
Assos Assos
|
$result = theme('item_list', ['items' => $memberships, 'type' => 'ul']);
|
315 |
|
|
$results_tables['group2'][] = ["ldap_server->groupMembershipsFromUser($user, 'group_dns', nested=$nested_display)<br/>count=" . count($memberships), $result];
|
316 |
85ad3d82
|
Assos Assos
|
|
317 |
|
|
$result = ($ldap_server->groupIsMember($group_dn, $user, $nested)) ? 'Yes' : 'No';
|
318 |
32700c57
|
Assos Assos
|
$group_results[] = ["ldap_server->groupIsMember($group_dn, $user, nested=$nested_display)", $result];
|
319 |
85ad3d82
|
Assos Assos
|
|
320 |
|
|
if ($ldap_server->groupUserMembershipsConfigured) {
|
321 |
|
|
$groupusermembershipsfromuserattr = $ldap_server->groupUserMembershipsFromUserAttr($user, $nested);
|
322 |
bc175c27
|
Assos Assos
|
$count = count($groupusermembershipsfromuserattr);
|
323 |
32700c57
|
Assos Assos
|
$result = theme('item_list', ['items' => $groupusermembershipsfromuserattr, 'type' => 'ul']);
|
324 |
85ad3d82
|
Assos Assos
|
}
|
325 |
|
|
else {
|
326 |
32700c57
|
Assos Assos
|
$groupusermembershipsfromuserattr = [];
|
327 |
85ad3d82
|
Assos Assos
|
$result = "'A user LDAP attribute such as memberOf exists that contains a list of their group' is not configured.";
|
328 |
|
|
}
|
329 |
32700c57
|
Assos Assos
|
$results_tables['group2'][] = [
|
330 |
|
|
"ldap_server->groupUserMembershipsFromUserAttr($user, nested=$nested_display)<br/> count=" .
|
331 |
|
|
count($groupusermembershipsfromuserattr), $result,
|
332 |
|
|
];
|
333 |
85ad3d82
|
Assos Assos
|
|
334 |
|
|
if ($ldap_server->groupGroupEntryMembershipsConfigured) {
|
335 |
|
|
$groupusermembershipsfromentry = $ldap_server->groupUserMembershipsFromEntry($user, $nested);
|
336 |
32700c57
|
Assos Assos
|
$result = theme('item_list', ['items' => $groupusermembershipsfromentry, 'type' => 'ul']);
|
337 |
85ad3d82
|
Assos Assos
|
}
|
338 |
|
|
else {
|
339 |
32700c57
|
Assos Assos
|
$groupusermembershipsfromentry = [];
|
340 |
85ad3d82
|
Assos Assos
|
$result = "Groups by entry not configured.";
|
341 |
|
|
}
|
342 |
32700c57
|
Assos Assos
|
$results_tables['group2'][] = [
|
343 |
|
|
"ldap_server->groupUserMembershipsFromEntry($user, nested=$nested_display)<br/>count=" .
|
344 |
|
|
count($groupusermembershipsfromentry), $result,
|
345 |
|
|
];
|
346 |
85ad3d82
|
Assos Assos
|
|
347 |
|
|
if (count($groupusermembershipsfromentry) && count($groupusermembershipsfromuserattr)) {
|
348 |
|
|
$diff1 = array_diff($groupusermembershipsfromuserattr, $groupusermembershipsfromentry);
|
349 |
|
|
$diff2 = array_diff($groupusermembershipsfromentry, $groupusermembershipsfromuserattr);
|
350 |
32700c57
|
Assos Assos
|
$result1 = theme('item_list', ['items' => $diff1, 'type' => 'ul']);
|
351 |
|
|
$result2 = theme('item_list', ['items' => $diff2, 'type' => 'ul']);
|
352 |
|
|
$results_tables['group2'][] = ["groupUserMembershipsFromEntry and FromUserAttr Diff)", $result1];
|
353 |
|
|
$results_tables['group2'][] = ["FromUserAttr and groupUserMembershipsFromEntry Diff)", $result2];
|
354 |
85ad3d82
|
Assos Assos
|
}
|
355 |
|
|
}
|
356 |
|
|
}
|
357 |
|
|
|
358 |
|
|
if ($groups_from_dn = $ldap_server->groupUserMembershipsFromDn($user)) {
|
359 |
32700c57
|
Assos Assos
|
$results_tables['groupfromDN'][] = ["Groups from DN", theme('item_list', ['items' => $groups_from_dn, 'type' => 'ul'])];
|
360 |
85ad3d82
|
Assos Assos
|
}
|
361 |
|
|
|
362 |
5136ce55
|
Assos Assos
|
}
|
363 |
85ad3d82
|
Assos Assos
|
|
364 |
5136ce55
|
Assos Assos
|
list($has_errors, $more_results, $ldap_user) = ldap_servers_test_user_mapping($values['testing_drupal_username'], $ldap_server);
|
365 |
|
|
|
366 |
32700c57
|
Assos Assos
|
$tokens = ($ldap_user && isset($ldap_user['attr'])) ? ldap_servers_token_tokenize_entry($ldap_user['attr'], 'all') : [];
|
367 |
5136ce55
|
Assos Assos
|
foreach ($tokens as $key => $value) {
|
368 |
32700c57
|
Assos Assos
|
$results_tables['tokens'][] = [$key, ldap_servers_string_binary_check($value)];
|
369 |
5136ce55
|
Assos Assos
|
}
|
370 |
32700c57
|
Assos Assos
|
$form_state['ldap_server_test_data'] = [
|
371 |
5136ce55
|
Assos Assos
|
'username' => $values['testing_drupal_username'],
|
372 |
|
|
'results_tables' => $results_tables,
|
373 |
32700c57
|
Assos Assos
|
];
|
374 |
5136ce55
|
Assos Assos
|
|
375 |
|
|
if (isset($ldap_user)) {
|
376 |
|
|
$form_state['ldap_server_test_data']['ldap_user'] = $ldap_user;
|
377 |
|
|
}
|
378 |
|
|
|
379 |
32700c57
|
Assos Assos
|
if (isset($group_entry)) {
|
380 |
5136ce55
|
Assos Assos
|
$form_state['ldap_server_test_data']['group_entry'] = $group_entry;
|
381 |
85ad3d82
|
Assos Assos
|
}
|
382 |
bc175c27
|
Assos Assos
|
|
383 |
85ad3d82
|
Assos Assos
|
}
|
384 |
|
|
|
385 |
|
|
/**
|
386 |
|
|
* Submit hook for the LDAP server form.
|
387 |
|
|
*/
|
388 |
|
|
function ldap_servers_test_binding_credentials(&$ldap_server, $bindpw, &$results_tables) {
|
389 |
|
|
|
390 |
|
|
$errors = FALSE;
|
391 |
32700c57
|
Assos Assos
|
$results = [];
|
392 |
85ad3d82
|
Assos Assos
|
|
393 |
|
|
$ldap_result = $ldap_server->connect();
|
394 |
|
|
if ($ldap_result != LDAP_SUCCESS) {
|
395 |
32700c57
|
Assos Assos
|
$results_tables['basic'][] = [
|
396 |
|
|
t('Failed to connect to LDAP server. See watchdog error logs for details.') .
|
397 |
|
|
$ldap_server->errorMsg('ldap'),
|
398 |
|
|
];
|
399 |
85ad3d82
|
Assos Assos
|
$errors = TRUE;
|
400 |
|
|
}
|
401 |
|
|
|
402 |
|
|
if (!$errors) {
|
403 |
|
|
$bind_result = $ldap_server->bind($ldap_server->binddn, $bindpw, FALSE);
|
404 |
|
|
if ($bind_result == LDAP_SUCCESS) {
|
405 |
32700c57
|
Assos Assos
|
$results_tables['basic'][] = [t('Successfully bound to server')];
|
406 |
85ad3d82
|
Assos Assos
|
}
|
407 |
|
|
else {
|
408 |
32700c57
|
Assos Assos
|
$results_tables['basic'][] = [t('Failed to bind to server. ldap error #') . $bind_result . ' ' . $ldap_server->errorMsg('ldap')];
|
409 |
85ad3d82
|
Assos Assos
|
$errors = TRUE;
|
410 |
|
|
}
|
411 |
|
|
}
|
412 |
32700c57
|
Assos Assos
|
return [$errors, $results];
|
413 |
85ad3d82
|
Assos Assos
|
}
|
414 |
|
|
|
415 |
32700c57
|
Assos Assos
|
/**
|
416 |
|
|
*
|
417 |
|
|
*/
|
418 |
85ad3d82
|
Assos Assos
|
function ldap_servers_test_user_mapping($drupal_username, &$ldap_server, $ldap_context = NULL) {
|
419 |
|
|
|
420 |
|
|
$ldap_user = $ldap_server->userUserNameToExistingLdapEntry($drupal_username, $ldap_context);
|
421 |
|
|
$errors = FALSE;
|
422 |
32700c57
|
Assos Assos
|
if (!$ldap_user) {
|
423 |
85ad3d82
|
Assos Assos
|
$results[] = t('Failed to find test user %username by searching on %user_attr = %username.',
|
424 |
32700c57
|
Assos Assos
|
[
|
425 |
85ad3d82
|
Assos Assos
|
'%username' => $drupal_username,
|
426 |
32700c57
|
Assos Assos
|
'%user_attr' => $ldap_server->user_attr,
|
427 |
|
|
]
|
428 |
85ad3d82
|
Assos Assos
|
)
|
429 |
|
|
. ' ' . t('Error Message:') . ' ' . $ldap_server->errorMsg('ldap');
|
430 |
|
|
$errors = TRUE;
|
431 |
|
|
}
|
432 |
|
|
else {
|
433 |
|
|
$results[] = t('Found test user %username by searching on %user_attr = %username.',
|
434 |
32700c57
|
Assos Assos
|
['%username' => $drupal_username, '%user_attr' => $ldap_server->user_attr]);
|
435 |
85ad3d82
|
Assos Assos
|
}
|
436 |
32700c57
|
Assos Assos
|
return [$errors, $results, $ldap_user];
|
437 |
85ad3d82
|
Assos Assos
|
} |