diff options
author | root <root@localhost.localdomain> | 2016-07-22 16:46:29 +0800 |
---|---|---|
committer | root <root@localhost.localdomain> | 2016-07-22 16:46:29 +0800 |
commit | 02ec8b1726eb867e88dd2c31a74a080e451a31d1 (patch) | |
tree | 2ca1a1c490003ed8524cd71363b5e2f9c38a70f7 /apps/user_ldap/lib | |
parent | 4b4990c48fd4c6841bde260b2b2e1bc665b46e1c (diff) | |
download | nextcloud-server-02ec8b1726eb867e88dd2c31a74a080e451a31d1.tar.gz nextcloud-server-02ec8b1726eb867e88dd2c31a74a080e451a31d1.zip |
New LDAPProvider for user_ldap
Diffstat (limited to 'apps/user_ldap/lib')
-rw-r--r-- | apps/user_ldap/lib/Access.php | 73 | ||||
-rw-r--r-- | apps/user_ldap/lib/Connection.php | 6 | ||||
-rw-r--r-- | apps/user_ldap/lib/Helper.php | 65 | ||||
-rw-r--r-- | apps/user_ldap/lib/IUserLDAP.php | 48 | ||||
-rw-r--r-- | apps/user_ldap/lib/Jobs/UpdateGroups.php | 2 | ||||
-rw-r--r-- | apps/user_ldap/lib/LDAPProvider.php | 187 | ||||
-rw-r--r-- | apps/user_ldap/lib/LDAPProviderFactory.php | 57 | ||||
-rw-r--r-- | apps/user_ldap/lib/Proxy.php | 2 | ||||
-rw-r--r-- | apps/user_ldap/lib/User_LDAP.php | 35 | ||||
-rw-r--r-- | apps/user_ldap/lib/User_Proxy.php | 32 |
10 files changed, 442 insertions, 65 deletions
diff --git a/apps/user_ldap/lib/Access.php b/apps/user_ldap/lib/Access.php index dabf243eda1..299ad581644 100644 --- a/apps/user_ldap/lib/Access.php +++ b/apps/user_ldap/lib/Access.php @@ -20,6 +20,7 @@ * @author Ralph Krimmel <rkrimme1@gwdg.de> * @author Renaud Fortier <Renaud.Fortier@fsaa.ulaval.ca> * @author Robin McCorkell <robin@mccorkell.me.uk> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -77,13 +78,19 @@ class Access extends LDAPUtility implements IUserTools { * @var AbstractMapping $userMapper */ protected $groupMapper; + + /** + * @var \OCA\User_LDAP\Helper + */ + private $helper; public function __construct(Connection $connection, ILDAPWrapper $ldap, - Manager $userManager) { + Manager $userManager, Helper $helper) { parent::__construct($ldap); $this->connection = $connection; $this->userManager = $userManager; $this->userManager->setLdapAccess($this); + $this->helper = $helper; } /** @@ -173,7 +180,7 @@ class Access extends LDAPUtility implements IUserTools { // (cf. #12306), 500 is default for paging and should work everywhere. $maxResults = $pagingSize > 20 ? $pagingSize : 500; $this->initPagedSearch($filter, array($dn), array($attr), $maxResults, 0); - $dn = $this->DNasBaseParameter($dn); + $dn = $this->helper->DNasBaseParameter($dn); $rr = @$this->ldap->read($cr, $dn, $filter, array($attr)); if(!$this->ldap->isResource($rr)) { if(!empty($attr)) { @@ -201,7 +208,7 @@ class Access extends LDAPUtility implements IUserTools { $values = array(); for($i=0;$i<$result[$attr]['count'];$i++) { if($this->resemblesDN($attr)) { - $values[] = $this->sanitizeDN($result[$attr][$i]); + $values[] = $this->helper->sanitizeDN($result[$attr][$i]); } elseif(strtolower($attr) === 'objectguid' || strtolower($attr) === 'guid') { $values[] = $this->convertObjectGUID2Str($result[$attr][$i]); } else { @@ -243,49 +250,6 @@ class Access extends LDAPUtility implements IUserTools { } /** - * sanitizes a DN received from the LDAP server - * @param array $dn the DN in question - * @return array the sanitized DN - */ - private function sanitizeDN($dn) { - //treating multiple base DNs - if(is_array($dn)) { - $result = array(); - foreach($dn as $singleDN) { - $result[] = $this->sanitizeDN($singleDN); - } - return $result; - } - - //OID sometimes gives back DNs with whitespace after the comma - // a la "uid=foo, cn=bar, dn=..." We need to tackle this! - $dn = preg_replace('/([^\\\]),(\s+)/u', '\1,', $dn); - - //make comparisons and everything work - $dn = mb_strtolower($dn, 'UTF-8'); - - //escape DN values according to RFC 2253 – this is already done by ldap_explode_dn - //to use the DN in search filters, \ needs to be escaped to \5c additionally - //to use them in bases, we convert them back to simple backslashes in readAttribute() - $replacements = array( - '\,' => '\5c2C', - '\=' => '\5c3D', - '\+' => '\5c2B', - '\<' => '\5c3C', - '\>' => '\5c3E', - '\;' => '\5c3B', - '\"' => '\5c22', - '\#' => '\5c23', - '(' => '\28', - ')' => '\29', - '*' => '\2A', - ); - $dn = str_replace(array_keys($replacements), array_values($replacements), $dn); - - return $dn; - } - - /** * returns a DN-string that is cleaned from not domain parts, e.g. * cn=foo,cn=bar,dc=foobar,dc=server,dc=org * becomes dc=foobar,dc=server,dc=org @@ -1071,10 +1035,10 @@ class Access extends LDAPUtility implements IUserTools { } if($key !== 'dn') { $selection[$i][$key] = $this->resemblesDN($key) ? - $this->sanitizeDN($item[$key]) + $this->helper->sanitizeDN($item[$key]) : $item[$key]; } else { - $selection[$i][$key] = [$this->sanitizeDN($item[$key])]; + $selection[$i][$key] = [$this->helper->sanitizeDN($item[$key])]; } } @@ -1298,7 +1262,7 @@ class Access extends LDAPUtility implements IUserTools { * @return bool */ public function areCredentialsValid($name, $password) { - $name = $this->DNasBaseParameter($name); + $name = $this->helper->DNasBaseParameter($name); $testConnection = clone $this->connection; $credentials = array( 'ldapAgentName' => $name, @@ -1570,15 +1534,6 @@ class Access extends LDAPUtility implements IUserTools { } /** - * converts a stored DN so it can be used as base parameter for LDAP queries, internally we store them for usage in LDAP filters - * @param string $dn the DN - * @return string - */ - private function DNasBaseParameter($dn) { - return str_ireplace('\\5c', '\\', $dn); - } - - /** * checks if the given DN is part of the given base DN(s) * @param string $dn the DN * @param string[] $bases array containing the allowed base DN or DNs @@ -1586,7 +1541,7 @@ class Access extends LDAPUtility implements IUserTools { */ public function isDNPartOfBase($dn, $bases) { $belongsToBase = false; - $bases = $this->sanitizeDN($bases); + $bases = $this->helper->sanitizeDN($bases); foreach($bases as $base) { $belongsToBase = true; diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php index 7bd5e97e4f4..7fb26526195 100644 --- a/apps/user_ldap/lib/Connection.php +++ b/apps/user_ldap/lib/Connection.php @@ -11,6 +11,7 @@ * @author Morris Jobke <hey@morrisjobke.de> * @author Robin Appelman <robin@icewind.nl> * @author Robin McCorkell <robin@mccorkell.me.uk> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -52,6 +53,8 @@ class Connection extends LDAPUtility { private $configID; private $configured = false; private $hasPagedResultSupport = true; + //whether connection should be kept on __destruct + private $dontDestruct = false; /** * @var bool runtime flag that indicates whether supported primary groups are available @@ -93,7 +96,7 @@ class Connection extends LDAPUtility { } public function __destruct() { - if($this->ldap->isResource($this->ldapConnectionRes)) { + if(!$this->dontDestruct && $this->ldap->isResource($this->ldapConnectionRes)) { @$this->ldap->unbind($this->ldapConnectionRes); }; } @@ -105,6 +108,7 @@ class Connection extends LDAPUtility { $this->configuration = new Configuration($this->configPrefix, !is_null($this->configID)); $this->ldapConnectionRes = null; + $this->dontDestruct = true; } /** diff --git a/apps/user_ldap/lib/Helper.php b/apps/user_ldap/lib/Helper.php index ccc1d2c0b44..90807a3c526 100644 --- a/apps/user_ldap/lib/Helper.php +++ b/apps/user_ldap/lib/Helper.php @@ -10,6 +10,7 @@ * @author Morris Jobke <hey@morrisjobke.de> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Vincent Petry <pvince81@owncloud.com> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -183,6 +184,70 @@ class Helper { return $domain; } + + /** + * + * Set the LDAPProvider in the config + * + */ + public function setLDAPProvider() { + $current = \OC::$server->getConfig()->getSystemValue('ldapProviderFactory', null); + if(is_null($current)) { + \OC::$server->getConfig()->setSystemValue('ldapProviderFactory', '\\OCA\\User_LDAP\\LDAPProviderFactory'); + } + } + + /** + * sanitizes a DN received from the LDAP server + * @param array $dn the DN in question + * @return array the sanitized DN + */ + public function sanitizeDN($dn) { + //treating multiple base DNs + if(is_array($dn)) { + $result = array(); + foreach($dn as $singleDN) { + $result[] = $this->sanitizeDN($singleDN); + } + return $result; + } + + //OID sometimes gives back DNs with whitespace after the comma + // a la "uid=foo, cn=bar, dn=..." We need to tackle this! + $dn = preg_replace('/([^\\\]),(\s+)/u', '\1,', $dn); + + //make comparisons and everything work + $dn = mb_strtolower($dn, 'UTF-8'); + + //escape DN values according to RFC 2253 – this is already done by ldap_explode_dn + //to use the DN in search filters, \ needs to be escaped to \5c additionally + //to use them in bases, we convert them back to simple backslashes in readAttribute() + $replacements = array( + '\,' => '\5c2C', + '\=' => '\5c3D', + '\+' => '\5c2B', + '\<' => '\5c3C', + '\>' => '\5c3E', + '\;' => '\5c3B', + '\"' => '\5c22', + '\#' => '\5c23', + '(' => '\28', + ')' => '\29', + '*' => '\2A', + ); + $dn = str_replace(array_keys($replacements), array_values($replacements), $dn); + + return $dn; + } + + /** + * converts a stored DN so it can be used as base parameter for LDAP queries, internally we store them for usage in LDAP filters + * @param string $dn the DN + * @return string + */ + public function DNasBaseParameter($dn) { + return str_ireplace('\\5c', '\\', $dn); + } /** * listens to a hook thrown by server2server sharing and replaces the given diff --git a/apps/user_ldap/lib/IUserLDAP.php b/apps/user_ldap/lib/IUserLDAP.php new file mode 100644 index 00000000000..c04e2ddffe7 --- /dev/null +++ b/apps/user_ldap/lib/IUserLDAP.php @@ -0,0 +1,48 @@ +<?php +/** + * @author Roger Szabo <roger.szabo@web.de> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\User_LDAP; + +interface IUserLDAP { + + //Functions used by LDAPProvider + + /** + * Return access for LDAP interaction. + * @param string $uid + * @return Access instance of Access for LDAP interaction + */ + public function getLDAPAccess($uid); + + /** + * Return a new LDAP connection for the specified user. + * @param string $uid + * @return resource of the LDAP connection + */ + public function getNewLDAPConnection($uid); + + /** + * Return the username for the given LDAP DN, if available. + * @param string $dn + * @return string|false with the name to use in ownCloud + */ + public function dn2UserName($dn); +} diff --git a/apps/user_ldap/lib/Jobs/UpdateGroups.php b/apps/user_ldap/lib/Jobs/UpdateGroups.php index 91d40d58742..047b95a6d9b 100644 --- a/apps/user_ldap/lib/Jobs/UpdateGroups.php +++ b/apps/user_ldap/lib/Jobs/UpdateGroups.php @@ -188,7 +188,7 @@ class UpdateGroups extends \OC\BackgroundJob\TimedJob { $dbc, \OC::$server->getUserManager()); $connector = new Connection($ldapWrapper, $configPrefixes[0]); - $ldapAccess = new Access($connector, $ldapWrapper, $userManager); + $ldapAccess = new Access($connector, $ldapWrapper, $userManager, $helper); $groupMapper = new GroupMapping($dbc); $userMapper = new UserMapping($dbc); $ldapAccess->setGroupMapper($groupMapper); diff --git a/apps/user_ldap/lib/LDAPProvider.php b/apps/user_ldap/lib/LDAPProvider.php new file mode 100644 index 00000000000..8d6b5600596 --- /dev/null +++ b/apps/user_ldap/lib/LDAPProvider.php @@ -0,0 +1,187 @@ +<?php +/** + * @author Roger Szabo <roger.szabo@web.de> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace OCA\User_LDAP; + +use OCP\IUserBackend; +use OCP\LDAP\ILDAPProvider; +use OCP\LDAP\IDeletionFlagSupport; +use OCP\IServerContainer; +use OCA\User_LDAP\User\DeletedUsersIndex; +use OCA\User_LDAP\Mapping\UserMapping; + +/** + * LDAP provider for pulic access to the LDAP backend. + */ +class LDAPProvider implements ILDAPProvider, IDeletionFlagSupport { + + private $backend; + private $logger; + private $helper; + private $deletedUsersIndex; + + /** + * Create new LDAPProvider + * @param \OCP\IServerContainer $serverContainer + * @throws \Exception if user_ldap app was not enabled + */ + public function __construct(IServerContainer $serverContainer, Helper $helper, DeletedUsersIndex $deletedUsersIndex) { + $this->logger = $serverContainer->getLogger(); + $this->helper = $helper; + $this->deletedUsersIndex = $deletedUsersIndex; + foreach ($serverContainer->getUserManager()->getBackends() as $backend){ + $this->logger->debug('instance '.get_class($backend).' backend.', ['app' => 'user_ldap']); + if ($backend instanceof IUserLDAP) { + $this->backend = $backend; + return; + } + } + throw new \Exception('To use the LDAPProvider, user_ldap app must be enabled'); + } + + /** + * Translate an ownCloud user id to LDAP DN + * @param string $uid ownCloud user id + * @return string with the LDAP DN + * @throws \Exception if translation was unsuccessful + */ + public function getUserDN($uid) { + if(!$this->backend->userExists($uid)){ + throw new \Exception('User id not found in LDAP'); + } + $result = $this->backend->getLDAPAccess($uid)->username2dn($uid); + if(!$result){ + throw new \Exception('Translation to LDAP DN unsuccessful'); + } + return $result; + } + + /** + * Translate a LDAP DN to an ownCloud user name. If there is no mapping between + * the DN and the user name, a new one will be created. + * @param string $dn LDAP DN + * @return string with the ownCloud user name + * @throws \Exception if translation was unsuccessful + */ + public function getUserName($dn) { + $result = $this->backend->dn2UserName($dn); + if(!$result){ + throw new \Exception('Translation to ownCloud user name unsuccessful'); + } + return $result; + } + + /** + * Convert a stored DN so it can be used as base parameter for LDAP queries. + * @param string $dn the DN in question + * @return string + */ + public function DNasBaseParameter($dn) { + return $this->helper->DNasBaseParameter($dn); + } + + /** + * Sanitize a DN received from the LDAP server. + * @param array $dn the DN in question + * @return array the sanitized DN + */ + public function sanitizeDN($dn) { + return $this->helper->sanitizeDN($dn); + } + + /** + * Return a new LDAP connection resource for the specified user. + * The connection must be closed manually. + * @param string $uid ownCloud user id + * @return resource of the LDAP connection + * @throws \Exception if user id was not found in LDAP + */ + public function getLDAPConnection($uid) { + if(!$this->backend->userExists($uid)){ + throw new \Exception('User id not found in LDAP'); + } + return $this->backend->getNewLDAPConnection($uid); + } + + /** + * Get the LDAP base for users. + * @param string $uid ownCloud user id + * @return string the base for users + * @throws \Exception if user id was not found in LDAP + */ + public function getLDAPBaseUsers($uid) { + if(!$this->backend->userExists($uid)){ + throw new \Exception('User id not found in LDAP'); + } + return $this->backend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_base_users']; + } + + /** + * Get the LDAP base for groups. + * @param string $uid ownCloud user id + * @return string the base for groups + * @throws \Exception if user id was not found in LDAP + */ + public function getLDAPBaseGroups($uid) { + if(!$this->backend->userExists($uid)){ + throw new \Exception('User id not found in LDAP'); + } + return $this->backend->getLDAPAccess($uid)->getConnection()->getConfiguration()['ldap_base_groups']; + } + + /** + * Clear the cache if a cache is used, otherwise do nothing. + * @param string $uid ownCloud user id + * @throws \Exception if user id was not found in LDAP + */ + public function clearCache($uid) { + if(!$this->backend->userExists($uid)){ + throw new \Exception('User id not found in LDAP'); + } + $this->backend->getLDAPAccess($uid)->getConnection()->clearCache(); + } + + /** + * Check whether a LDAP DN exists + * @param string $dn LDAP DN + * @return bool whether the DN exists + */ + public function dnExists($dn) { + $result = $this->backend->dn2UserName($dn); + return !$result ? false : true; + } + + /** + * Flag record for deletion. + * @param string $uid ownCloud user id + */ + public function flagRecord($uid) { + $this->deletedUsersIndex->markUser($uid); + } + + /** + * Unflag record for deletion. + * @param string $uid ownCloud user id + */ + public function unflagRecord($uid) { + //do nothing + } +} diff --git a/apps/user_ldap/lib/LDAPProviderFactory.php b/apps/user_ldap/lib/LDAPProviderFactory.php new file mode 100644 index 00000000000..6525d14d3fd --- /dev/null +++ b/apps/user_ldap/lib/LDAPProviderFactory.php @@ -0,0 +1,57 @@ +<?php +/** + * @author Roger Szabo <roger.szabo@web.de> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ +namespace OCA\User_LDAP; + +use OCP\LDAP\ILDAPProviderFactory; +use OCP\IServerContainer; +use OCA\User_LDAP\User\DeletedUsersIndex; +use OCA\User_LDAP\Mapping\UserMapping; + +class LDAPProviderFactory implements ILDAPProviderFactory { + /** + * Server container + * + * @var IServerContainer + */ + private $serverContainer; + + /** + * Constructor for the LDAP provider factory + * + * @param IServerContainer $serverContainer server container + */ + public function __construct(IServerContainer $serverContainer) { + $this->serverContainer = $serverContainer; + } + + /** + * creates and returns an instance of the ILDAPProvider + * + * @return OCP\LDAP\ILDAPProvider + */ + public function getLDAPProvider() { + $dbConnection = $this->serverContainer->getDatabaseConnection(); + $userMapping = new UserMapping($dbConnection); + return new LDAPProvider($this->serverContainer, new Helper(), + new DeletedUsersIndex($this->serverContainer->getConfig(), + $dbConnection, $userMapping)); + } +} diff --git a/apps/user_ldap/lib/Proxy.php b/apps/user_ldap/lib/Proxy.php index 07cc1ea0e8c..db1c761656f 100644 --- a/apps/user_ldap/lib/Proxy.php +++ b/apps/user_ldap/lib/Proxy.php @@ -77,7 +77,7 @@ abstract class Proxy { $userManager = new Manager($ocConfig, $fs, $log, $avatarM, new \OCP\Image(), $db, $coreUserManager); $connector = new Connection($this->ldap, $configPrefix); - $access = new Access($connector, $this->ldap, $userManager); + $access = new Access($connector, $this->ldap, $userManager, new Helper()); $access->setUserMapper($userMap); $access->setGroupMapper($groupMap); self::$accesses[$configPrefix] = $access; diff --git a/apps/user_ldap/lib/User_LDAP.php b/apps/user_ldap/lib/User_LDAP.php index a2a65bb8406..712cc9601dd 100644 --- a/apps/user_ldap/lib/User_LDAP.php +++ b/apps/user_ldap/lib/User_LDAP.php @@ -15,6 +15,7 @@ * @author Robin McCorkell <robin@mccorkell.me.uk> * @author Thomas Müller <thomas.mueller@tmit.eu> * @author Tom Needham <tom@owncloud.com> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -39,7 +40,7 @@ use OCA\User_LDAP\User\OfflineUser; use OCA\User_LDAP\User\User; use OCP\IConfig; -class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserInterface { +class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserInterface, IUserLDAP { /** @var string[] $homesToKill */ protected $homesToKill = array(); @@ -90,6 +91,16 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn return false; } } + + /** + * returns the username for the given LDAP DN, if available + * + * @param string $dn + * @return string|false with the name to use in ownCloud + */ + public function dn2UserName($dn) { + return $this->access->dn2username($dn); + } /** * returns an LDAP record based on a given login name @@ -462,5 +473,25 @@ class User_LDAP extends BackendUtility implements \OCP\IUserBackend, \OCP\UserIn public function getBackendName(){ return 'LDAP'; } - + + /** + * Return access for LDAP interaction. + * @param string $uid + * @return Access instance of Access for LDAP interaction + */ + public function getLDAPAccess($uid) { + return $this->access; + } + + /** + * Return LDAP connection resource from a cloned connection. + * The cloned connection needs to be closed manually. + * of the current access. + * @param string $uid + * @return resource of the LDAP connection + */ + public function getNewLDAPConnection($uid) { + $connection = clone $this->access->getConnection(); + return $connection->getConnectionResource(); + } } diff --git a/apps/user_ldap/lib/User_Proxy.php b/apps/user_ldap/lib/User_Proxy.php index c86d4f29ec4..8537d22a43b 100644 --- a/apps/user_ldap/lib/User_Proxy.php +++ b/apps/user_ldap/lib/User_Proxy.php @@ -9,6 +9,7 @@ * @author Morris Jobke <hey@morrisjobke.de> * @author Robin McCorkell <robin@mccorkell.me.uk> * @author Thomas Müller <thomas.mueller@tmit.eu> + * @author Roger Szabo <roger.szabo@web.de> * * @license AGPL-3.0 * @@ -31,7 +32,7 @@ namespace OCA\User_LDAP; use OCA\User_LDAP\User\User; use OCP\IConfig; -class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface { +class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface, IUserLDAP { private $backends = array(); private $refBackend = null; @@ -193,6 +194,17 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface $id = 'LOGINNAME,' . $loginName; return $this->handleRequest($id, 'loginName2UserName', array($loginName)); } + + /** + * returns the username for the given LDAP DN, if available + * + * @param string $dn + * @return string|false with the name to use in ownCloud + */ + public function dn2UserName($dn) { + $id = 'DN,' . $dn; + return $this->handleRequest($id, 'dn2UserName', array($dn)); + } /** * get the user's home directory @@ -273,4 +285,22 @@ class User_Proxy extends Proxy implements \OCP\IUserBackend, \OCP\UserInterface return $users; } + /** + * Return access for LDAP interaction. + * @param string $uid + * @return Access instance of Access for LDAP interaction + */ + public function getLDAPAccess($uid) { + return $this->handleRequest($uid, 'getLDAPAccess', array($uid)); + } + + /** + * Return a new LDAP connection for the specified user. + * The connection needs to be closed manually. + * @param string $uid + * @return resource of the LDAP connection + */ + public function getNewLDAPConnection($uid) { + return $this->handleRequest($uid, 'getNewLDAPConnection', array($uid)); + } } |