Yair Zaslavsky has uploaded a new change for review. Change subject: aaa: Change builtin authenticators and directories initialization ......................................................................
aaa: Change builtin authenticators and directories initialization The following patch changes the logic in which the builtin authenticators and directories are initialized : Properties objects are created them and passed to ExtensionManager for loading Change-Id: Id8513cb992c5becef7e83c04a8da8bc7f1622348 Topic: AAA Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java M backend/manager/modules/extensions-manager/src/main/java/org/ovirt/engine/core/extensions/mgr/ExtensionManager.java 2 files changed, 95 insertions(+), 69 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/41/25741/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java index 921b420..7307a56 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/InitBackendServicesOnStartupBean.java @@ -1,9 +1,7 @@ package org.ovirt.engine.core.bll; import java.util.ArrayList; -import java.util.EnumMap; import java.util.List; -import java.util.Map; import java.util.Properties; import javax.annotation.PostConstruct; @@ -11,17 +9,10 @@ import javax.ejb.Singleton; import javax.ejb.Startup; -import org.ovirt.engine.core.aaa.AuthenticationProfile; import org.ovirt.engine.core.aaa.AuthenticationProfileRepository; -import org.ovirt.engine.core.aaa.Authenticator; -import org.ovirt.engine.core.aaa.Directory; -import org.ovirt.engine.extensions.aaa.builtin.internal.InternalAuthenticator; -import org.ovirt.engine.extensions.aaa.builtin.internal.InternalDirectory; -import org.ovirt.engine.extensions.aaa.builtin.kerberosldap.KerberosLdapAuthenticator; -import org.ovirt.engine.extensions.aaa.builtin.kerberosldap.KerberosLdapDirectory; import org.ovirt.engine.extensions.aaa.builtin.kerberosldap.KerberosManager; -import org.ovirt.engine.extensions.aaa.builtin.kerberosldap.LdapBrokerUtils; import org.ovirt.engine.extensions.aaa.builtin.kerberosldap.UsersDomainsCacheManagerService; +import org.ovirt.engine.extensions.aaa.builtin.kerberosldap.LdapBrokerUtils; import org.ovirt.engine.core.bll.dwh.DwhHeartBeat; import org.ovirt.engine.core.bll.gluster.GlusterJobsManager; import org.ovirt.engine.core.bll.job.ExecutionHandler; @@ -32,10 +23,8 @@ import org.ovirt.engine.core.bll.storage.StoragePoolStatusHandler; import org.ovirt.engine.core.common.action.MigrateVmParameters; import org.ovirt.engine.core.common.action.VdcActionType; -import org.ovirt.engine.core.common.config.Config; -import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.compat.Guid; -import org.ovirt.engine.api.extensions.Extension.ExtensionProperties; +import org.ovirt.engine.core.extensions.mgr.ExtensionManager; import org.ovirt.engine.core.utils.customprop.DevicePropertiesUtils; import org.ovirt.engine.core.utils.customprop.VmPropertiesUtils; import org.ovirt.engine.core.utils.exceptions.InitializationException; @@ -65,55 +54,11 @@ // Create authentication profiles for all the domains that exist in the database: // TODO: remove this later, and rely only on the custom and built in extensions directories configuration - InternalAuthenticator internalAuthenticator = new InternalAuthenticator(); - Map<ExtensionProperties, Object> internalAuthContext = new EnumMap<>(ExtensionProperties.class); - Properties internalAuthProps = new Properties(); - String internalProfileName = Config.<String> getValue(ConfigValues.AdminDomain).trim(); - internalAuthProps.put("ovirt.engine.aaa.authn.profile.name", internalProfileName); - internalAuthContext.put(ExtensionProperties.CONFIGURATION, internalAuthProps); - internalAuthContext.put(ExtensionProperties.NAME, internalProfileName); - internalAuthenticator.setContext(internalAuthContext); - internalAuthenticator.init(); - InternalDirectory internalDirectory = new InternalDirectory(); - Map<ExtensionProperties, Object> internalDirContext = new EnumMap<>(ExtensionProperties.class); - Properties internalDirProps = new Properties(); - internalDirProps.put("ovirt.engine.aaa.authz.profile.name", internalProfileName); - internalDirContext.put(ExtensionProperties.CONFIGURATION, internalDirProps); - internalDirContext.put(ExtensionProperties.NAME, internalProfileName); - internalDirectory.setContext(internalDirContext); - internalDirectory.init(); - - AuthenticationProfileRepository.getInstance().registerProfile( - new AuthenticationProfile(internalAuthenticator, - internalDirectory) - ); - for (String domain : LdapBrokerUtils.getDomainsList(true)) { - Map<ExtensionProperties, Object> dirContext = new EnumMap<>(ExtensionProperties.class); - Properties dirProps = new Properties(); - dirProps.put("ovirt.engine.aaa.authz.profile.name", domain); - dirContext.put(ExtensionProperties.CONFIGURATION, dirProps); - dirContext.put(ExtensionProperties.NAME, domain); - Directory directory = new KerberosLdapDirectory(); - directory.setContext(dirContext); - directory.init(); - - Map<ExtensionProperties, Object> authContext = new EnumMap<>(ExtensionProperties.class); - Properties authProps = new Properties(); - authProps.put("ovirt.engine.aaa.authn.profile.name", domain); - authContext.put(ExtensionProperties.CONFIGURATION, authProps); - authContext.put(ExtensionProperties.NAME, domain); - Authenticator authenticator = new KerberosLdapAuthenticator(); - authenticator.setContext(authContext); - authenticator.init(); - - AuthenticationProfile profile = new AuthenticationProfile(authenticator, directory); - - AuthenticationProfileRepository.getInstance().registerProfile(profile); - } - + List<Properties> configurations = createInternalConfigurations(); + configurations.addAll(createKerberosLdapConfigurations()); + ExtensionManager.getInstance().load(configurations); AuthenticationProfileRepository.getInstance(); - KerberosManager.getInstance(); UsersDomainsCacheManagerService.getInstance().init(); DbUserCacheManager.getInstance().init(); @@ -164,4 +109,55 @@ new DwhHeartBeat().init(); } + private List<Properties> createInternalConfigurations() { + List<Properties> results = new ArrayList<>(); + Properties authConfig = new Properties(); + authConfig.put(ExtensionManager.CLASS, "org.ovirt.extensions.builtin.ldapkerberos.LdapKerberosAuthenticator"); + authConfig.put(ExtensionManager.PROVIDES, "org.ovirt.engine.core.authentication"); + authConfig.put(ExtensionManager.ENABLED, true); + authConfig.put(ExtensionManager.MODULE, "org.ovirt.engine.extensions.builtin"); + authConfig.put(ExtensionManager.NAME, "builtin-authn-internal"); + authConfig.put("org.ovirt.engine.aaa.authn.profile.name", "internal"); + authConfig.put("ovirt.engine.aaa.authn.authz.plugin", "builitin-authz-internal"); + results.add(authConfig); + + Properties dirConfig = new Properties(); + dirConfig.put(ExtensionManager.CLASS, "org.ovirt.extensions.builtin.ldapkerberos.LdapKerberosDirectory"); + dirConfig.put(ExtensionManager.PROVIDES, "org.ovirt.engine.core.authorization"); + dirConfig.put(ExtensionManager.ENABLED, true); + dirConfig.put(ExtensionManager.MODULE, "org.ovirt.engine.extensions.builtin"); + dirConfig.put(ExtensionManager.NAME, "builtin-authz-internal"); + dirConfig.put("org.ovirt.engine.aaa.authz.profile.name", "internal"); + results.add(authConfig); + return results; + + } + + private List<Properties> createKerberosLdapConfigurations() { + + List<Properties> results = new ArrayList<>(); + for (String domain : LdapBrokerUtils.getDomainsList(true)) { + Properties authConfig = new Properties(); + authConfig.put(ExtensionManager.CLASS, "org.ovirt.extensions.builtin.ldapkerberos.LdapKerberosAuthenticator"); + authConfig.put(ExtensionManager.PROVIDES, "org.ovirt.engine.core.authentication"); + authConfig.put(ExtensionManager.ENABLED, true); + authConfig.put(ExtensionManager.MODULE, "org.ovirt.engine.extensions.builtin"); + authConfig.put(ExtensionManager.NAME, String.format("builtin-authn-%1$s", domain)); + authConfig.put("org.ovirt.engine.aaa.authn.profile.name", domain); + authConfig.put("ovirt.engine.aaa.authn.authz.plugin", String.format("builitin-authz-%1$s", domain)); + results.add(authConfig); + + Properties dirConfig = new Properties(); + dirConfig.put(ExtensionManager.CLASS, "org.ovirt.extensions.builtin.ldapkerberos.LdapKerberosDirectory"); + dirConfig.put(ExtensionManager.PROVIDES, "org.ovirt.engine.core.authorization"); + dirConfig.put(ExtensionManager.ENABLED, true); + dirConfig.put(ExtensionManager.MODULE, "org.ovirt.engine.extensions.builtin"); + dirConfig.put(ExtensionManager.NAME, String.format("builtin-authz-%1$s", domain)); + dirConfig.put("org.ovirt.engine.aaa.authz.profile.name", domain); + results.add(authConfig); + } + return results; + + } + } diff --git a/backend/manager/modules/extensions-manager/src/main/java/org/ovirt/engine/core/extensions/mgr/ExtensionManager.java b/backend/manager/modules/extensions-manager/src/main/java/org/ovirt/engine/core/extensions/mgr/ExtensionManager.java index 247fb04..b36ac2b 100644 --- a/backend/manager/modules/extensions-manager/src/main/java/org/ovirt/engine/core/extensions/mgr/ExtensionManager.java +++ b/backend/manager/modules/extensions-manager/src/main/java/org/ovirt/engine/core/extensions/mgr/ExtensionManager.java @@ -5,6 +5,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.util.Collection; import java.util.Collections; import java.util.EnumMap; import java.util.HashMap; @@ -30,11 +31,11 @@ */ public class ExtensionManager { - private static final String NAME = "ovirt.engine.extension.name"; - private static final String PROVIDES = "ovirt.engine.extension.provides"; - private static final String ENABLED = "ovirt.engine.extension.enabled"; - private static final String MODULE = "ovirt.engine.extension.module"; - private static final String CLASS = "ovirt.engine.extension.class"; + public static final String NAME = "ovirt.engine.extension.name"; + public static final String PROVIDES = "ovirt.engine.extension.provides"; + public static final String ENABLED = "ovirt.engine.extension.enabled"; + public static final String MODULE = "ovirt.engine.extension.module"; + public static final String CLASS = "ovirt.engine.extension.class"; private static final String ENGINE_EXTENSION_ENABLED = "ENGINE_EXTENSION_ENABLED_"; public class ExtensionEntry { @@ -48,14 +49,16 @@ context = new EnumMap<>(ExtensionProperties.class); Properties props = new Properties(); try (FileInputStream inputStream = new FileInputStream(file)) { - enabled = props.get(ENABLED) != null ? Boolean.parseBoolean((String) props.get(ENABLED)) : true; props.load(inputStream); - context.put(ExtensionProperties.CONFIGURATION, props); - context.put(ExtensionProperties.NAME, props.getProperty(NAME)); - context.put(ExtensionProperties.PROVIDES, props.getProperty(PROVIDES)); + load(props); } } + public ExtensionEntry(Properties props) { + this.file = null; + context = new EnumMap<>(ExtensionProperties.class); + load(props); + } public String getName() { return (String) context.get(ExtensionProperties.NAME); @@ -84,6 +87,14 @@ public Properties getConfig() { return (Properties) context.get(ExtensionProperties.CONFIGURATION); } + + private void load(Properties props) { + enabled = props.get(ENABLED) != null ? Boolean.parseBoolean((String) props.get(ENABLED)) : true; + context.put(ExtensionProperties.CONFIGURATION, props); + context.put(ExtensionProperties.NAME, props.getProperty(NAME)); + context.put(ExtensionProperties.PROVIDES, props.getProperty(PROVIDES)); + } + } private static final Logger log = LoggerFactory.getLogger(ExtensionManager.class); @@ -121,6 +132,25 @@ load(); } + public void load(Collection<Properties> configurations) { + if (configurations == null) { + return; + } + for (Properties configuration : configurations) { + ExtensionEntry entry = + new ExtensionEntry(configuration); + ExtensionEntry alreadyLoaded = loadedEntries.get(entry.getName()); + if (alreadyLoaded != null) { + throw new ConfigurationException(String.format("Could not load the configuration '%1$s'. %2%s", + entry.getName(), + alreadyLoaded.file != null ? String.format("The already loaded file %1$s contains a configuration with the same name", + alreadyLoaded.file.getAbsolutePath()) + : "")); + } + loadedEntries.put(entry.getName(), entry); + } + } + private void load() throws ConfigurationException { for (File directory : EngineLocalConfig.getInstance().getExtensionsDirectories()) { load(directory); -- To view, visit http://gerrit.ovirt.org/25741 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id8513cb992c5becef7e83c04a8da8bc7f1622348 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yair Zaslavsky <yzasl...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches