From dab5a1e1032b749526957b93f3c5063559cffb2f Mon Sep 17 00:00:00 2001
From: Alexander Bias <alexander.bias@uni-ulm.de>
Date: Wed, 19 Feb 2020 10:09:54 +0100
Subject: [PATCH] Adopt code changes Moodle 3.8 core auth_ldap.
---
CHANGES.md | 1 +
auth.php | 51 +++++++++++++++++++++++++++++++++++++++++++--------
2 files changed, 44 insertions(+), 8 deletions(-)
diff --git a/CHANGES.md b/CHANGES.md
index aca2f6f..139116e 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -6,6 +6,7 @@ Changes
### Unreleased
+* 2020-02-19 - Adopt code changes Moodle 3.8 core auth_ldap.
* 2020-02-19 - Prepare compatibility for Moodle 3.8.
### v3.7-r1
diff --git a/auth.php b/auth.php
index fad0c51..f89f001 100644
--- a/auth.php
+++ b/auth.php
@@ -100,6 +100,7 @@ class auth_plugin_ldap_syncplus extends auth_plugin_ldap {
// Get user's list from ldap to sql in a scalable fashion.
// Prepare some data we'll need.
$filter = '(&('.$this->config->user_attribute.'=*)'.$this->config->objectclass.')';
+ $servercontrols = array();
$contexts = explode(';', $this->config->contexts);
@@ -117,24 +118,58 @@ class auth_plugin_ldap_syncplus extends auth_plugin_ldap {
do {
if ($ldappagedresults) {
- ldap_control_paged_result($ldapconnection, $this->config->pagesize, true, $ldapcookie);
+ // TODO: Remove the old branch of code once PHP 7.3.0 becomes required (Moodle 4.1).
+ if (version_compare(PHP_VERSION, '7.3.0', '<')) {
+ // Before 7.3, use this function that was deprecated in PHP 7.4.
+ ldap_control_paged_result($ldapconnection, $this->config->pagesize, true, $ldapcookie);
+ } else {
+ // PHP 7.3 and up, use server controls.
+ $servercontrols = array(array(
+ 'oid' => LDAP_CONTROL_PAGEDRESULTS, 'value' => array(
+ 'size' => $this->config->pagesize, 'cookie' => $ldapcookie)));
+ }
}
if ($this->config->search_sub) {
// Use ldap_search to find first user from subtree.
- $ldapresult = ldap_search($ldapconnection, $context, $filter, array($this->config->user_attribute));
+ // TODO: Remove the old branch of code once PHP 7.3.0 becomes required (Moodle 4.1).
+ if (version_compare(PHP_VERSION, '7.3.0', '<')) {
+ $ldapresult = ldap_search($ldapconnection, $context, $filter, array($this->config->user_attribute));
+ } else {
+ $ldapresult = ldap_search($ldapconnection, $context, $filter, array($this->config->user_attribute),
+ 0, -1, -1, LDAP_DEREF_NEVER, $servercontrols);
+ }
} else {
// Search only in this context.
- $ldapresult = ldap_list($ldapconnection, $context, $filter, array($this->config->user_attribute));
+ // TODO: Remove the old branch of code once PHP 7.3.0 becomes required (Moodle 4.1).
+ if (version_compare(PHP_VERSION, '7.3.0', '<')) {
+ $ldapresult = ldap_list($ldapconnection, $context, $filter, array($this->config->user_attribute));
+ } else {
+ $ldapresult = ldap_list($ldapconnection, $context, $filter, array($this->config->user_attribute),
+ 0, -1, -1, LDAP_DEREF_NEVER, $servercontrols);
+ }
}
if(!$ldapresult) {
continue;
}
if ($ldappagedresults) {
- $pagedresp = ldap_control_paged_result_response($ldapconnection, $ldapresult, $ldapcookie);
- // Function ldap_control_paged_result_response() does not overwrite $ldapcookie if it fails, by
- // setting this to null we avoid an infinite loop.
- if ($pagedresp === false) {
- $ldapcookie = null;
+ // Get next server cookie to know if we'll need to continue searching.
+ $ldapcookie = '';
+ // TODO: Remove the old branch of code once PHP 7.3.0 becomes required (Moodle 4.1).
+ if (version_compare(PHP_VERSION, '7.3.0', '<')) {
+ // Before 7.3, use this function that was deprecated in PHP 7.4.
+ $pagedresp = ldap_control_paged_result_response($ldapconnection, $ldapresult, $ldapcookie);
+ // Function ldap_control_paged_result_response() does not overwrite $ldapcookie if it fails, by
+ // setting this to null we avoid an infinite loop.
+ if ($pagedresp === false) {
+ $ldapcookie = null;
+ }
+ } else {
+ // Get next cookie from controls.
+ ldap_parse_result($ldapconnection, $ldapresult, $errcode, $matcheddn,
+ $errmsg, $referrals, $controls);
+ if (isset($controls[LDAP_CONTROL_PAGEDRESULTS]['value']['cookie'])) {
+ $ldapcookie = $controls[LDAP_CONTROL_PAGEDRESULTS]['value']['cookie'];
+ }
}
}
if ($entry = @ldap_first_entry($ldapconnection, $ldapresult)) {
--
GitLab