MDL-15039 Apostrophes in idnumber prevent users from being unenrolled via LDAP

If any member of a course has an ID number containing an apostrophe (eg.
CN=Paddy O'Brien,OU=Students,DC=etc...), no other members will ever be
unenrolled via LDAP.

Thanks to Michael Woods for the bug report and proposed solution.

Merged from MOODLE_18_STABLE.
This commit is contained in:
iarenaza 2008-06-02 22:39:39 +00:00
parent 7e60297f54
commit 37ad7544f9

View file

@ -237,6 +237,7 @@ function sync_enrolments($type, $enrol = false) {
$ldapmembers = $course[strtolower($CFG->{'enrol_ldap_memberattribute_role'.$role->id} )];
unset($ldapmembers['count']); // remove oddity ;)
$ldapmembers = addslashes_recursive($ldapmembers);
}
// prune old ldap enrolments
@ -274,18 +275,18 @@ function sync_enrolments($type, $enrol = false) {
$sql = 'SELECT id,1 FROM {user} '
." WHERE idnumber=?";
$member = $DB->get_record_sql($sql, array($ldapmember));
// print "sql: $sql \nidnumber = $ldapmember \n" . var_dump($member);
// print "sql: $sql \nidnumber = ".stripslashes($ldapmember)." \n".var_dump($member);
if(empty($member) || empty($member->id)){
print "Could not find user $ldapmember, skipping\n";
print "Could not find user ".stripslashes($ldapmember).", skipping\n";
continue;
}
$member = $member->id;
if (!$DB->get_record('role_assignments', array('roleid'=>$role->id,
'contextid'=>$context->id, 'userid'=>$member, 'enrol'=>'ldap'))){
if (role_assign($role->id, $member, 0, $context->id, 0, 0, 0, 'ldap')){
print "Assigned role $type to $member ($ldapmember) for course $course_obj->id ($course_obj->shortname)\n";
print "Assigned role $type to $member (".stripslashes($ldapmember).") for course $course_obj->id ($course_obj->shortname)\n";
} else {
print "Failed to assign role $type to $member ($ldapmember) for course $course_obj->id ($course_obj->shortname)\n";
print "Failed to assign role $type to $member (".stripslashes($ldapmember).") for course $course_obj->id ($course_obj->shortname)\n";
}
}
}