bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington/*
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copyright (c) 2007 Sun Microsystems Inc. All Rights Reserved
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The contents of this file are subject to the terms
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * of the Common Development and Distribution License
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * (the License). You may not use this file except in
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * compliance with the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * You can obtain a copy of the License at
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * opensso/legal/CDDLv1.0.txt
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * See the License for the specific language governing
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * permission and limitations under the License.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * When distributing Covered Code, include this CDDL
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Header Notice in each file and include the License file
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * at opensso/legal/CDDLv1.0.txt.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * If applicable, add the following below the CDDL Header,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * with the fields enclosed by brackets [] replaced by
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * your own identifying information:
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * $Id: Step4.java,v 1.20 2009/10/27 05:31:45 hengming Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
e6c3a72a023407f5d1fface64356e1cc81f1af31Phill Cunnington * Portions Copyrighted 2011-2016 ForgeRock AS.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.sun.identity.config.wizard;
532e14cdd83d81cef3bb65d5c2c3748fb61914f7Mark de Reeper
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.sun.identity.config.SessionAttributeNames;
532e14cdd83d81cef3bb65d5c2c3748fb61914f7Mark de Reeperimport com.sun.identity.config.util.ProtectedPage;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.sun.identity.setup.SetupConstants;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.io.IOException;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.net.Socket;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Hashtable;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.naming.NamingException;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.naming.directory.Attribute;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.naming.directory.Attributes;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.naming.directory.DirContext;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport javax.naming.directory.InitialDirContext;
ce4d3fddc8fe2eddd68a20af9570b3cc63ece5abNeil Maddenimport org.apache.click.Context;
ce4d3fddc8fe2eddd68a20af9570b3cc63ece5abNeil Maddenimport org.apache.click.control.ActionLink;
a82d04bc19fee9d5e34b41ccd7641da1f62ab634Neil Maddenimport org.forgerock.openam.ldap.LDAPRequests;
ce4d3fddc8fe2eddd68a20af9570b3cc63ece5abNeil Maddenimport org.forgerock.openam.ldap.LDAPUtils;
ce4d3fddc8fe2eddd68a20af9570b3cc63ece5abNeil Maddenimport org.forgerock.opendj.ldap.Connection;
ce4d3fddc8fe2eddd68a20af9570b3cc63ece5abNeil Maddenimport org.forgerock.opendj.ldap.LdapException;
ce4d3fddc8fe2eddd68a20af9570b3cc63ece5abNeil Maddenimport org.forgerock.opendj.ldap.ResultCode;
ce4d3fddc8fe2eddd68a20af9570b3cc63ece5abNeil Maddenimport org.forgerock.opendj.ldap.SearchScope;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Step 4 is the input of the remote user data store properties.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
532e14cdd83d81cef3bb65d5c2c3748fb61914f7Mark de Reeperpublic class Step4 extends ProtectedPage {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public static final String LDAP_STORE_SESSION_KEY = "wizardCustomUserStore";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink validateUMHostLink =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("validateUMHost", this, "validateUMHost");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink validateUMDomainNameLink =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("validateUMDomainName", this,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "validateUMDomainName");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink setSSLLink =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("setSSL", this, "setSSL");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink setUMEmbedded =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("setUMEmbedded", this, "setUMEmbedded");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink resetUMEmbedded =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("resetUMEmbedded", this, "resetUMEmbedded");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink setHostLink =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("setHost", this, "setHost");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink setDomainNameLink =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("setDomainName", this, "setDomainName");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink setPortLink =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("setPort", this, "setPort");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink setRootSuffixLink =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("setRootSuffix", this, "setRootSuffix");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink setLoginIDLink =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("setLoginID", this, "setLoginID");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink setPasswordLink =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("setPassword", this, "setPassword");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public ActionLink setStoreTypeLink =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new ActionLink("setStoreType", this, "setStoreType");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String responseString = "ok";
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk private static final String ObjectClassFilter = "(objectclass=*)";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public Step4() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public void onInit() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster super.onInit();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Context ctx = getContext();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (ctx.getSessionAttribute(SessionAttributeNames.USER_STORE_HOST)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String val = getAttribute(SetupConstants.CONFIG_VAR_DATA_STORE,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SetupConstants.SMS_EMBED_DATASTORE);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!val.equals(SetupConstants.SMS_EMBED_DATASTORE)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val = getAttribute("configStoreSSL", "SIMPLE");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(SessionAttributeNames.USER_STORE_SSL,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val = getAttribute("configStoreHost", getHostName());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(SessionAttributeNames.USER_STORE_HOST,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val = getAttribute("configStorePort", "389");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(SessionAttributeNames.USER_STORE_PORT,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val = getAttribute("configStoreLoginId",Wizard.defaultUserName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_LOGIN_ID, val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val = getAttribute("rootSuffix", Wizard.defaultRootSuffix);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_ROOT_SUFFIX, val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(SessionAttributeNames.EXT_DATA_STORE,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "true");
ae6a696d33562b5e32789da18c977c006483864aMark de Reeper ctx.setSessionAttribute(SessionAttributeNames.USER_STORE_TYPE, "LDAPv3ForOpenDS");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String smsType = getAttribute(SetupConstants.CONFIG_VAR_DATA_STORE,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "embedded");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!smsType.equals("embedded")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.EXT_DATA_STORE, "true");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("radioDataTypeDisabled", "disabled");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("radioDataTypeDisabled", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String val = getAttribute(SetupConstants.USER_STORE_HOST,getHostName());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(SessionAttributeNames.USER_STORE_HOST, val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("userStoreHost", val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val = getAttribute(SetupConstants.USER_STORE_SSL, "SIMPLE");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(SessionAttributeNames.USER_STORE_SSL, val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (val.equals("SSL")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectUserStoreSSL", "checked=\"checked\"");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectUserStoreSSL", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val = getAttribute(SetupConstants.USER_STORE_PORT, "389");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(SessionAttributeNames.USER_STORE_PORT, val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("userStorePort", val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val = getAttribute(SetupConstants.USER_STORE_LOGIN_ID,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Wizard.defaultUserName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(SessionAttributeNames.USER_STORE_LOGIN_ID, val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("userStoreLoginId", val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val = getAttribute(SetupConstants.USER_STORE_ROOT_SUFFIX,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Wizard.defaultRootSuffix);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx.setSessionAttribute(SessionAttributeNames.USER_STORE_ROOT_SUFFIX,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("userStoreRootSuffix", val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
ae6a696d33562b5e32789da18c977c006483864aMark de Reeper val = getAttribute(SetupConstants.USER_STORE_TYPE, "LDAPv3ForOpenDS");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (val.equals("LDAPv3ForAD")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3ad", "checked=\"checked\"");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3addc", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3adam", "");
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk addModel("selectLDAPv3odsee", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3opends", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3tivoli", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (val.equals("LDAPv3ForADDC")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3addc", "checked=\"checked\"");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3ad", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3adam", "");
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk addModel("selectLDAPv3odsee", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3opends", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3tivoli", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (val.equals("LDAPv3ForADAM")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3adam", "checked=\"checked\"");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3ad", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3addc", "");
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk addModel("selectLDAPv3odsee", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3opends", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3tivoli", "");
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk } else if (val.equals("LDAPv3ForODSEE")) {
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk addModel("selectLDAPv3odsee", "checked=\"checked\"");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3ad", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3addc", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3adam", "");
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk addModel("selectLDAPv3odsee", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3tivoli", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else if (val.equals("LDAPv3ForOpenDS")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3opends", "checked=\"checked\"");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3ad", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3addc", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3adam", "");
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk addModel("selectLDAPv3odsee", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3tivoli", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3tivoli", "checked=\"checked\"");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3ad", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3addc", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3adam", "");
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk addModel("selectLDAPv3odsee", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectLDAPv3opends", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster val = getAttribute("EXT_DATA_STORE", "true");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("EXT_DATA_STORE", val);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (val.equals("true")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectEmbeddedUM", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectExternalUM", "checked=\"checked\"");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectEmbeddedUM", "checked=\"checked\"");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster addModel("selectExternalUM", "");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean setAll() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean setSSL() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String ssl = toString("ssl");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((ssl != null) && ssl.length() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_SSL, ssl);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_SSL, "SIMPLE");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse(getLocalizedString(responseString));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean setDomainName() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String domainname = toString("domainname");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((domainname != null) && domainname.length() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_DOMAINNAME,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster domainname);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.EXT_DATA_STORE, "true");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster responseString = "missing.domain.name";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse(getLocalizedString(responseString));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean setHost() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String host = toString("host");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((host != null) && host.length() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_HOST, host);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster responseString = "missing.host.name";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse(getLocalizedString(responseString));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean setUMEmbedded() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(SessionAttributeNames.EXT_DATA_STORE,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "false");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean resetUMEmbedded() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(SessionAttributeNames.EXT_DATA_STORE,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "true");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean setPort() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String port = toString("port");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((port != null) && port.length() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int intValue = Integer.parseInt(port);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((intValue > 0) && (intValue < 65535)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_PORT, port);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster responseString = "invalid.port.number";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster responseString = "missing.host.port";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse(getLocalizedString(responseString));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean setLoginID() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String dn = toString("dn");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((dn != null) && dn.length() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_LOGIN_ID, dn);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster responseString = "missing.login.id";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse(getLocalizedString(responseString));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean setPassword() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String pwd = toString("password");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((pwd != null) && pwd.length() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_LOGIN_PWD, pwd);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster responseString = "missing.password";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse(getLocalizedString(responseString));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean setRootSuffix() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String rootsuffix = toString("rootsuffix");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((rootsuffix != null) && rootsuffix.length() > 0) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington if (LDAPUtils.isDN(rootsuffix)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_ROOT_SUFFIX, rootsuffix);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster responseString = "invalid.dn";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster responseString = "missing.root.suffix";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse(getLocalizedString(responseString));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean setStoreType() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String type = toString("type");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((type != null) && type.length() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_TYPE, type);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse(responseString);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean validateUMHost() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Context ctx = getContext();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String strSSL = (String)ctx.getSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_SSL);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean ssl = (strSSL != null) && (strSSL.equals("SSL"));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String host = (String)ctx.getSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_HOST);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String strPort = (String)ctx.getSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_PORT);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int port = Integer.parseInt(strPort);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String bindDN = (String)ctx.getSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_LOGIN_ID);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String rootSuffix = (String)ctx.getSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_ROOT_SUFFIX);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String bindPwd = (String)ctx.getSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_LOGIN_PWD);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington try (Connection conn = getConnection(host, port, bindDN, bindPwd.toCharArray(), 5, ssl)) {
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk //String filter = "cn=" + "\"" + rootSuffix + "\""; // NOT SURE Why "cn" is specified. would never work.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] attrs = {""};
a82d04bc19fee9d5e34b41ccd7641da1f62ab634Neil Madden conn.search(LDAPRequests.newSearchRequest(rootSuffix, SearchScope.BASE_OBJECT, ObjectClassFilter, attrs));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse("ok");
ce4d3fddc8fe2eddd68a20af9570b3cc63ece5abNeil Madden } catch (LdapException lex) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington ResultCode resultCode = lex.getResult().getResultCode();
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington if (!writeErrorToResponse(resultCode)) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington writeToResponse(getLocalizedString("cannot.connect.to.SM.datastore"));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (Exception e) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington writeToResponse(getLocalizedString("cannot.connect.to.SM.datastore"));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public boolean validateUMDomainName() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster setPath(null);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Context ctx = getContext();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String strSSL = (String)ctx.getSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_SSL);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean ssl = (strSSL != null) && (strSSL.equals("SSL"));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String domainName = (String)ctx.getSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_DOMAINNAME);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String rootSuffixAD = dnsDomainToDN(domainName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_ROOT_SUFFIX,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster rootSuffixAD);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] hostAndPort = {""};
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster hostAndPort = getLdapHostAndPort(domainName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (NamingException nex) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getLocalizedString("cannot.connect.to.UM.datastore"));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (IOException ioex) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getLocalizedString("cannot.connect.to.UM.datastore"));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String host = hostAndPort[0];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int port = Integer.parseInt(hostAndPort[1]);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String bindDN = (String)ctx.getSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_LOGIN_ID);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String rootSuffix = (String)ctx.getSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_ROOT_SUFFIX);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String bindPwd = (String)ctx.getSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_LOGIN_PWD);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington try (Connection conn = getConnection(host, port, bindDN, bindPwd.toCharArray(), 3, ssl)) {
56ed5bbb263838f338eb8afc978091c01a4f2a2bjeff.schenk //String filter = "cn=" + "\"" + rootSuffix + "\"";
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] attrs = {""};
a82d04bc19fee9d5e34b41ccd7641da1f62ab634Neil Madden conn.search(LDAPRequests.newSearchRequest(rootSuffix, SearchScope.BASE_OBJECT, ObjectClassFilter, attrs));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster writeToResponse("ok");
ce4d3fddc8fe2eddd68a20af9570b3cc63ece5abNeil Madden } catch (LdapException lex) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington ResultCode resultCode = lex.getResult().getResultCode();
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington if (!writeErrorToResponse(resultCode)) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington writeToResponse(getLocalizedString("cannot.connect.to.UM.datastore"));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington } catch (Exception e) {
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington writeToResponse(getLocalizedString("cannot.connect.to.UM.datastore"));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return false;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Method to get hostname and port number with the
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // provided Domain Name for Active Directory user data store.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String[] getLdapHostAndPort(String domainName)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throws NamingException, IOException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!domainName.endsWith(".")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster domainName+='.';
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster DirContext ictx = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check if domain name is a valid one.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // The resource record type A is defined in RFC 1035.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Hashtable env = new Hashtable();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster env.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "com.sun.jndi.dns.DnsContextFactory");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ictx = new InitialDirContext(env);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Attributes attributes =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ictx.getAttributes(domainName, new String[]{"A"});
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Attribute attrib = attributes.get("A");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (attrib == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw new NamingException();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (NamingException e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Failed to resolve domainName to A record.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // throw exception.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw e;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // then look for the LDAP server
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String serverHostName = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String serverPortStr = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster final String ldapServer = "_ldap._tcp." + domainName;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Attempting to resolve ldapServer to SRV record.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // This is a mechanism defined in MSDN, querying
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // SRV records for _ldap._tcp.DOMAINNAME.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // and get host and port from domain.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Attributes attributes =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ictx.getAttributes(ldapServer, new String[]{"SRV"});
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Attribute attr = attributes.get("SRV");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (attr == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw new NamingException();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] srv = attr.get().toString().split(" ");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String hostNam = srv[3];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster serverHostName =
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster hostNam.substring(0, hostNam.length() -1);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((serverHostName != null) &&
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster serverHostName.length() > 0) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_HOST,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster serverHostName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster serverPortStr = srv[2];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (NamingException e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Failed to resolve ldapServer to SRV record.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // throw exception.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw e;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // try to connect to LDAP port to make sure this machine
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // has LDAP service
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster int serverPort = Integer.parseInt(serverPortStr);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((serverPort > 0) && (serverPort < 65535)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster getContext().setSessionAttribute(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SessionAttributeNames.USER_STORE_PORT, serverPortStr);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster try {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new Socket(serverHostName, serverPort).close();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } catch (IOException e) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw e;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] hostAndPort = new String[2];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster hostAndPort[0] = serverHostName;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster hostAndPort[1] = serverPortStr;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return hostAndPort;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Method to convert the domain name to the root suffix.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // eg., Domain Name amqa.test.com is converted to root suffix
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // DC=amqa,DC=test,DC=com
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static String dnsDomainToDN(String domainName) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder buf = new StringBuilder();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (String token : domainName.split("\\.")) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(token.length()==0) continue;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if(buf.length()>0) buf.append(",");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buf.append("DC=").append(token);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return buf.toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}