Created
August 14, 2015 07:37
-
-
Save lgladdy/e997981ee47b65675eaf to your computer and use it in GitHub Desktop.
Rewrite group_info to query a group for more than 1500 people in a group on WS 2012 DCs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public function group_info($group_name,$fields=NULL){ | |
if ($group_name===NULL){ return (false); } | |
if (!$this->_bind){ return (false); } | |
if (stristr($group_name, '+')) { | |
$group_name=stripslashes($group_name); | |
} | |
$filter="(&(objectCategory=group)(name=".$this->ldap_slashes($group_name)."))"; | |
//echo ($filter."!!!<br>"); | |
if ($fields===NULL){ $fields=array("member","memberof","cn","description","distinguishedname","objectcategory","samaccountname"); } | |
$sr=ldap_search($this->_conn,$this->_base_dn,$filter,$fields); | |
$entries = ldap_get_entries($this->_conn, $sr); | |
// Windows 2003: Returns up to 1500 values (Windows 2000 only 1000 is not supported). | |
if ($entries[0]['member;range=0-1499']['count'] == 1500) { | |
echo "Got more than 1500..."; | |
$entries[0]['member']['count'] = "0"; | |
$rangestep = 1499; // Step site | |
$rangelow = 0; // Initial low range | |
$rangehigh = $rangelow + $rangestep; // Initial high range | |
// do until array_keys($members[0])[0] ends with a '*', e. g. member;range=1499-*. It indicates end of the range | |
do { | |
echo "In member search loop bizniz..."; | |
echo "Range low: $rangelow, to $rangehigh"; | |
$sr = ldap_search($this->_conn, $this->_base_dn, $filter, array("member;range=" . $rangelow . "-" . $rangehigh)); | |
$members = ldap_get_entries($this->_conn, $sr); | |
$memberrange = array_keys($members[0]); | |
$membercount = $members[0][$memberrange[0]]['count']; | |
// Copy range entries to member | |
for ($i = 0; $i <= $membercount -1; $i++) { | |
$entries[0]['member'][] = $members[0][$memberrange[0]][$i]; | |
} | |
$entries[0]['member']['count'] += $membercount; | |
$rangelow += $rangestep +1; | |
$rangehigh += $rangestep +1; | |
} while (substr($memberrange[0], -1) != '*'); | |
} | |
//print_r($entries); | |
return ($entries); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment