function ldap_servers_test_form_submit in Lightweight Directory Access Protocol (LDAP) 7.2
Same name and namespace in other branches
- 8.2 ldap_servers/ldap_servers.test_form.inc \ldap_servers_test_form_submit()
- 7 ldap_servers/ldap_servers.test_form.inc \ldap_servers_test_form_submit()
Submit hook for the LDAP server form.
File
- ldap_servers/
ldap_servers.test_form.inc, line 183
Code
function ldap_servers_test_form_submit($form, &$form_state) {
// Pass data back to form builder.
$form_state['rebuild'] = TRUE;
ldap_servers_module_load_include('inc', 'ldap_servers', 'ldap_servers.functions');
$errors = FALSE;
$has_errors = FALSE;
$values = $form_state['values'];
$sid = $values['sid'];
$ldap_server = ldap_servers_get_servers($sid, 'all', TRUE);
$results = [];
$results_tables = [];
if ($values['bindpw']) {
$bindpw = $values['bindpw'];
$bindpw_type = t('entered in form.');
}
else {
$bindpw = NULL;
$bindpw_type = t('stored in configuration');
}
if ($ldap_server->bind_method == LDAP_SERVERS_BIND_METHOD_SERVICE_ACCT) {
$results_tables['basic'][] = [
t('Binding with DN for non-anonymous search (%bind_dn). Using password ', [
'%bind_dn' => $ldap_server->binddn,
]) . ' ' . $bindpw_type,
];
}
else {
$results_tables['basic'][] = [
t('Binding with null DN for anonymous search.'),
];
}
if (@$values['grp_test_grp_dn_writeable'] && @$values['grp_test_grp_dn']) {
$user_test_dn = @$values['grp_test_grp_dn'];
$group_create_test_dn = $values['grp_test_grp_dn_writeable'];
$group_create_test_attr = [
'objectClass' => [
$ldap_server->groupObjectClass,
'top',
],
];
// 1. delete test group if it exists.
if ($ldap_server
->dnExists($group_create_test_dn, 'ldap_entry', [
'cn',
'member',
])) {
$result = $ldap_server
->groupRemoveGroup($group_create_test_dn, FALSE);
}
$group_exists = $ldap_server
->dnExists($group_create_test_dn, 'ldap_entry', [
'cn',
'member',
]);
$result = $group_exists === FALSE ? "PASS" : "FAIL";
$results_tables['group1'][] = [
"Starting test without group: {$group_create_test_dn} ",
$result,
];
// 2. make sure call to members in empty group returns false.
$result = $ldap_server
->groupAllMembers($group_create_test_dn);
$result = $result === FALSE ? "PASS" : 'FAIL';
$results_tables['group1'][] = [
"LdapServer::groupAllMembers({$group_create_test_dn}) call on nonexistent group returns FALSE",
$result,
];
// 3. add group.
$result = $ldap_server
->groupAddGroup($group_create_test_dn, $group_create_test_attr);
$result = $result ? "PASS" : 'FAIL';
$attr = serialize($group_create_test_attr);
$results_tables['group1'][] = [
"LdapServer::groupAddGroup({$group_create_test_dn}, {$attr})",
$result,
];
// 4. call to all members in an empty group returns emtpy array, not FALSE.
$result = $ldap_server
->groupAllMembers($group_create_test_dn);
$result = is_array($result) && count($result) == 0 ? 'PASS' : 'FAIL';
$results_tables['group1'][] = [
"LdapServer::groupAllMembers({$group_create_test_dn}) returns empty array for empty group ",
$result,
];
// 5. add member to group.
$result = $ldap_server
->groupAddMember($group_create_test_dn, $user_test_dn);
$result = is_array($ldap_server
->groupAllMembers($group_create_test_dn)) ? 'PASS' : 'FAIL';
$results_tables['group1'][] = [
"LdapServer::groupAddMember({$group_create_test_dn}, {$user_test_dn})",
$result,
];
// 6. try to remove group with member in it.
$only_if_group_empty = TRUE;
$result = $ldap_server
->groupRemoveGroup($group_create_test_dn, $only_if_group_empty);
$result = $result ? 'FAIL' : 'PASS';
$results_tables['group1'][] = [
"LdapServer::groupRemoveGroup({$group_create_test_dn}, {$only_if_group_empty})",
$result,
];
// 7. remove group member.
$result = $ldap_server
->groupRemoveMember($group_create_test_dn, $user_test_dn);
$result = $ldap_server
->groupAllMembers($group_create_test_dn);
$result = is_array($result) && count($result) == 0 ? 'PASS' : 'FAIL';
$results_tables['group1'][] = [
"LdapServer::groupRemoveMember({$group_create_test_dn}, {$user_test_dn})",
$result,
];
$only_if_group_empty = TRUE;
$result = $ldap_server
->groupRemoveGroup($group_create_test_dn, $only_if_group_empty);
$result = $ldap_server
->dnExists($group_create_test_dn, 'ldap_entry', [
'cn',
'member',
]) ? "FAIL" : 'PASS';
$results_tables['group1'][] = [
"LdapServer::groupRemoveGroup({$group_create_test_dn}, {$only_if_group_empty})",
$result,
];
}
// Connect to ldap.
list($has_errors, $more_results) = ldap_servers_test_binding_credentials($ldap_server, $bindpw, $results_tables);
$results = array_merge($results, $more_results);
if ($ldap_server->bind_method == LDAP_SERVERS_BIND_METHOD_ANON_USER) {
list($has_errors, $more_results, $ldap_user) = ldap_servers_test_user_mapping($values['testing_drupal_username'], $ldap_server);
$results = array_merge($results, $more_results);
if (!$has_errors) {
$mapping[] = "dn = " . $ldap_user['dn'];
foreach ($ldap_user['attr'] as $key => $value) {
if (is_array($value)) {
$mapping[] = "{$key} = " . $value[0];
}
}
$results_tables['basic'][] = [
theme_item_list([
'items' => $mapping,
'title' => t('Attributes available to anonymous search', [
'%bind_dn' => $ldap_server->binddn,
]),
'type' => 'ul',
'attributes' => [],
]),
];
}
$results_tables['basic'][] = [
t('Binding with DN (%bind_dn). Using supplied password ', [
'%bind_dn' => $ldap_user['dn'],
]),
];
$result = $ldap_server
->bind($ldap_user['dn'], $values['testing_drupal_userpw'], FALSE);
if ($result == LDAP_SUCCESS) {
$results_tables['basic'][] = [
t('Successfully bound to server'),
'PASS',
];
}
else {
$results_tables['basic'][] = [
t('Failed to bind to server. ldap error #') . $result . ' ' . $ldap_server
->errorMsg('ldap'),
'FAIL',
];
}
}
if (!$has_errors && isset($values['grp_test_grp_dn'])) {
$group_dn = $values['grp_test_grp_dn'];
$result = @ldap_read($ldap_server->connection, $group_dn, 'objectClass=*');
if (is_array($result)) {
$group_entry = ldap_get_entries($ldap_server->connection, $result);
}
$user = isset($values['testing_drupal_username']) ? $values['testing_drupal_username'] : NULL;
// FALSE.
foreach ([
FALSE,
TRUE,
] as $nested) {
$nested_display = $nested ? 'Yes' : 'No';
if ($user) {
// This is the parent function that will call FromUserAttr or FromEntry.
$memberships = $ldap_server
->groupMembershipsFromUser($user, 'group_dns', $nested);
$result = theme('item_list', [
'items' => $memberships,
'type' => 'ul',
]);
$results_tables['group2'][] = [
"ldap_server->groupMembershipsFromUser({$user}, 'group_dns', nested={$nested_display})<br/>count=" . count($memberships),
$result,
];
$result = $ldap_server
->groupIsMember($group_dn, $user, $nested) ? 'Yes' : 'No';
$group_results[] = [
"ldap_server->groupIsMember({$group_dn}, {$user}, nested={$nested_display})",
$result,
];
if ($ldap_server->groupUserMembershipsConfigured) {
$groupusermembershipsfromuserattr = $ldap_server
->groupUserMembershipsFromUserAttr($user, $nested);
$count = count($groupusermembershipsfromuserattr);
$result = theme('item_list', [
'items' => $groupusermembershipsfromuserattr,
'type' => 'ul',
]);
}
else {
$groupusermembershipsfromuserattr = [];
$result = "'A user LDAP attribute such as memberOf exists that contains a list of their group' is not configured.";
}
$results_tables['group2'][] = [
"ldap_server->groupUserMembershipsFromUserAttr({$user}, nested={$nested_display})<br/> count=" . count($groupusermembershipsfromuserattr),
$result,
];
if ($ldap_server->groupGroupEntryMembershipsConfigured) {
$groupusermembershipsfromentry = $ldap_server
->groupUserMembershipsFromEntry($user, $nested);
$result = theme('item_list', [
'items' => $groupusermembershipsfromentry,
'type' => 'ul',
]);
}
else {
$groupusermembershipsfromentry = [];
$result = "Groups by entry not configured.";
}
$results_tables['group2'][] = [
"ldap_server->groupUserMembershipsFromEntry({$user}, nested={$nested_display})<br/>count=" . count($groupusermembershipsfromentry),
$result,
];
if (count($groupusermembershipsfromentry) && count($groupusermembershipsfromuserattr)) {
$diff1 = array_diff($groupusermembershipsfromuserattr, $groupusermembershipsfromentry);
$diff2 = array_diff($groupusermembershipsfromentry, $groupusermembershipsfromuserattr);
$result1 = theme('item_list', [
'items' => $diff1,
'type' => 'ul',
]);
$result2 = theme('item_list', [
'items' => $diff2,
'type' => 'ul',
]);
$results_tables['group2'][] = [
"groupUserMembershipsFromEntry and FromUserAttr Diff)",
$result1,
];
$results_tables['group2'][] = [
"FromUserAttr and groupUserMembershipsFromEntry Diff)",
$result2,
];
}
}
}
if ($groups_from_dn = $ldap_server
->groupUserMembershipsFromDn($user)) {
$results_tables['groupfromDN'][] = [
"Groups from DN",
theme('item_list', [
'items' => $groups_from_dn,
'type' => 'ul',
]),
];
}
}
list($has_errors, $more_results, $ldap_user) = ldap_servers_test_user_mapping($values['testing_drupal_username'], $ldap_server);
$tokens = $ldap_user && isset($ldap_user['attr']) ? ldap_servers_token_tokenize_entry($ldap_user['attr'], 'all') : [];
foreach ($tokens as $key => $value) {
$results_tables['tokens'][] = [
$key,
ldap_servers_string_binary_check($value),
];
}
$form_state['ldap_server_test_data'] = [
'username' => $values['testing_drupal_username'],
'results_tables' => $results_tables,
];
if (isset($ldap_user)) {
$form_state['ldap_server_test_data']['ldap_user'] = $ldap_user;
}
if (isset($group_entry)) {
$form_state['ldap_server_test_data']['group_entry'] = $group_entry;
}
}