8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * Copyright (c) 2005 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: ServiceInstanceImpl.java,v 1.6 2008/07/11 01:46:20 arviranga Exp $
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster *
bee2440354b4bc8796e1de0b6cbd60e1f68deba0Phill Cunnington * Portions Copyrighted 2011-2015 ForgeRock AS.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterpackage com.sun.identity.sm;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.iplanet.sso.SSOException;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.iplanet.sso.SSOToken;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.iplanet.ums.IUMSConstants;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport com.sun.identity.shared.debug.Debug;
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Collections;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.HashMap;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.HashSet;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Iterator;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Map;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterimport java.util.Set;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/**
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * The class <code>ServiceInstanceImpl</code> provides methods to get
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster * service's instance variables.
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterclass ServiceInstanceImpl {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Cached SMS entry
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String name;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String group;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private String uri;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private CachedSMSEntry smsEntry;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Instance attributes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private Map attributes;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private ServiceInstanceImpl(String name, CachedSMSEntry entry) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster this.name = name;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster smsEntry = entry;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster smsEntry.addServiceListener(this);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (smsEntry.isDirty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster smsEntry.refresh();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster } else {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster update();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String getName() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (name);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String getGroup() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (group);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String getURI() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (uri);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String toString() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder sb = new StringBuilder(100);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sb.append("\nService Instance: ").append(name).append("\n\tGroup: ")
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(getGroup()).append("\n\tURI: ").append(getURI())
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append("\n\tAttributes: ").append(attributes);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (sb.toString());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Map getAttributes() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (SMSUtils.copyAttributes(attributes));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SMSEntry getSMSEntry() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (smsEntry.getClonedSMSEntry());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster void refresh(SMSEntry newEntry) throws SMSException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster smsEntry.refresh(newEntry);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Gets calls by local changes and also by notifications threads
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Hence synchronized to avoid data corruption
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster synchronized void update() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Read the attributes
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SMSEntry entry = smsEntry.getSMSEntry();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster attributes = SMSUtils.getAttrsFromEntry(entry);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Get the group attribute
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster group = SMSUtils.DEFAULT;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] groups = entry.getAttributeValues(SMSEntry.ATTR_SERVICE_ID);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (groups != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster group = groups[0];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Get the URI
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster uri = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] uris = entry.getAttributeValues(SMSEntry.ATTR_LABELED_URI);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (uris != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster uri = uris[0];
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster boolean isValid() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (smsEntry.isValid() && smsEntry.isDirty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster smsEntry.refresh();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (smsEntry.isValid());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster void clear() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster smsEntry.removeServiceListener(this);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (smsEntry.isValid()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster smsEntry.clear();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // ----------------------------------------------------------
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Protected static methods
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // ----------------------------------------------------------
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static ServiceInstanceImpl getInstance(SSOToken token, String serviceName,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String version, String iName) throws SMSException, SSOException {
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace //construct instance DN using default realm
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace return getInstance(token, serviceName, version, iName, null);
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace }
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace static ServiceInstanceImpl getInstance(SSOToken token, String serviceName,
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace String version, String iName, String oName) throws SMSException, SSOException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (debug.messageEnabled()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message("ServiceInstanceImpl::getInstance: called: " +
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster serviceName + "(" + version + ")" + " Instance: " + iName);
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace }
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace String cName = getCacheName(serviceName, version, iName, oName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check the cache
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ServiceInstanceImpl answer = getFromCache(cName, serviceName, version,
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace iName, oName, token);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (answer != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check if the entry has to be updated
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!SMSEntry.cacheSMSEntries || answer.smsEntry.isDirty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Since the SMSEntries are not to be cached, read the entry
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer.smsEntry.refresh();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (answer);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Construct the service instance
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster synchronized (serviceInstances) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check cache again, in case it was added by another thread
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((answer = getFromCache(cName, serviceName, version, iName,
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace oName, token)) == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Still not present in cache, create and add to cache
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster CachedSMSEntry entry = checkAndUpdatePermission(cName,
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace serviceName, version, iName, oName, token);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = new ServiceInstanceImpl(iName, entry);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster serviceInstances.put(cName, answer);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (debug.messageEnabled()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster debug.message("ServiceInstanceImpl::getInstance: success: " +
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster serviceName + "(" + version + ")" + " Instance: " + iName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (answer);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Clears the cache
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static void clearCache() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster synchronized (serviceInstances) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster for (Iterator items = serviceInstances.values().iterator();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster items.hasNext();) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ServiceInstanceImpl impl = (ServiceInstanceImpl) items.next();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster impl.clear();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster serviceInstances.clear();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace static String getCacheName(String sName, String version, String ins, String oName) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder sb = new StringBuilder(100);
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace sb.append(sName).append(version).append(ins).append(oName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (sb.toString().toLowerCase());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static ServiceInstanceImpl getFromCache(String cacheName, String sName,
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace String version, String iName, String oName, SSOToken t) throws SMSException,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster SSOException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ServiceInstanceImpl answer = (ServiceInstanceImpl) serviceInstances
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .get(cacheName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (answer != null && !answer.smsEntry.isValid()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // CachedSMSEntry is invalid. Recreate this instance
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster serviceInstances.remove(cacheName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster answer = null;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (answer != null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check if the user has permissions
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Set principals = (Set) userPrincipals.get(cacheName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (!principals.contains(t.getTokenID().toString())) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Check if Principal has permission to read entry
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace checkAndUpdatePermission(cacheName, sName, version, iName, oName, t);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (answer);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster static synchronized CachedSMSEntry checkAndUpdatePermission(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String cacheName, String serviceName, String version, String iName,
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace String oName, SSOToken t) throws SMSException, SSOException {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster // Construct the DN
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace // OPENAM-3269
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace // commenting out since it always construct DN with default realm
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace // String dn = "ou=" + iName + "," + CreateServiceConfig.INSTANCES_NODE
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace // + ServiceManager.getServiceNameDN(serviceName, version);
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace String dn = constructServiceInstanceDN(serviceName, version, iName, oName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster CachedSMSEntry entry = CachedSMSEntry.getInstance(t, dn);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (entry.isDirty()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster entry.refresh();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (entry.isNewEntry()) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster String[] args = { iName };
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster throw (new SMSException(IUMSConstants.UMS_BUNDLE_NAME,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster "sms-no-such-instance", args));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster Set sudoPrincipals = (Set) userPrincipals.get(cacheName);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (sudoPrincipals == null) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sudoPrincipals = Collections.synchronizedSet(new HashSet());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster sudoPrincipals.add(t.getTokenID().toString());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster userPrincipals.put(cacheName, sudoPrincipals);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return (entry);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace private static String constructServiceInstanceDN(String serviceName, String version,
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace String instanceName, String orgName) throws SMSException {
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace StringBuilder sb = new StringBuilder(100);
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace sb.append("ou=").append(instanceName).append(SMSEntry.COMMA).append(
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace CreateServiceConfig.INSTANCES_NODE).append("ou=").append(version)
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace .append(SMSEntry.COMMA).append("ou=").append(serviceName)
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace .append(SMSEntry.COMMA).append(SMSEntry.SERVICES_RDN).append(
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace SMSEntry.COMMA);
684bd353e40f5162c740ab7bf0cb8c4f425da182Sachiko Wallace //DNMapper will map null or empty string to baseDN
684bd353e40f5162c740ab7bf0cb8c4f425da182Sachiko Wallace orgName = DNMapper.orgNameToDN(orgName);
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace sb.append(orgName);
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace return sb.toString();
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace }
793a02c1ab0479a0b1abb478e028814b55bb151aSachiko Wallace
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private static Map serviceInstances = Collections.synchronizedMap(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new HashMap());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private static Map userPrincipals = Collections.synchronizedMap(
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster new HashMap());
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster private static Debug debug = SMSEntry.debug;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster public String toXML() {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster StringBuilder buff = new StringBuilder();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buff.append("<")
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(SMSUtils.INSTANCE)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(" ").append(SMSUtils.NAME).append("=\"").append(name)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append("\"")
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(" ").append(SMSUtils.GROUP).append("=\"").append(group)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append("\"");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if ((uri != null) && (uri.length() > 0)) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buff.append(" ").append(SMSUtils.URI).append("=\"").append(uri)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append("\"");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buff.append(">");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buff.append(SMSUtils.toAttributeValuePairXML(attributes));
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster buff.append("</")
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(SMSUtils.INSTANCE)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster .append(">\n");
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return buff.toString();
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster }
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster}