--- enrol.php.orig	2008-06-09 22:48:01.000000000 -0400
+++ enrol.php	2009-06-16 15:51:17.000000000 -0400
@@ -156,9 +156,6 @@
     if (!empty($CFG->enrol_ldap_course_summary)){
         array_push($ldap_fields_wanted, $CFG->enrol_ldap_course_summary);
     }
-    if($enrol){
-        array_push($ldap_fields_wanted, $CFG->{'enrol_ldap_memberattribute_role'.$role->id});
-    }
 
     // define the search pattern
     if (!empty($CFG->enrol_ldap_objectclass)){ 
@@ -231,6 +228,46 @@
                     // Get a context object.
                     $context = get_context_instance(CONTEXT_COURSE, $course_obj->id);
 
+                    // MDL-10331: Enable large member results in AD
+                    $rangeStart = 0;
+                    $rangeLength = 500;
+                    $member = $CFG->{'enrol_ldap_memberattribute_role'.$role->id};
+                    $tempMembers = array('count' => 0);
+                    while ($rangeStart > -1) {
+                        if (1 == 1) { // MS-AD
+                            $member = $CFG->{'enrol_ldap_memberattribute_role'.$role->id}.';Range='.$rangeStart.'-'.($rangeStart+$rangeLength-1);
+                        }
+                        $ldap_fields_wanted = array('dn', $member);
+                        if ($CFG->enrol_ldap_search_sub){
+                            //use ldap_search to find first group from subtree
+                            $ldap_result = @ldap_search($ldap_connection, $context, $ldap_search_pattern, $ldap_fields_wanted);
+                        } else {
+                            //search only in this context
+                            $ldap_result = @ldap_list($ldap_connection, $context, $ldap_search_pattern, $ldap_fields_wanted,0,0);
+                        }
+ 
+                        // check and push results
+                        $records = $ldap_result ? ldap_get_entries($ldap_connection,$ldap_result) : array('count' => 0);
+                        $record = $records[0];
+
+                        if (array_key_exists(strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id}.';Range='.$rangeStart.'-*'), $record)) {
+                            $record[strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id}.';Range='.$rangeStart.'-*')][count] += $tempMembers['count'];
+                            unset($tempMembers['count']);
+                            $tempMembers = array_merge($tempMembers, $record[strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id}.';Range='.$rangeStart.'-*')]);
+                            $rangeStart = -1;
+                        } else if (array_key_exists(strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id}.';Range='.$rangeStart.'-'.($rangeStart+$rangeLength-1)), $record)) {
+                            $record[strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id}.'Range='.$rangeStart.'-'.($rangeStart+$rangeLength-1))][count] += $tempMembers['count'];
+                            unset($tempMembers['count']);
+                            $tempMembers = array_merge($tempMembers, $record[strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id}.';Range='.$rangeStart.'-'.($rangeStart+$rangeLength-1))]);
+                            $rangeStart = $rangeStart + $rangeLength;
+                        } else {
+                            $tempMembers = $record[strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id})];
+                            $rangeStart = -1;
+                        }
+                    }
+                    $course[strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id})] = $tempMembers;
+                    // END LOCAL
+
                     // pull the ldap membership into a nice array
                     // this is an odd array -- mix of hash and array -- 
                     $ldapmembers=array();
