summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap/lib/ldap.php
diff options
context:
space:
mode:
authorArthur Schiwon <blizzz@owncloud.com>2013-08-20 14:23:49 +0200
committerArthur Schiwon <blizzz@owncloud.com>2013-09-27 13:34:15 +0200
commit6e850e0bee24f1fcea6c59e074d576bee1ec3e5b (patch)
treedbbca2ccbe06b224912b546d2bc53724de08d14e /apps/user_ldap/lib/ldap.php
parent52454e39b7e04869f2cb3253d6978bbef5ece7fc (diff)
downloadnextcloud-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.php105
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));
}
}
}