AddAMSDKIdRepoPlugin.java revision e6c3a72a023407f5d1fface64356e1cc81f1af31
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/*
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * The contents of this file are subject to the terms
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * of the Common Development and Distribution License
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * (the License). You may not use this file except in
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * compliance with the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * You can obtain a copy of the License at
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * https://opensso.dev.java.net/public/CDDLv1.0.html or
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * opensso/legal/CDDLv1.0.txt
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * See the License for the specific language governing
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * permission and limitations under the License.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * When distributing Covered Code, include this CDDL
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Header Notice in each file and include the License file
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * at opensso/legal/CDDLv1.0.txt.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * If applicable, add the following below the CDDL Header,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * with the fields enclosed by brackets [] replaced by
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * your own identifying information:
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * "Portions Copyrighted [year] [name of copyright owner]"
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * $Id: AddAMSDKIdRepoPlugin.java,v 1.9 2009/12/11 06:50:36 hengming Exp $
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
07e35e8870f0a772252336889d391265a5485e4eSachiko Wallace * Portions Copyrighted 2015-2016 ForgeRock AS.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpackage com.sun.identity.cli.datastore;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport static org.forgerock.opendj.ldap.LDAPConnectionFactory.*;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.iplanet.am.util.SystemProperties;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.iplanet.services.util.Crypt;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.iplanet.sso.SSOException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.iplanet.sso.SSOToken;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.cli.AuthenticatedCommand;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.cli.CLIException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.cli.CLIUtil;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.cli.CommandManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.cli.IOutput;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.cli.LogWriter;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.cli.RequestContext;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.DNUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.configuration.ServerConfigXML;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.configuration.ServerConfigXML.DirUserObject;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.configuration.ServerConfigXML.ServerGroup;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.common.configuration.ServerConfiguration;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.idm.AMIdentity;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.idm.IdConstants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.idm.IdUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.policy.PolicyManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.policy.PolicyUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.shared.Constants;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.sm.SMSEntry;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.sm.SMSException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.sm.SMSSchema;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.sm.ServiceManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.sm.ServiceSchema;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport com.sun.identity.sm.ServiceSchemaManager;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.ByteArrayInputStream;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.DataInputStream;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.IOException;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.io.InputStream;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.ArrayList;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.HashMap;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.HashSet;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Iterator;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.List;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Map;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.Set;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.concurrent.TimeUnit;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport java.util.logging.Level;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.openam.ldap.LDAPRequests;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.openam.ldap.LDAPUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.openam.ldap.LdifUtils;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.Connection;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.ConnectionFactory;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.LDAPConnectionFactory;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.SSLContextBuilder;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.opendj.ldap.requests.BindRequest;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.util.Options;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterimport org.forgerock.util.time.Duration;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster/**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * This command creates identity.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Fosterpublic class AddAMSDKIdRepoPlugin extends AuthenticatedCommand {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private static final String[] params = { "add-amsdk-idrepo-plugin" };
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private List directoryServers;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String bindDN;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String bindPwd;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String basedn;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String dUserPwd;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String pUserPwd;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String namingAttr = "uid";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String orgAttr = "o";
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void init(RequestContext rc) throws Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster directoryServers = rc.getOption("directory-servers");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster basedn = getStringOptionValue("basedn").trim();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster bindDN = getStringOptionValue("binddn").trim();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster bindPwd = CLIUtil.getFileContent(getCommandManager(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster getStringOptionValue("bind-password-file"), true);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster dUserPwd = CLIUtil.getFileContent(getCommandManager(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster getStringOptionValue("dsame-password-file"), true);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster pUserPwd = CLIUtil.getFileContent(getCommandManager(),
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster getStringOptionValue("puser-password-file"), true);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String attr = getStringOptionValue("user");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (attr != null && attr.trim().length() > 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster namingAttr = attr.trim();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster attr = getStringOptionValue("org");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (attr != null && attr.trim().length() > 0) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster orgAttr = attr.trim();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster /**
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * Services a Commandline Request.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster *
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @param rc Request Context.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster * @throws CLIException if the request cannot serviced.
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster */
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // @SuppressWarnings("empty-statement")
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster public void handleRequest(RequestContext rc)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws CLIException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster super.handleRequest(rc);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ldapLogin();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IOutput outputWriter = getOutputWriter();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster init(rc);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster writeLog(LogWriter.LOG_ACCESS, Level.INFO,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "ATTEMPT_ADD_AMSDK_PLUGIN", params);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster loadLDIFs();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Load DAI service, if not already loaded
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String xmlData = loadDAIService();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster addAMSDKSubSchema(xmlData);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster loadDelegrationPolicies(xmlData);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster updateServerConfigXML();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster updateDSAMEUserPassword();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster outputWriter.printlnMessage(params[0] + ": " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster getResourceString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "datastore-add-amsdk-idrepo-plugin-succeeded"));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster writeLog(LogWriter.LOG_ACCESS, Level.INFO,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "SUCCEED_ADD_AMSDK_PLUGIN", params);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String[] p = {"Adding AMSDK plugin", e.getMessage()};
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster writeLog(LogWriter.LOG_ERROR, Level.INFO,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "FAILED_ADD_AMSDK_PLUGIN", p);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster outputWriter.printlnMessage(params[0] + ": " + getResourceString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "datastore-add-amsdk-idrepo-plugin-failed") + ": " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster e.getMessage());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private String loadDAIService()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws SMSException, SSOException, CLIException, IOException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SSOToken adminSSOToken = getAdminSSOToken();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Load DAI service, if not already loaded
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String xmlData = null;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ServiceManager sm = new ServiceManager(adminSSOToken);
07e35e8870f0a772252336889d391265a5485e4eSachiko Wallace if (!sm.getServiceNames().contains("DAI")) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster xmlData = getResourceContent("ums.xml");
07e35e8870f0a772252336889d391265a5485e4eSachiko Wallace
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Tag swap: @USER_NAMING_ATTR & @ORG_NAMING_ATTR
07e35e8870f0a772252336889d391265a5485e4eSachiko Wallace xmlData = xmlData.replaceAll("@USER_NAMING_ATTR@",
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster namingAttr);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster xmlData = xmlData.replaceAll("@ORG_NAMING_ATTR@", orgAttr);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster registerService(xmlData, adminSSOToken);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster return xmlData;
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void addAMSDKSubSchema(String xmlData)
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws SMSException, SSOException, CLIException {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SSOToken adminSSOToken = getAdminSSOToken();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ServiceSchemaManager ssm = new ServiceSchemaManager(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster adminSSOToken, IdConstants.REPO_SERVICE, "1.0");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ServiceSchema ss = ssm.getOrganizationSchema();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if (!ss.getSubSchemaNames().contains("amSDK")) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster xmlData = getResourceContent("idRepoAmSDK.xml");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Tag swap: @NORMALIZED_ORGBASED
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster xmlData = xmlData.replaceAll("@NORMALIZED_ORGBASE@",
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DNUtils.normalizeDN(basedn));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InputStream xmlInputStream =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (InputStream) new ByteArrayInputStream(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster xmlData.getBytes());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ss.addSubSchema(xmlInputStream);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void loadDelegrationPolicies(String xmlData) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SSOToken adminSSOToken = getAdminSSOToken();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster IOutput outputWriter = getOutputWriter();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Load delegation policies for Top-level Admin Role and others
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster try {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster xmlData = getResourceContent(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "defaultDelegationPoliciesForAmSDK.xml");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Tag swap: @SM_CONFIG_ROOT_SUFFIX@ & @SM_ROOT_SUFFIX_HAT@
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String smsRootSuffix = ServiceManager.getBaseDN();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster xmlData = xmlData.replaceAll("@SM_CONFIG_ROOT_SUFFIX@",
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster smsRootSuffix);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String smsRootHat = smsRootSuffix.replaceAll(",", "^");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster xmlData = xmlData.replaceAll("@SM_ROOT_SUFFIX_HAT@",
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster smsRootHat);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Tag swap: @ROOT_SUFFIX@
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster xmlData = xmlData.replaceAll("@ROOT_SUFFIX@",
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster DNUtils.normalizeDN(basedn));
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster InputStream xmlInputStream =
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster (InputStream) new ByteArrayInputStream(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster xmlData.getBytes());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster PolicyManager pm = new PolicyManager(adminSSOToken,
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "/sunamhiddenrealmdelegationservicepermissions");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster PolicyUtils.createPolicies(pm, xmlInputStream);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster } catch (Exception e) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster outputWriter.printlnMessage(params[0] + ": " +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster getResourceString(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster "datastore-add-amsdk-idrepo-plugin-policies-failed") +
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ": " + e.getMessage());
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster }
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster private void updateServerConfigXML()
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster throws Exception {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster SSOToken adminSSOToken = getAdminSSOToken();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Set servers = ServerConfiguration.getServers(adminSSOToken);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster Map newValues = new HashMap();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster newValues.put("com.sun.am.event.connection.disable.list", "");
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster for (Iterator items = servers.iterator(); items.hasNext();) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String instance = (String) items.next();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster String serverconfig = ServerConfiguration.getServerConfigXML(
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster adminSSOToken, instance);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ServerConfigXML cxml = new ServerConfigXML(serverconfig);
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster ServerGroup defaultGroup = cxml.getDefaultServerGroup();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster // Add directory servers
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster if ((directoryServers != null) &&
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster !directoryServers.isEmpty()) {
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster defaultGroup.hosts.clear();
a688bcbb4bcff5398fdd29b86f83450257dc0df4Allan Foster int i = 1;
for (Iterator dshosts = directoryServers.iterator();
dshosts.hasNext(); i++) {
String dshost = (String) dshosts.next();
// Parse the dshost
String name = "SERVER" + i;
DSEntry dsEntry = new DSEntry(dshost);
String type = (dsEntry.ssl) ? "SSL" : "SIMPLE";
String host = dsEntry.host;
String port = Integer.toString(dsEntry.port);
defaultGroup.addHost(name, host, port, type);
}
}
// Set the base dn
defaultGroup.dsBaseDN = basedn;
// Set admin & proxy user's password
for (Iterator users = defaultGroup.dsUsers.iterator();
users.hasNext();) {
DirUserObject user = (DirUserObject) users.next();
if (user.type.equals("proxy")) {
user.dn = "cn=puser,ou=DSAME Users," + basedn;
user.password = Crypt.encode(pUserPwd);
} else if (user.type.equals("admin")) {
user.dn = "cn=dsameuser,ou=DSAME Users," + basedn;
user.password = Crypt.encode(dUserPwd);
}
}
// Saver serverconfig.xml
ServerConfiguration.setServerConfigXML(adminSSOToken,
instance, cxml.toXML());
// Enable psearch for um, aci and sm
ServerConfiguration.setServerInstance(adminSSOToken,
instance, newValues);
}
}
private void updateDSAMEUserPassword() throws Exception {
String dsameuserDN = "cn=dsameuser,ou=DSAME Users," +
SMSEntry.getRootSuffix();
AMIdentity dsameuser = IdUtils.getIdentity(ssoToken, dsameuserDN);
Set setNewPwd = new HashSet(2);
setNewPwd.add(dUserPwd);
Map mapPassword = new HashMap(2);
mapPassword.put("userpassword", setNewPwd);
dsameuser.setAttributes(mapPassword);
dsameuser.store();
}
private String getResourceContent(String resName)
throws CLIException {
String configDir = SystemProperties.get(SystemProperties.CONFIG_PATH);
return CLIUtil.getFileContent(getCommandManager(),
configDir + "/template/xml/" + resName);
}
private void registerService(String xml, SSOToken adminSSOToken)
throws SSOException, SMSException, IOException {
ServiceManager serviceManager = new ServiceManager(adminSSOToken);
InputStream serviceStream = null;
try {
serviceStream = (InputStream) new ByteArrayInputStream(
xml.getBytes());
serviceManager.registerServices(serviceStream);
} finally {
if (serviceStream != null) {
serviceStream.close();
}
}
}
private void loadLDIFs() throws Exception {
CommandManager mgr = getCommandManager();
List ldifs = getLDIFs();
for (Iterator i = directoryServers.iterator(); i.hasNext(); ) {
String dshost = (String)i.next();
try (ConnectionFactory factory = getLDAPConnection(new DSEntry(dshost));
Connection ld = factory.getConnection()){
String dbName = LDAPUtils.getDBName(basedn, ld);
for (Iterator j = ldifs.iterator(); j.hasNext();) {
String file = (String) j.next();
String content = CLIUtil.getFileContent(mgr, file);
String swapped = tagswap(content, dbName);
loadLDIF(ld, swapped);
}
}
}
}
private void loadLDIF(Connection ld, String ldif)
throws Exception {
ByteArrayInputStream reader = null;
try {
reader = new ByteArrayInputStream(ldif.getBytes());
LdifUtils.createSchemaFromLDIF(new DataInputStream(reader), ld);
} finally {
if (reader != null) {
reader.close();
}
}
}
private List getLDIFs() {
List ldifs = new ArrayList();
String configDir = SystemProperties.get(SystemProperties.CONFIG_PATH);
String templateDir = configDir + "/ldif";
ldifs.add(templateDir +
"/odsee/amsdk_plugin/amsdk_sunone_schema2.ldif");
ldifs.add(templateDir + "/odsee/odsee_user_schema.ldif");
ldifs.add(templateDir + "/odsee/odsee_plugin/amsdk_init_template.ldif");
ldifs.add(templateDir + "/odsee/odsee_user_index.ldif");
return ldifs;
}
private String tagswap(
String orig,
String dbName
) throws Exception {
String normalizedDN = LDAPUtils.normalizeDN(basedn);
String escapedDN = SMSSchema.escapeSpecialCharacters(normalizedDN);
String rdn = LDAPUtils.rdnValueFromDn(normalizedDN);
String peopleContainer = "People_" + basedn.replace(',', '_');
orig = orig.replaceAll("@DB_NAME@", dbName);
orig = orig.replaceAll("@NORMALIZED_RS@", escapedDN);
orig = orig.replaceAll("@RS_RDN@", LDAPUtils.escapeValue(rdn));
orig = orig.replaceAll("@ADMIN_PWD@", dUserPwd);
orig = orig.replaceAll("@SERVER_HOST@",
SystemProperties.get(Constants.AM_SERVER_HOST));
orig = orig.replaceAll("@ORG_NAMING_ATTR@", orgAttr);
orig = orig.replaceAll("@ORG_OBJECT_CLASS@", "sunmanagedisorganization");
orig = orig.replaceAll("@People_NM_ORG_ROOT_SUFFIX@", peopleContainer);
orig = orig.replaceAll("@AMLDAPUSERPASSWD@", pUserPwd);
return orig;
}
private ConnectionFactory getLDAPConnection(DSEntry ds) throws Exception {
BindRequest bindRequest = LDAPRequests.newSimpleBindRequest(bindDN, bindPwd.toCharArray());
Options options = Options.defaultOptions()
.set(CONNECT_TIMEOUT, new Duration((long) 300, TimeUnit.MILLISECONDS))
.set(AUTHN_BIND_REQUEST, bindRequest);
if (ds.ssl) {
options = options.set(SSL_CONTEXT, new SSLContextBuilder().getSSLContext());
}
return new LDAPConnectionFactory(ds.host, ds.port, options);
}
class DSEntry {
boolean ssl;
String host;
int port;
DSEntry(String ds) {
String dslc = ds.toLowerCase();
ssl = dslc.startsWith("ldaps://");
String dshost;
if (ssl) {
dshost = ds.substring(8);
} else if (dslc.startsWith("ldap://")) {
dshost = ds.substring(7);
} else {
dshost = ds;
}
int portIndex = dshost.indexOf(':');
host = dshost;
port = 389;
if (portIndex != -1) {
host = dshost.substring(0, portIndex);
port = Integer.parseInt(dshost.substring(portIndex + 1));
}
}
}
}