function userUserNameToExistingLdapEntry($drupal_user_name, $ldap_context = NULL) {

    $watchdog_tokens = array('%drupal_user_name' => $drupal_user_name);
    $ldap_username = $this->userUsernameToLdapNameTransform($drupal_user_name, $watchdog_tokens);
    if (!$ldap_username) {
      return FALSE;
    }
    if (!$ldap_context) {
      $attributes = array();
    }
    else {
      $attribute_maps = ldap_servers_attributes_needed($this->sid, $ldap_context);
      $attributes = array_keys($attribute_maps);
    }

    foreach ($this->basedn as $basedn) {
      if (empty($basedn)) continue;
      $filter = '(' . $this->user_attr . '=' . ldap_server_massage_text($ldap_username, 'attr_value', LDAP_SERVER_MASSAGE_QUERY_LDAP) . ')';
      $result = $this->search($basedn, $filter, $attributes);
      if (!$result || !isset($result['count']) || !$result['count']) continue;

      // Must find exactly one user for authentication to work.

      if ($result['count'] != 1) {
        $count = $result['count'];
        watchdog('ldap_servers', "Error: !count users found with $filter under $basedn.", array('!count' => $count), WATCHDOG_ERROR);
        continue;
      }
      $match = $result[0];
      // These lines serve to fix the attribute name in case a
      // naughty server (i.e.: MS Active Directory) is messing the
      // characters' case.
      // This was contributed by Dan "Gribnif" Wilga, and described
      // here: http://drupal.org/node/87833
      $name_attr = $this->user_attr;

      if (isset($match[$name_attr][0])) {
        // leave name
      }
      elseif (isset($match[drupal_strtolower($name_attr)][0])) {
        $name_attr = drupal_strtolower($name_attr);

      }
      else {
        if ($this->bind_method == LDAP_SERVERS_BIND_METHOD_ANON_USER) {
          $result = array(
            'dn' =>  $match['dn'],
            'mail' => $this->userEmailFromLdapEntry($match),
            'attr' => $match,
            'sid' => $this->sid,
            );
          return $result;
        }
        else {
          continue;
        }
      }

      // Finally, we must filter out results with spaces added before
      // or after, which are considered OK by LDAP but are no good for us
      // We allow lettercase independence, as requested by Marc Galera
      // on http://drupal.org/node/97728
      //
      // Some setups have multiple $name_attr per entry, as pointed out by
      // Clarence "sparr" Risher on http://drupal.org/node/102008, so we
      // loop through all possible options.
      foreach ($match[$name_attr] as $value) {
        if (drupal_strtolower(trim($value)) == drupal_strtolower($ldap_username)) {
          $result = array(
            'dn' =>  $match['dn'],
            'mail' => $this->userEmailFromLdapEntry($match),
            'attr' => $match,
            'sid' => $this->sid,
          );
          return $result;
        }
      }
    }
  }
function userUserNameToExistingLdapEntry($drupal_user_name, $ldap_context = NULL) {

    $watchdog_tokens = array('%drupal_user_name' => $drupal_user_name);
    $ldap_username = $this->userUsernameToLdapNameTransform($drupal_user_name, $watchdog_tokens);
    if (!$ldap_username) {
      return FALSE;
    }
    if (!$ldap_context) {
      $attributes = array();
    }
    else {
      $attribute_maps = ldap_servers_attributes_needed($this->sid, $ldap_context);
      $attributes = array_keys($attribute_maps);
    }

    foreach ($this->basedn as $basedn) {
      if (empty($basedn)) continue;
      $filter = '(' . $this->user_attr . '=' . ldap_server_massage_text($ldap_username, 'attr_value', LDAP_SERVER_MASSAGE_QUERY_LDAP) . ')';
      $result = $this->search($basedn, $filter, $attributes);
      if (!$result || !isset($result['count']) || !$result['count']) continue;

      // Must find exactly one user for authentication to work.

      if ($result['count'] != 1) {
        $count = $result['count'];
        watchdog('ldap_servers', "Error: !count users found with $filter under $basedn.", array('!count' => $count), WATCHDOG_ERROR);
        continue;
      }
      $match = $result[0];
      // These lines serve to fix the attribute name in case a
      // naughty server (i.e.: MS Active Directory) is messing the
      // characters' case.
      // This was contributed by Dan "Gribnif" Wilga, and described
      // here: http://drupal.org/node/87833
      $name_attr = $this->user_attr;

      if (isset($match[$name_attr][0])) {
        // leave name
      }
      elseif (isset($match[drupal_strtolower($name_attr)][0])) {
        $name_attr = drupal_strtolower($name_attr);

      }
      else {
        if ($this->bind_method == LDAP_SERVERS_BIND_METHOD_ANON_USER) {
          $result = array(
            'dn' =>  $match['dn'],
            'mail' => $this->userEmailFromLdapEntry($match),
            'attr' => $match,
            'sid' => $this->sid,
            );
          return $result;
        }
        else {
          continue;
        }
      }

      // Finally, we must filter out results with spaces added before
      // or after, which are considered OK by LDAP but are no good for us
      // We allow lettercase independence, as requested by Marc Galera
      // on http://drupal.org/node/97728
      //
      // Some setups have multiple $name_attr per entry, as pointed out by
      // Clarence "sparr" Risher on http://drupal.org/node/102008, so we
      // loop through all possible options.
      foreach ($match[$name_attr] as $value) {
        if (drupal_strtolower(trim($value)) == drupal_strtolower($ldap_username)) {
          $result = array(
            'dn' =>  $match['dn'],
            'mail' => $this->userEmailFromLdapEntry($match),
            'attr' => $match,
            'sid' => $this->sid,
          );
          return $result;
        }
      }
    }
  }
function userUserNameToExistingLdapEntry ( $ drupal_user_name , $ ldap_context = NULL ) { $ watchdog_tokens = array ( '%drupal_user_name' => $ drupal_user_name ) ; $ ldap_username = $ this -> userUsernameToLdapNameTransform ( $ drupal_user_name , $ watchdog_tokens ) ; if ( ! $ ldap_username ) { return FALSE ; } if ( ! $ ldap_context ) { $ attributes = array ( ) ; } else { $ attribute_maps = ldap_servers_attributes_needed ( $ this -> sid , $ ldap_context ) ; $ attributes = array_keys ( $ attribute_maps ) ; } foreach ( $ this -> basedn as $ basedn ) { if ( empty ( $ basedn ) ) continue ; $ filter = '(' . $ this -> user_attr . '=' . ldap_server_massage_text ( $ ldap_username , 'attr_value' , LDAP_SERVER_MASSAGE_QUERY_LDAP ) . ')' ; $ result = $ this -> search ( $ basedn , $ filter , $ attributes ) ; if ( ! $ result || ! isset ( $ result [ 'count' ] ) || ! $ result [ 'count' ] ) continue ; // Must find exactly one user for authentication to work. if ( $ result [ 'count' ] != 1 ) { $ count = $ result [ 'count' ] ; watchdog ( 'ldap_servers' , "Error: !count users found with $filter under $basedn." , array ( '!count' => $ count ) , WATCHDOG_ERROR ) ; continue ; } $ match = $ result [ 0 ] ; // These lines serve to fix the attribute name in case a // naughty server (i.e.: MS Active Directory) is messing the // characters' case. // This was contributed by Dan "Gribnif" Wilga, and described // here: http://drupal.org/node/87833 $ name_attr = $ this -> user_attr ; if ( isset ( $ match [ $ name_attr ] [ 0 ] ) ) { // leave name } elseif ( isset ( $ match [ drupal_strtolower ( $ name_attr ) ] [ 0 ] ) ) { $ name_attr = drupal_strtolower ( $ name_attr ) ; } else { if ( $ this -> bind_method == LDAP_SERVERS_BIND_METHOD_ANON_USER ) { $ result = array ( 'dn' => $ match [ 'dn' ] , 'mail' => $ this -> userEmailFromLdapEntry ( $ match ) , 'attr' => $ match , 'sid' => $ this -> sid , ) ; return $ result ; } else { continue ; } } // Finally, we must filter out results with spaces added before // or after, which are considered OK by LDAP but are no good for us // We allow lettercase independence, as requested by Marc Galera // on http://drupal.org/node/97728 // // Some setups have multiple $name_attr per entry, as pointed out by // Clarence "sparr" Risher on http://drupal.org/node/102008, so we // loop through all possible options. foreach ( $ match [ $ name_attr ] as $ value ) { if ( drupal_strtolower ( trim ( $ value ) ) == drupal_strtolower ( $ ldap_username ) ) { $ result = array ( 'dn' => $ match [ 'dn' ] , 'mail' => $ this -> userEmailFromLdapEntry ( $ match ) , 'attr' => $ match , 'sid' => $ this -> sid , ) ; return $ result ; } } } }
Queries LDAP server for the user.

@param string $drupal_user_name

@param string or int $prov_event
This could be anything, particularly when used by other modules.  Other modules should use string like 'mymodule_myevent'
LDAP_USER_EVENT_ALL signifies get all attributes needed by all other contexts/ops

@return associative array representing ldap data of a user.  for example of returned value.
'sid' => ldap server id
'mail' => derived from ldap mail (not always populated).
'dn'   => dn of user
'attr' => single ldap entry array in form returned from ldap_search() extension, e.g.
'dn' => dn of entry
Queries LDAP server for the user .