Juan Hernandez has uploaded a new change for review.

Change subject: [WIP] Add temporary LDAP authenticator
......................................................................

[WIP] Add temporary LDAP authenticator

This change adds a new temporary LDAP authenticator provider intended to
serve as a bridge between the new authenticator interface introduced in
a previous change and the existing LDAP infrastructure. This bridge will
exist while the LDAP engine is migrated step by step to use the new
interfaces.

Change-Id: I9a0374d788f46ad7989cad5200babe03213b44aa
Signed-off-by: Juan Hernandez <juan.hernan...@redhat.com>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/auth/ldap/ProvisionalLdapAuthenticator.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/auth/ldap/ProvisionalLdapAuthenticatorProvider.java
M 
backend/manager/modules/bll/src/main/resources/META-INF/services/org.ovirt.engine.core.bll.auth.AuthenticatorSpi
3 files changed, 113 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/62/15662/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/auth/ldap/ProvisionalLdapAuthenticator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/auth/ldap/ProvisionalLdapAuthenticator.java
new file mode 100644
index 0000000..94babb7
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/auth/ldap/ProvisionalLdapAuthenticator.java
@@ -0,0 +1,72 @@
+package org.ovirt.engine.core.bll.auth.ldap;
+
+import org.apache.log4j.Logger;
+import org.ovirt.engine.core.bll.adbroker.AdActionType;
+import org.ovirt.engine.core.bll.adbroker.LdapBroker;
+import org.ovirt.engine.core.bll.adbroker.LdapFactory;
+import org.ovirt.engine.core.bll.adbroker.LdapReturnValueBase;
+import org.ovirt.engine.core.bll.adbroker.LdapUserPasswordBaseParameters;
+import org.ovirt.engine.core.bll.adbroker.UserAuthenticationResult;
+import org.ovirt.engine.core.bll.auth.Authenticator;
+
+/**
+ * This authenticator implementation is a bridge between the new directory
+ * interface and the existing LDAP infrastructure. It will exist only while the
+ * engine is migrated to use the new authenticator interface, then it will be
+ * removed.
+ */
+public class ProvisionalLdapAuthenticator implements Authenticator {
+    // The log:
+    private Logger log = Logger.getLogger(ProvisionalLdapAuthenticator.class);
+
+    // The name of the domain:
+    private String domain;
+
+    public ProvisionalLdapAuthenticator(String domain) {
+        this.domain = domain;
+    }
+
+    @Override
+    public String getName() {
+        return domain;
+    }
+
+    @Override
+    public boolean authenticate(String name, Object credentials) {
+        // Check that the provided credential is a string, as the only
+        // credentials that we that we support in this authenticator is a
+        // password contained in a string:
+        if (credentials == null) {
+            log.error(
+                "Can't authenticate user \"" + name + "\", no credentials " +
+                "have been provided."
+            );
+            return false;
+        }
+        String password = null;
+        if (!(credentials instanceof String)) {
+            log.error(
+                "Can't authenticate user \"" + name + "\", the credentials " +
+                "should be a password contained in a string but they are of " +
+                "type \"" + credentials.getClass().getName() + "\"."
+            );
+            return false;
+        }
+
+        // Perform the authentication using the old mechanism:
+        LdapBroker ldapBroker = LdapFactory.getInstance(domain);
+        LdapReturnValueBase ldapResult = ldapBroker.RunAdAction(
+            AdActionType.AuthenticateUser,
+            new LdapUserPasswordBaseParameters(domain, name, password)
+        );
+        UserAuthenticationResult authResult = (UserAuthenticationResult) 
ldapResult.getReturnValue();
+        if (authResult != null && authResult.isSuccessful()) {
+            log.info("The user \"" + name + "\" has been successfully 
authenticated.");
+            return true;
+        }
+        else {
+            log.info("The user \"" + name + "\" failed to authenticate.");
+            return false;
+        }
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/auth/ldap/ProvisionalLdapAuthenticatorProvider.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/auth/ldap/ProvisionalLdapAuthenticatorProvider.java
new file mode 100644
index 0000000..a58e7cf
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/auth/ldap/ProvisionalLdapAuthenticatorProvider.java
@@ -0,0 +1,40 @@
+package org.ovirt.engine.core.bll.auth.ldap;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.core.bll.adbroker.LdapBrokerUtils;
+import org.ovirt.engine.core.bll.auth.Authenticator;
+import org.ovirt.engine.core.bll.auth.AuthenticatorSpi;
+
+public class ProvisionalLdapAuthenticatorProvider implements AuthenticatorSpi {
+    // The list of authenticators managed by this implementation (will be 
lazily
+    // initialized later:
+    private volatile List<Authenticator> authenticators;
+
+    @Override
+    public List<Authenticator> getAuthenticators() {
+        if (authenticators == null) {
+            synchronized (ProvisionalLdapAuthenticatorProvider.class) {
+                if (authenticators == null) {
+                    authenticators = loadAuthenticators();
+                }
+            }
+        }
+        return authenticators;
+    }
+
+    /**
+     * Get the list of domains using the old mechanism, excluding the internal
+     * domain, then create an implementation for each one.
+     */
+    private List<Authenticator> loadAuthenticators() {
+        List<String> domains = LdapBrokerUtils.getDomainsList(true);
+        List<Authenticator> result = new 
ArrayList<Authenticator>(domains.size());
+        for (String domain : domains) {
+            ProvisionalLdapAuthenticator authenticator = new 
ProvisionalLdapAuthenticator(domain);
+            result.add(authenticator);
+        }
+        return result;
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/resources/META-INF/services/org.ovirt.engine.core.bll.auth.AuthenticatorSpi
 
b/backend/manager/modules/bll/src/main/resources/META-INF/services/org.ovirt.engine.core.bll.auth.AuthenticatorSpi
index fd1091e..c59b9af 100644
--- 
a/backend/manager/modules/bll/src/main/resources/META-INF/services/org.ovirt.engine.core.bll.auth.AuthenticatorSpi
+++ 
b/backend/manager/modules/bll/src/main/resources/META-INF/services/org.ovirt.engine.core.bll.auth.AuthenticatorSpi
@@ -1 +1,2 @@
 org.ovirt.engine.core.bll.auth.internal.InternalAuthenticatorProvider
+org.ovirt.engine.core.bll.auth.ldap.ProvisionalLdapAuthenticatorProvider


-- 
To view, visit http://gerrit.ovirt.org/15662
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9a0374d788f46ad7989cad5200babe03213b44aa
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Juan Hernandez <juan.hernan...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to