diff options
author | Arthur Schiwon <blizzz@owncloud.com> | 2013-08-20 14:23:49 +0200 |
---|---|---|
committer | Arthur Schiwon <blizzz@owncloud.com> | 2013-09-27 13:34:15 +0200 |
commit | 6e850e0bee24f1fcea6c59e074d576bee1ec3e5b (patch) | |
tree | dbbca2ccbe06b224912b546d2bc53724de08d14e /apps/user_ldap/lib/ldap.php | |
parent | 52454e39b7e04869f2cb3253d6978bbef5ece7fc (diff) | |
download | nextcloud-server-6e850e0bee24f1fcea6c59e074d576bee1ec3e5b.tar.gz nextcloud-server-6e850e0bee24f1fcea6c59e074d576bee1ec3e5b.zip |
LDAP: establish wrapper interface to allow proper mocking
Diffstat (limited to 'apps/user_ldap/lib/ldap.php')
-rw-r--r-- | apps/user_ldap/lib/ldap.php | 105 |
1 files changed, 86 insertions, 19 deletions
diff --git a/apps/user_ldap/lib/ldap.php b/apps/user_ldap/lib/ldap.php index 1de901aec12..0f082147b14 100644 --- a/apps/user_ldap/lib/ldap.php +++ b/apps/user_ldap/lib/ldap.php @@ -23,35 +23,89 @@ namespace OCA\user_ldap\lib; -class LDAP { +class LDAP implements ILDAPWrapper { protected $curFunc = ''; protected $curArgs = array(); - //Simple wrapper for the ldap functions - public function __call($name, $arguments) { - $func = 'ldap_' . $name; - if(function_exists($func)) { - $this->preFunctionCall($func, $arguments); - $result = call_user_func_array($func, $arguments); - $this->postFunctionCall(); - return $result; - } + public function bind($link, $dn, $password) { + return $this->invokeLDAPMethod('bind', $link, $dn, $password); } - public function control_paged_result_response($linkResource, $resultResource, &$cookie) { + public function connect($host, $port) { + return $this->invokeLDAPMethod('connect', $host, $port); + } + + public function controlPagedResultResponse($link, $result, &$cookie) { $this->preFunctionCall('ldap_control_paged_result_response', - array($linkResource, $resultResource, $cookie)); - $result = ldap_control_paged_result_response( - $linkResource, $resultResource, $cookie); + array($link, $result, $cookie)); + $result = ldap_control_paged_result_response($link, $result, $cookie); $this->postFunctionCall(); return $result; } + public function controlPagedResult($link, $pagesize, $isCritical, $cookie) { + return $this->invokeLDAPMethod('control_paged_result', $link, $pagesize, + $isCritical, $cookie); + } + + public function errno($link) { + return $this->invokeLDAPMethod('errno', $link); + } + + public function error($link) { + return $this->invokeLDAPMethod('error', $link); + } + + public function firstEntry($link, $result) { + return $this->invokeLDAPMethod('first_entry', $link, $result); + } + + public function getAttributes($link, $result) { + return $this->invokeLDAPMethod('get_attributes', $link, $result); + } + + public function getEntries($link, $result) { + return $this->invokeLDAPMethod('get_entries', $link, $result); + } + + public function read($link, $baseDN, $filter, $attr) { + return $this->invokeLDAPMethod('read', $link, $baseDN, $filter, $attr); + } + + public function search($link, $baseDN, $filter, $attr) { + return $this->invokeLDAPMethod('search', $link, $baseDN, + $filter, $attr); + } + + public function setOption($link, $option, $value) { + $this->invokeLDAPMethod('set_option', $link, $option, $value); + } + + public function sort($link, $result, $sortfilter) { + return $this->invokeLDAPMethod('sort', $link, $result, $sortfilter); + } + + public function startTls($link) { + return $this->invokeLDAPMethod('start_tls', $link); + } + + public function unbind($link) { + return $this->invokeLDAPMethod('unbind', $link); + } + + /** + * @brief Checks whether the server supports LDAP + * @return true if it the case, false otherwise + * */ public function areLDAPFunctionsAvailable() { return function_exists('ldap_connect'); } + /** + * @brief Checks whether PHP supports LDAP Paged Results + * @return true if it the case, false otherwise + * */ public function hasPagedResultSupport() { $hasSupport = function_exists('ldap_control_paged_result') && function_exists('ldap_control_paged_result_response'); @@ -59,8 +113,7 @@ class LDAP { } /** - * Checks whether the submitted parameter is a resource - * + * @brief Checks whether the submitted parameter is a resource * @param $resource the resource variable to check * @return true if it is a resource, false otherwise */ @@ -68,24 +121,38 @@ class LDAP { return is_resource($resource); } + private function invokeLDAPMethod() { + $arguments = func_get_args(); + $func = 'ldap_' . array_shift($arguments); + if(function_exists($func)) { + $this->preFunctionCall($func, $arguments); + $result = call_user_func_array($func, $arguments); + $this->postFunctionCall(); + return $result; + } + } + private function preFunctionCall($functionName, $args) { $this->curFunc = $functionName; $this->curArgs = $args; } private function postFunctionCall() { - if(is_resource($this->curArgs[0])) { + if($this->isResource($this->curArgs[0])) { $errorCode = ldap_errno($this->curArgs[0]); $errorMsg = ldap_error($this->curArgs[0]); if($errorCode !== 0) { if($this->curFunc === 'ldap_sort' && $errorCode === -4) { //You can safely ignore that decoding error. //… says https://bugs.php.net/bug.php?id=18023 - } else if($this->curFunc === 'ldap_get_entries' && $errorCode === -4) { + } else if($this->curFunc === 'ldap_get_entries' + && $errorCode === -4) { } else if ($errorCode === 32) { //for now } else { - throw new \Exception('LDAP error '.$errorMsg.' (' .$errorCode.') after calling '.$this->curFunc.' with arguments '.print_r($this->curArgs, true)); + throw new \Exception('LDAP error '.$errorMsg.' (' . + $errorCode.') after calling '.$this->curFunc. + ' with arguments '.print_r($this->curArgs, true)); } } } |