diff --git a/README.md b/README.md index 7d4a4be..2ede9a9 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ You will need to set a few options inside your radicale config file. Example: [auth] type = radicale_auth_ldap -# LDAP server URL, with protocol and port +# LDAP server URL, with protocol and port (multiple servers can be separated by spaces) ldap_url = ldap://ldap:389 # LDAP base path diff --git a/radicale_auth_ldap/__init__.py b/radicale_auth_ldap/__init__.py index 55ed3d5..d5c79f0 100644 --- a/radicale_auth_ldap/__init__.py +++ b/radicale_auth_ldap/__init__.py @@ -37,7 +37,16 @@ import radicale_auth_ldap.ldap3imports class Auth(BaseAuth): def is_authenticated(self, user, password): """Check if ``user``/``password`` couple is valid.""" - SERVER = ldap3.Server(self.configuration.get("auth", "ldap_url")) + servers = self.configuration.get("auth", "ldap_url") + if ' ' in servers: # Handle for multiple LDAP server defined in ldap_url with space separation + servers = servers.split(' ') + self.logger.debug("Multiple servers: %s" % servers) + SERVER = ldap3.ServerPool(None) + for s in servers: + SERVER.add(ldap3.Server(s)) + else: # only one server is defined + self.logger.debug("Single server: %s" % servers) + SERVER = ldap3.Server(servers) BASE = self.configuration.get("auth", "ldap_base") ATTRIBUTE = self.configuration.get("auth", "ldap_attribute") FILTER = self.configuration.get("auth", "ldap_filter") @@ -45,7 +54,7 @@ class Auth(BaseAuth): PASSWORD = self.configuration.get("auth", "ldap_password") SCOPE = self.configuration.get("auth", "ldap_scope") SUPPORT_EXTENDED = self.configuration.getboolean("auth", "ldap_support_extended", fallback=True) - + if BINDDN and PASSWORD: conn = ldap3.Connection(SERVER, BINDDN, PASSWORD) else: