You are here

function ldap_servers_test_form_submit in Lightweight Directory Access Protocol (LDAP) 7.2

Same name and namespace in other branches
  1. 8.2 ldap_servers/ldap_servers.test_form.inc \ldap_servers_test_form_submit()
  2. 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;
  }
}