summaryrefslogtreecommitdiffstats
path: root/apps/user_ldap
diff options
context:
space:
mode:
authorVincent Van Houtte <vvh@aplusv.be>2022-09-05 14:39:03 +0200
committerVincent Van Houtte <vvh@aplusv.be>2022-09-09 16:53:05 +0200
commitc323022d06a2fb76745e626452ea035121f35ca9 (patch)
treed5cc951f43cd6d3b8ef815b1982cfd2a8722aeea /apps/user_ldap
parentf56ecf92426026c913497bea9f7ca99e8d3ac631 (diff)
downloadnextcloud-server-c323022d06a2fb76745e626452ea035121f35ca9.tar.gz
nextcloud-server-c323022d06a2fb76745e626452ea035121f35ca9.zip
Add ldap-unix-socket support - squashed commits to files Connection.php, Configuration.php, Wizard.php, LDAP.php and view.js
Signed-off-by: Vincent Van Houtte <vvh@aplusv.be>
Diffstat (limited to 'apps/user_ldap')
-rw-r--r--apps/user_ldap/js/wizard/view.js6
-rw-r--r--apps/user_ldap/lib/Configuration.php7
-rw-r--r--apps/user_ldap/lib/Connection.php9
-rw-r--r--apps/user_ldap/lib/LDAP.php2
-rw-r--r--apps/user_ldap/lib/Wizard.php140
5 files changed, 97 insertions, 67 deletions
diff --git a/apps/user_ldap/js/wizard/view.js b/apps/user_ldap/js/wizard/view.js
index 1a89eba3515..30a00d614cc 100644
--- a/apps/user_ldap/js/wizard/view.js
+++ b/apps/user_ldap/js/wizard/view.js
@@ -86,7 +86,8 @@ OCA = OCA || {};
var agent = view.configModel.configuration.ldap_dn;
var pwd = view.configModel.configuration.ldap_agent_password;
- if((host && port && base) && ((!agent && !pwd) || (agent && pwd))) {
+ if(((host && port && base) || (host && base && host.indexOf('ldapi://') > -1 ))
+ && ((!agent && !pwd) || (agent && pwd))) {
view.enableTabs();
} else {
view.disableTabs();
@@ -107,7 +108,8 @@ OCA = OCA || {};
var userFilter = this.configModel.configuration.ldap_userlist_filter;
var loginFilter = this.configModel.configuration.ldap_login_filter;
- if(host && port && base && userFilter && loginFilter) {
+ if((host && port && base && userFilter && loginFilter) ||
+ (host && base && host.indexOf('ldapi://') > -1 && userFilter && loginFilter)) {
this.configModel.requestConfigurationTest();
} else {
this._updateStatusIndicator(this.STATUS_INCOMPLETE);
diff --git a/apps/user_ldap/lib/Configuration.php b/apps/user_ldap/lib/Configuration.php
index c16823d39ee..76766df7134 100644
--- a/apps/user_ldap/lib/Configuration.php
+++ b/apps/user_ldap/lib/Configuration.php
@@ -559,4 +559,11 @@ class Configuration {
}
return $defaultAttributes;
}
+
+ /**
+ * Returns TRUE if the ldapHost variable starts with 'ldapi://'
+ */
+ public function usesLdapi(): bool {
+ return (substr($this->config['ldapHost'], 0, strlen('ldapi://')) === 'ldapi://');
+ }
}
diff --git a/apps/user_ldap/lib/Connection.php b/apps/user_ldap/lib/Connection.php
index 89b58b7ebfd..60f9faa4d33 100644
--- a/apps/user_ldap/lib/Connection.php
+++ b/apps/user_ldap/lib/Connection.php
@@ -18,6 +18,7 @@
* @author root <root@localhost.localdomain>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
* @author Xuanwo <xuanwo@yunify.com>
+ * @author Vincent Van Houtte <vvh@aplusv.be>
*
* @license AGPL-3.0
*
@@ -454,8 +455,14 @@ class Connection extends LDAPUtility {
(string)$this->configPrefix .'): ';
//options that shall not be empty
- $options = ['ldapHost', 'ldapPort', 'ldapUserDisplayName',
+ $options = ['ldapHost', 'ldapUserDisplayName',
'ldapGroupDisplayName', 'ldapLoginFilter'];
+
+ //ldapPort should not be empty either unless ldapHost is pointing to a socket
+ if (!$this->configuration->usesLdapi()) {
+ $options[] = 'ldapPort';
+ }
+
foreach ($options as $key) {
$val = $this->configuration->$key;
if (empty($val)) {
diff --git a/apps/user_ldap/lib/LDAP.php b/apps/user_ldap/lib/LDAP.php
index 545a09ca464..25cd0954295 100644
--- a/apps/user_ldap/lib/LDAP.php
+++ b/apps/user_ldap/lib/LDAP.php
@@ -76,7 +76,7 @@ class LDAP implements ILDAPWrapper {
if (strpos($host, '://') === false) {
$host = 'ldap://' . $host;
}
- if (strpos($host, ':', strpos($host, '://') + 1) === false) {
+ if (strpos($host, ':', strpos($host, '://') + 1) === false && !empty($port)) {
//ldap_connect ignores port parameter when URLs are passed
$host .= ':' . $port;
}
diff --git a/apps/user_ldap/lib/Wizard.php b/apps/user_ldap/lib/Wizard.php
index e85e65a7d70..dcf5f378516 100644
--- a/apps/user_ldap/lib/Wizard.php
+++ b/apps/user_ldap/lib/Wizard.php
@@ -19,6 +19,7 @@
* @author Tobias Perschon <tobias@perschon.at>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
* @author Xuanwo <xuanwo@yunify.com>
+ * @author Vincent Van Houtte <vvh@aplusv.be>
*
* @license AGPL-3.0
*
@@ -97,7 +98,10 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function countEntries(string $filter, string $type): int {
- $reqs = ['ldapHost', 'ldapPort', 'ldapBase'];
+ $reqs = ['ldapHost', 'ldapBase'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
if ($type === 'users') {
$reqs[] = 'ldapUserFilter';
}
@@ -196,11 +200,11 @@ class Wizard extends LDAPUtility {
* @return int|bool
*/
public function countUsersWithAttribute($attr, $existsCheck = false) {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- 'ldapUserFilter',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
@@ -221,11 +225,11 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function detectUserDisplayNameAttribute() {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- 'ldapUserFilter',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
@@ -263,11 +267,11 @@ class Wizard extends LDAPUtility {
* @return WizardResult|bool
*/
public function detectEmailAttribute() {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- 'ldapUserFilter',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
@@ -312,11 +316,11 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function determineAttributes() {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- 'ldapUserFilter',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
@@ -341,11 +345,11 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
private function getUserAttributes() {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- 'ldapUserFilter',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
$cr = $this->getConnection();
@@ -397,10 +401,11 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
private function determineGroups($dbKey, $confKey, $testMemberOf = true) {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
$cr = $this->getConnection();
@@ -477,10 +482,11 @@ class Wizard extends LDAPUtility {
}
public function determineGroupMemberAssoc() {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapGroupFilter',
- ])) {
+ $reqs = ['ldapHost', 'ldapGroupFilter'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
$attribute = $this->detectGroupMemberAssoc();
@@ -499,10 +505,11 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function determineGroupObjectClasses() {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
$cr = $this->getConnection();
@@ -526,10 +533,11 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function determineUserObjectClasses() {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
$cr = $this->getConnection();
@@ -556,10 +564,11 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function getGroupFilter() {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
//make sure the use display name is set
@@ -580,10 +589,11 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function getUserListFilter() {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
//make sure the use display name is set
@@ -606,11 +616,11 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function getUserLoginFilter() {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- 'ldapUserFilter',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
@@ -629,11 +639,11 @@ class Wizard extends LDAPUtility {
* @throws \Exception
*/
public function testLoginName($loginName) {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- 'ldapBase',
- 'ldapLoginFilter',
- ])) {
+ $reqs = ['ldapHost', 'ldapBase', 'ldapUserFilter'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
@@ -722,9 +732,11 @@ class Wizard extends LDAPUtility {
* @return WizardResult|false WizardResult on success, false otherwise
*/
public function guessBaseDN() {
- if (!$this->checkRequirements(['ldapHost',
- 'ldapPort',
- ])) {
+ $reqs = ['ldapHost'];
+ if (!$this->configuration->usesLdapi()) {
+ $reqs[] = 'ldapPort';
+ }
+ if (!$this->checkRequirements($reqs)) {
return false;
}
@@ -1366,6 +1378,8 @@ class Wizard extends LDAPUtility {
$portSettings[] = ['port' => $port, 'tls' => true];
}
$portSettings[] = ['port' => $port, 'tls' => false];
+ } elseif ($this->configuration->usesLdapi()) {
+ $portSettings[] = ['port' => '', 'tls' => false];
}
//default ports