title: Wordpress AD Intergration Error retrieving group
body: <p><img src="https://i.stack.imgur.com/7cREY.jpg" alt="enter image description here"></p>
  
  <p>For some odd reason im unable to retrieve group memebers from domain users or any group for that batter. </p>
  
  <p>Base DN is set to  dc=domain,dc=com Ive hits block here. When I use the test tool im able to authenticate [NOTICE] Authentication successfull for "rpimentel@domain.com"</p>
  
  <p>Something is missing. Something simple, that im over looking. What could it be? </p>
  
  <pre><code>    // Extend the ADIntegrationPlugin class
      class BulkImportADIntegrationPlugin extends ADIntegrationPlugin {
  
  /**
   * Output formatted debug informations
   * 
   * @param integer level
   * @param string $notice
   */
  protected function _log($level = 0, $info = '') {
      if ($level &lt;= $this-&gt;_loglevel) {
          switch ($level) {
              case ADI_LOG_DEBUG: 
                  $class = 'debug';
                  $type  = '[DEBUG]  ';
                  break;
              case ADI_LOG_INFO: 
                  $class = 'info';
                  $type  = '[INFO]   ';
                  break;
              case ADI_LOG_NOTICE: 
                  $class = 'notice';
                  $type = '[NOTICE] ';
                  break;
              case ADI_LOG_WARN: 
                  $class = 'warn';
                  $type = '[WARN]   ';
                  break;
              case ADI_LOG_ERROR: 
                  $class = 'error';
                  $type = '[ERROR]  ';
                  break;
              case ADI_LOG_FATAL: 
                  $class = 'fatal';
                  $type = '[FATAL]  ';
                      break;
              default:
                  $class = '';
                  $type = '';
  
          }
          $output = '&lt;span class="'.$class.'"&gt;'.$type;
          $output .= str_replace("\n","&lt;br /&gt;         ",$info).'&lt;/span&gt;&lt;br /&gt;';
          echo $output;
  
          if (WP_DEBUG) {
              if ($fh = @fopen($this-&gt;_logfile,'a+')) {
                  fwrite($fh,$type . str_replace("\n","\n         ",$info) . "\n");
                  fclose($fh);
              }
          }       
      }
  }
  
  
  /**
   * Do Bulk Import
   * 
   * @param string $authcode
   * @return bool true on success, false on error
   */
  public function bulkimport($authcode)
  {
      global $wp_version;
      global $wpdb;
  
      $this-&gt;setLogFile(dirname(__FILE__).'/import.log');
  
      $this-&gt;_log(ADI_LOG_INFO,"-------------------------------------\n".
                               "START OF BULK IMPORT\n".
                               date('Y-m-d / H:i:s')."\n".
                               "-------------------------------------\n");
  
      $time = time();
      $all_users = array();
  
      // Is bulk import enabled?
      if (!$this-&gt;_bulkimport_enabled) {
          $this-&gt;_log(ADI_LOG_INFO,'Bulk Import is disabled.');
          return false;
      }
  
      // DO we have the correct Auth Code?
      if ($this-&gt;_bulkimport_authcode !== $authcode) {
          $this-&gt;_log(ADI_LOG_ERROR,'Wrong Auth Code.');
          return false;
      }
  
      $ad_password = $this-&gt;_decrypt($this-&gt;_bulkimport_pwd);
  
      // Log informations
      $this-&gt;_log(ADI_LOG_INFO,"Options for adLDAP connection:\n".
                    "- base_dn: $this-&gt;_base_dn\n".
                    "- domain_controllers: $this-&gt;_domain_controllers\n".
                    "- ad_username: $this-&gt;_bulkimport_user\n".
                    "- ad_password: **not shown**\n".
                    "- ad_port: $this-&gt;_port\n".
                    "- use_tls: ".(int) $this-&gt;_use_tls."\n".
                    "- network timeout: ". $this-&gt;_network_timeout);
  
      // Connect to Active Directory
      try {
          $this-&gt;_adldap = @new adLDAP(array(
                      "base_dn" =&gt; $this-&gt;_base_dn, 
                      "domain_controllers" =&gt; explode(';', $this-&gt;_domain_controllers),
                      "ad_username" =&gt; $this-&gt;_bulkimport_user,       // Bulk Import User
                      "ad_password" =&gt; $ad_password,                  // password
                      "ad_port" =&gt; $this-&gt;_port,                      // AD port
                      "use_tls" =&gt; $this-&gt;_use_tls,                   // secure?
                      "network_timeout" =&gt; $this-&gt;_network_timeout    // network timeout
                      ));
      } catch (Exception $e) {
          $this-&gt;_log(ADI_LOG_ERROR,'adLDAP exception: ' . $e-&gt;getMessage());
          return false;
      }
      $this-&gt;_log(ADI_LOG_NOTICE,'adLDAP object created.');
      $this-&gt;_log(ADI_LOG_INFO,'Domain Controller: ' . $this-&gt;_adldap-&gt;get_last_used_dc());
  
      // Let's give us some more time (60 minutes)
      $max_execution_time = ini_get('max_execution_time');
      if ($max_execution_time &lt; 3600) {
          ini_set('max_execution_time', 3600);
      }
      if (ini_get('max_execution_time') &lt; 3600) {
          $this-&gt;_log(ADI_LOG_ERROR,'Can not increase PHP configuration option "max_execution_time".');
          return false;
      }
  
      // get all users of the chosen security groups from
      $groups = explode(";",$this-&gt;_bulkimport_security_groups);
      if (count($groups) &lt; 1) {
          $this-&gt;_log(ADI_LOG_WARN,'No security group.');
          return false;
      }
  
      foreach ($groups AS $group) {
          // get all members of group
          $group = trim($group);
          if ($group != '')  {
              // do we have a groupid?
              if (($pos = stripos($group,'id:')) !== false) {
                  $pgid = substr($group,$pos+3);
                  $members = $this-&gt;_adldap-&gt;group_members_by_primarygroupid($pgid, true);
              } else {
                  $members = $this-&gt;_adldap-&gt;group_members($group, true);
              }
              if ($members) {
                  $this-&gt;_log(ADI_LOG_INFO,count($members).' Members of group "'.$group.'".');
                  $this-&gt;_log(ADI_LOG_DEBUG,'Members of group "'.$group.'": ' . implode(', ',$members));
                  foreach ($members AS $user) {
                      $all_users[strtolower($user)] = $user;
                  }
              } else {
                  $this-&gt;_log(ADI_LOG_ERROR,'Error retrieving group members for group "'.$group.'".');
              }
          } else {
              $this-&gt;_log(ADI_LOG_WARN,'No group. Nothing to do.');
          } 
      }
  
      // Adding all local users with non empty entry adi_samaccountname in usermeta
      $blogusers=$wpdb-&gt;get_results( 
          '
          SELECT
              users.user_login
          FROM
              '. $wpdb-&gt;users . ' users
          INNER JOIN
              ' . $wpdb-&gt;usermeta ." meta ON meta.user_id = users.ID
          where
              meta.meta_key = 'adi_samaccountname'
              AND
              meta.meta_value IS NOT NULL
              AND
              meta.meta_value &lt;&gt; ''
              AND
              users.ID &lt;&gt; 1
          "
      );
      if (is_array($blogusers)) {
          foreach ($blogusers AS $user) {
              $all_users[strtolower($user-&gt;user_login)] = $user-&gt;user_login;
          }
      }   
  
  
      $elapsed_time = time() - $time;
      $this-&gt;_log(ADI_LOG_INFO,'Number of users to import/update: '.count($all_users).' (list generated in '. $elapsed_time .' seconds)');
  
      if (version_compare($wp_version, '3.1', '&lt;')) {
          require_once(ABSPATH . WPINC . DIRECTORY_SEPARATOR . 'registration.php');
      }
  
  
      // import all relevant users
      $added_users = 0;
      $updated_users = 0;
      foreach ($all_users AS $username) {
  
          $ad_username = $username;
  
          // getting user data
          //$user = get_userdatabylogin($username); // deprecated
          $user = get_user_by('login', $username);
  
          // role
          $user_role = $this-&gt;_get_user_role_equiv($ad_username); // important: use $ad_username not $username
  
          // userinfo from AD
          $this-&gt;_log(ADI_LOG_DEBUG, 'ATTRIBUTES TO LOAD: '.print_r($this-&gt;_all_user_attributes, true));
          $userinfo = $this-&gt;_adldap-&gt;user_info($ad_username, $this-&gt;_all_user_attributes);
          $userinfo = $userinfo[0];
          $this-&gt;_log(ADI_LOG_DEBUG,"USERINFO[0]: \n".print_r($userinfo,true));
  
          if (empty($userinfo)) {
              $this-&gt;_log(ADI_LOG_INFO,'User "' . $ad_username . '" not found in Active Directory.');
              if (isset($user-&gt;ID) &amp;&amp; ($this-&gt;_disable_users)) {
                  $this-&gt;_log(ADI_LOG_WARN,'User "' . $username . '" disabled.');
                  $this-&gt;_disable_user($user-&gt;ID, sprintf(__('User "%s" not found in Active Directory.', 'ad-integration'), $username));
              }
  
          } else {
  
              // Only user accounts (UF_NORMAL_ACCOUNT is set and other account flags are unset)
              if (($userinfo["useraccountcontrol"][0] &amp; (UF_NORMAL_ACCOUNT | ADI_NO_UF_NORMAL_ACOUNT)) == UF_NORMAL_ACCOUNT) { 
                 //&amp;&amp; (($userinfo["useraccountcontrol"][0] &amp; ADI_NO_UF_NORMAL_ACOUNT)  == 0)) {
  
                  // users with flag UF_SMARTCARD_REQUIRED have no password so they can not logon with ADI
                  if (($userinfo["useraccountcontrol"][0] &amp; UF_SMARTCARD_REQUIRED) == 0) {
  
                      // get display name
                      $display_name = $this-&gt;_get_display_name_from_AD($username, $userinfo);
  
                      // create new users or update them
                      if (!$user OR (strtolower($user-&gt;user_login) != strtolower($username))) { // use strtolower!!!
                          $user_id = $this-&gt;_create_user($ad_username, $userinfo, $display_name, $user_role, '', true);
                          $added_users++;
                      } else {
                          $user_id = $this-&gt;_update_user($ad_username, $userinfo, $display_name, $user_role, '', true);
                          $updated_users++;
                      }
  
                      // load user object (this shouldn't be necessary)
                      if (!$user_id) {
                          $user_id = username_exists($username);
                          $this-&gt;_log(ADI_LOG_NOTICE,'user_id: '.$user_id);
                      }
  
                      // if the user is disabled
                      if (($userinfo["useraccountcontrol"][0] &amp; UF_ACCOUNT_DISABLE) == UF_ACCOUNT_DISABLE)
                      {
                          $this-&gt;_log(ADI_LOG_INFO,'The user "' . $username .'" is disabled in Active Directory.');
                          if ($this-&gt;_disable_users) {
                              $this-&gt;_log(ADI_LOG_WARN,'Disabling user "' . $username .'".');
                              $this-&gt;_disable_user($user_id, sprintf(__('User "%s" is disabled in Active Directory.', 'ad-integration'), $username));
                          }
                      } else {
                          // Enable user / turn off user_disabled
                          $this-&gt;_log(ADI_LOG_INFO,'Enabling user "' . $username .'".');
                          $this-&gt;_enable_user($user_id);
                      }
                  } else {
                      // Flag UF_SMARTCARD_REQUIRED is set
                      $this-&gt;_log(ADI_LOG_INFO,'The user "' . $username .'" requires a SmartCard to logon.');
                      if (isset($user-&gt;ID) &amp;&amp; ($this-&gt;_disable_users)) {
                          $this-&gt;_log(ADI_LOG_WARN,'Disabling user "' . $username .'".');
                          $this-&gt;_disable_user($user-&gt;ID, sprintf(__('User "%s" requires a SmartCard to logon.', 'ad-integration'), $username));
                      }
                  }
              } else {
                  // not a normal user account
                  $this-&gt;_log(ADI_LOG_INFO,'The user "' . $username .'" has no normal user account.');
                  if (isset($user-&gt;ID) &amp;&amp; ($this-&gt;_disable_users)) {
                      $this-&gt;_log(ADI_LOG_WARN,'Disabling user "' . $username .'".');
                      $this-&gt;_disable_user($user-&gt;ID, sprintf(__('User "%s" has no normal user account.', 'ad-integration'), $username));
                  }
              } 
          }
      }
  
      // Logging  
      $elapsed_time = time() - $time;
      $this-&gt;_log(ADI_LOG_INFO,$added_users . ' Users added.');
      $this-&gt;_log(ADI_LOG_INFO,$updated_users . ' Users updated.');
      $this-&gt;_log(ADI_LOG_INFO,'In '. $elapsed_time . ' seconds.');
  
      $this-&gt;_log(ADI_LOG_INFO,"-------------------------------------\n".
                               "END OF BULK IMPORT\n".
                               date('Y-m-d / H:i:s')."\n".
                               "-------------------------------------\n");        
  
      return true;
  }
  </code></pre>
  
  <p>It looks like this is where I fails. But why wouldn't it be able to get group? </p>
  
  <pre><code>    foreach ($groups AS $group) {
      // get all members of group
      $group = trim($group);
      if ($group != '')  {
          // do we have a groupid?
          if (($pos = stripos($group,'id:')) !== false) {
              $pgid = substr($group,$pos+3);
              $members = $this-&gt;_adldap-&gt;group_members_by_primarygroupid($pgid, true);
          } else {
              $members = $this-&gt;_adldap-&gt;group_members($group, true);
          }
          if ($members) {
              $this-&gt;_log(ADI_LOG_INFO,count($members).' Members of group "'.$group.'".');
              $this-&gt;_log(ADI_LOG_DEBUG,'Members of group "'.$group.'": ' . implode(', ',$members));
              foreach ($members AS $user) {
                  $all_users[strtolower($user)] = $user;
              }
          } else {
              $this-&gt;_log(ADI_LOG_ERROR,'Error retrieving group members for group "'.$group.'".');
          }
  </code></pre>