Yair Zaslavsky has uploaded a new change for review. Change subject: tools: Allow to configure domains_realm section via external file ......................................................................
tools: Allow to configure domains_realm section via external file This can be handy in case the kerberos realm for the added domain is not an upper case version of it. Bare in mind the external file should contain all the domains in case there is more than one domain in the setup Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1072330 Change-Id: I970b8f4950abb5eeb0a72a46ed00af26028919dd Signed-off-by: Yair Zaslavsky <yzasl...@redhat.com> --- M backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/kerberos/KrbConfCreator.java M backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java M backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsConfiguration.java 3 files changed, 51 insertions(+), 27 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/25447/1 diff --git a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/kerberos/KrbConfCreator.java b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/kerberos/KrbConfCreator.java index 83e3495..a049979 100644 --- a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/kerberos/KrbConfCreator.java +++ b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/kerberos/KrbConfCreator.java @@ -1,16 +1,20 @@ package org.ovirt.engine.core.utils.kerberos; import java.io.File; +import java.io.BufferedReader; +import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Scanner; +import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.ovirt.engine.core.utils.CLIParser; import org.ovirt.engine.core.utils.dns.DnsSRVLocator.DnsSRVResult; @@ -36,18 +40,17 @@ "\n\t-m mixed mode. Will add a flag to support AD in 2003/2008 mixed mode will be added"; private boolean useDnsLookup; private Map<String, List<String>> ldapServersPerGSSAPIDomains; + private String domainRealmMappingFile; private final static Logger log = Logger.getLogger(KrbConfCreator.class); - public KrbConfCreator(String... args) throws Exception { - parseOptions(args); - loadSourceFile(); - extractRealmsFromDomains(); - } - - public KrbConfCreator(String domains, boolean useDnsLookup, Map<String, List<String>> ldapServersPerGSSAPIDomains) throws Exception { + public KrbConfCreator(String domains, + boolean useDnsLookup, + Map<String, List<String>> ldapServersPerGSSAPIDomains, + String domainRealmMappingFile) throws Exception { this.useDnsLookup = useDnsLookup && ( ldapServersPerGSSAPIDomains == null || ldapServersPerGSSAPIDomains.size() == 0 ); this.ldapServersPerGSSAPIDomains = ldapServersPerGSSAPIDomains; + this.domainRealmMappingFile = domainRealmMappingFile; loadSourceFile(); extractRealmsFromDomains(domains); } @@ -209,28 +212,43 @@ // .second.example.com = SECOND.EXAMPLE.COM private String appendDomainRealms(List<String> realms) throws AuthenticationException { StringBuffer text = new StringBuffer(" [domain_realm]\n"); - for (String realm : realms) { - text.append("\t" + realm.toLowerCase() + " = " + realm.toUpperCase() + "\n"); + if (!domainRealmMappingFileExits()) { + for (String realm : realms) { + text.append("\t" + realm.toLowerCase() + " = " + realm.toUpperCase() + "\n"); + } + } else { + // Fill in [domain_realm] section from the provided file at engine-manage-domains.conf + // This can be useful in case the realm is not an upper case of the domain + try (BufferedReader reader = + new BufferedReader(new InputStreamReader(new FileInputStream(domainRealmMappingFile)))) { + while (true) { + String readLine = reader.readLine(); + if (readLine == null) { + break; + } + text.append("\t").append(readLine).append("\n"); + } + + } catch (FileNotFoundException e) { + // This exception should not really happen as we check that the file exists at + // domainRealmMappingFileExits() + + } catch (IOException e) { + } } return text.toString(); } - private String getProblematicRealmExceptionMsg(String realm) { - return (realm != null) ? " Problematic domain is: " + realm.toLowerCase() : ""; + private boolean domainRealmMappingFileExits() { + if (StringUtils.isEmpty(domainRealmMappingFile)) { + return false; + } + File f = new File(domainRealmMappingFile); + return f.exists(); } - public static void main(String[] args) throws FileNotFoundException { - try { - KrbConfCreator kerbParser = new KrbConfCreator(args); - StringBuffer buffer = kerbParser.parse(); - kerbParser.toFile(buffer); - } catch (Exception e) { - System.out.println("Error: " + e.getMessage()); - if (e instanceof AuthenticationException) { - System.exit(((AuthenticationException) e).getAuthResult().getExitCode()); - } - System.exit(1); - } + private String getProblematicRealmExceptionMsg(String realm) { + return (realm != null) ? " Problematic domain is: " + realm.toLowerCase() : ""; } private enum Arguments { diff --git a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java index 5cae4a9..74e7bf5 100644 --- a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java +++ b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomains.java @@ -705,13 +705,14 @@ try { log.info("Creating kerberos configuration for domain(s): " + gssapiDomainsString); useDnsLookup = utilityConfiguration.getUseDnsLookup(); + String domainRealmMappingFile = utilityConfiguration.getDomainRealmMappingFile(); if (!ldapServers && useDnsLookup) { - // The arguments do not contain a list of ldap servers, the - // kerberos configuration should not be created according to it if - // useDnsLookup is set to true as in this case the kdc and the domain_realm info + // Arguments do not contain a list of ldap servers, kerberos configuration should not be + // created according to it if useDnsLookup is set to true as in this case the kdc and + // the domain_realm information will be resolved by DNS during kerberos negotiation. ldapServersPerGSSAPIDomains = Collections.emptyMap(); } - krbConfCreator = new KrbConfCreator(gssapiDomainsString, useDnsLookup, ldapServersPerGSSAPIDomains); + krbConfCreator = new KrbConfCreator(gssapiDomainsString, useDnsLookup, ldapServersPerGSSAPIDomains, domainRealmMappingFile); StringBuffer buffer = null; buffer = krbConfCreator.parse("y"); krbConfCreator.toFile(utilityConfiguration.getkrb5confFilePath() + TESTING_KRB5_CONF_SUFFIX, buffer); diff --git a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsConfiguration.java b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsConfiguration.java index 81520d1..bd4a7bc 100644 --- a/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsConfiguration.java +++ b/backend/manager/tools/src/main/java/org/ovirt/engine/core/domains/ManageDomainsConfiguration.java @@ -11,6 +11,7 @@ private static String ENGINE_CONFIG_EXECUTABLE_PROPERTY = "engineConfigExecutable"; private static String LOCAL_HOST_ENTRY = "localHostEntry"; private static String USE_DNS_LOOKUP = "useDnsLookup"; + private static String DOMAIN_REALM_MAPPING_FILE = "domainRealmMappingFile"; ManageDomainsConfiguration(String confFilePath) throws ConfigurationException { manageDomainsConf = new PropertiesConfiguration(confFilePath); @@ -36,4 +37,8 @@ return manageDomainsConf.getBoolean(USE_DNS_LOOKUP); } + public String getDomainRealmMappingFile() { + return manageDomainsConf.getString(DOMAIN_REALM_MAPPING_FILE); + } + } -- To view, visit http://gerrit.ovirt.org/25447 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I970b8f4950abb5eeb0a72a46ed00af26028919dd Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.3 Gerrit-Owner: Yair Zaslavsky <yzasl...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches