aboutsummaryrefslogtreecommitdiffstats
path: root/apps/user_ldap/lib/LDAP.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/user_ldap/lib/LDAP.php')
-rw-r--r--apps/user_ldap/lib/LDAP.php65
1 files changed, 47 insertions, 18 deletions
diff --git a/apps/user_ldap/lib/LDAP.php b/apps/user_ldap/lib/LDAP.php
index 409c6ab2b09..bc91fb0ded9 100644
--- a/apps/user_ldap/lib/LDAP.php
+++ b/apps/user_ldap/lib/LDAP.php
@@ -33,11 +33,25 @@ namespace OCA\User_LDAP;
use OC\ServerNotAvailableException;
use OCA\User_LDAP\Exceptions\ConstraintViolationException;
+use OCA\User_LDAP\PagedResults\IAdapter;
+use OCA\User_LDAP\PagedResults\Php54;
+use OCA\User_LDAP\PagedResults\Php73;
class LDAP implements ILDAPWrapper {
protected $curFunc = '';
protected $curArgs = [];
+ /** @var IAdapter */
+ protected $pagedResultsAdapter;
+
+ public function __construct() {
+ if(version_compare(PHP_VERSION, '7.3', '<') === true) {
+ $this->pagedResultsAdapter = new Php54();
+ } else {
+ $this->pagedResultsAdapter = new Php73();
+ }
+ }
+
/**
* @param resource $link
* @param string $dn
@@ -64,17 +78,18 @@ class LDAP implements ILDAPWrapper {
return $this->invokeLDAPMethod('connect', $host);
}
- /**
- * @param resource $link
- * @param resource $result
- * @param string $cookie
- * @return bool|LDAP
- */
- public function controlPagedResultResponse($link, $result, &$cookie) {
- $this->preFunctionCall('ldap_control_paged_result_response',
- [$link, $result, $cookie]);
- $result = ldap_control_paged_result_response($link, $result, $cookie);
- $this->postFunctionCall();
+ public function controlPagedResultResponse($link, $result, &$cookie): bool {
+ $this->preFunctionCall(
+ $this->pagedResultsAdapter->getResponseCallFunc(),
+ $this->pagedResultsAdapter->getResponseCallArgs([$link, $result, &$cookie])
+ );
+
+ $result = $this->pagedResultsAdapter->responseCall($link);
+ $cookie = $this->pagedResultsAdapter->getCookie($link);
+
+ if ($this->isResultFalse($result)) {
+ $this->postFunctionCall();
+ }
return $result;
}
@@ -83,12 +98,23 @@ class LDAP implements ILDAPWrapper {
* @param LDAP $link
* @param int $pageSize
* @param bool $isCritical
- * @param string $cookie
* @return mixed|true
*/
- public function controlPagedResult($link, $pageSize, $isCritical, $cookie) {
- return $this->invokeLDAPMethod('control_paged_result', $link, $pageSize,
- $isCritical, $cookie);
+ public function controlPagedResult($link, $pageSize, $isCritical) {
+ $fn = $this->pagedResultsAdapter->getRequestCallFunc();
+ $this->pagedResultsAdapter->setRequestParameters($link, $pageSize, $isCritical);
+ if($fn === null) {
+ return true;
+ }
+
+ $this->preFunctionCall($fn, $this->pagedResultsAdapter->getRequestCallArgs($link));
+ $result = $this->pagedResultsAdapter->requestCall($link);
+
+ if ($this->isResultFalse($result)) {
+ $this->postFunctionCall();
+ }
+
+ return $result;
}
/**
@@ -180,12 +206,13 @@ class LDAP implements ILDAPWrapper {
* @return mixed
*/
public function read($link, $baseDN, $filter, $attr) {
- return $this->invokeLDAPMethod('read', $link, $baseDN, $filter, $attr);
+ $this->pagedResultsAdapter->setReadArgs($link, $baseDN, $filter, $attr);
+ return $this->invokeLDAPMethod('read', ...$this->pagedResultsAdapter->getReadArgs($link));
}
/**
* @param LDAP $link
- * @param string $baseDN
+ * @param string[] $baseDN
* @param string $filter
* @param array $attr
* @param int $attrsOnly
@@ -202,7 +229,9 @@ class LDAP implements ILDAPWrapper {
return true;
});
try {
- $result = $this->invokeLDAPMethod('search', $link, $baseDN, $filter, $attr, $attrsOnly, $limit);
+ $this->pagedResultsAdapter->setSearchArgs($link, $baseDN, $filter, $attr, $attrsOnly, $limit);
+ $result = $this->invokeLDAPMethod('search', ...$this->pagedResultsAdapter->getSearchArgs($link));
+
restore_error_handler();
return $result;
} catch (\Exception $e) {