diff options
Diffstat (limited to 'apps/user_ldap/lib/LDAP.php')
-rw-r--r-- | apps/user_ldap/lib/LDAP.php | 65 |
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) { |