aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/user_ldap/ajax/testConfiguration.php17
-rw-r--r--apps/user_ldap/js/wizard/wizardTabGeneric.js6
-rw-r--r--apps/user_ldap/lib/ldap.php2
3 files changed, 25 insertions, 0 deletions
diff --git a/apps/user_ldap/ajax/testConfiguration.php b/apps/user_ldap/ajax/testConfiguration.php
index 289957764a1..f5fd5f23b87 100644
--- a/apps/user_ldap/ajax/testConfiguration.php
+++ b/apps/user_ldap/ajax/testConfiguration.php
@@ -39,6 +39,23 @@ try {
if ($connection->setConfiguration($_POST)) {
//Configuration is okay
if ($connection->bind()) {
+ /*
+ * This shiny if block is an ugly hack to find out whether anonymous
+ * bind is possible on AD or not. Because AD happily and constantly
+ * replies with success to any anonymous bind request, we need to
+ * fire up a broken operation. If AD does not allow anonymous bind,
+ * it will end up with LDAP error code 1 which is turned into an
+ * exception by the LDAP wrapper. We catch this. Other cases may
+ * pass (like e.g. expected syntax error).
+ */
+ try {
+ $ldapWrapper->read($connection->getConnectionResource(), 'neverwhere', 'objectClass=*', array('dn'));
+ } catch (\Exception $e) {
+ if($e->getCode() === 1) {
+ OCP\JSON::error(array('message' => $l->t('The configuration is invalid: anonymous bind is not allowed.')));
+ exit;
+ }
+ }
OCP\JSON::success(array('message'
=> $l->t('The configuration is valid and the connection could be established!')));
} else {
diff --git a/apps/user_ldap/js/wizard/wizardTabGeneric.js b/apps/user_ldap/js/wizard/wizardTabGeneric.js
index c272df7e3cc..b755f3ca060 100644
--- a/apps/user_ldap/js/wizard/wizardTabGeneric.js
+++ b/apps/user_ldap/js/wizard/wizardTabGeneric.js
@@ -74,7 +74,13 @@ OCA = OCA || {};
&& !this.configModel.configuration.ldap_dn)
{
message = t('user_ldap', 'Anonymous bind is not allowed. Please provide a User DN and Password.');
+ } else if (message === 'LDAP Operations error'
+ && !this.configModel.configuration.ldap_dn
+ && !this.configModel.configuration.ldap_agent_password)
+ {
+ message = t('user_ldap', 'LDAP Operations error. Anonymous bind might not be allowed.');
}
+
return message;
},
diff --git a/apps/user_ldap/lib/ldap.php b/apps/user_ldap/lib/ldap.php
index 48852a3a491..8d2c493a4dc 100644
--- a/apps/user_ldap/lib/ldap.php
+++ b/apps/user_ldap/lib/ldap.php
@@ -289,6 +289,8 @@ class LDAP implements ILDAPWrapper {
throw new ServerNotAvailableException('Lost connection to LDAP server.');
} else if ($errorCode === 48) {
throw new \Exception('LDAP authentication method rejected');
+ } else if ($errorCode === 1) {
+ throw new \Exception('LDAP Operations error', $errorCode);
} else {
\OCP\Util::writeLog('user_ldap',
'LDAP error '.$errorMsg.' (' .