/** * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://opensso.dev.java.net/public/CDDLv1.0.html or * opensso/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at opensso/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id: LDAPUser.java,v 1.3 2008/06/25 05:41:36 qcheng Exp $ * */ /** * Portions Copyrighted [2011] [ForgeRock AS] */ package com.iplanet.services.ldap; import com.iplanet.services.util.Crypt; import com.iplanet.services.util.GenericNode; import com.iplanet.services.util.ParseOutput; import com.iplanet.services.util.XMLParser; import java.util.Hashtable; import java.util.Vector; /** * This class represents user who is going to be authorized to log onto the * server. This class also contains the user credentials. Currently the * credential information is password only, but it extensible to certificates. */ public class LDAPUser implements ParseOutput { public LDAPUser() { userType = Type.AUTH_ANONYMOUS; } public void process( XMLParser parser, String name, Vector elems, Hashtable atts, String Pcdata ) { if (DSConfigMgr.debugger.messageEnabled()) { DSConfigMgr.debugger.message("in LDAPUser.process()"); } userID = (String) atts.get(DSConfigMgr.NAME); for (int i = 0; i < elems.size(); i++) { GenericNode genNode = (GenericNode) elems.elementAt(i); if (genNode._name.equals(DSConfigMgr.AUTH_ID)) { // Get the bind dn userName = genNode._pcdata; } // The auth type. String str = (String) atts.get(DSConfigMgr.AUTH_TYPE); if (str == null || str.equalsIgnoreCase(DSConfigMgr.VAL_AUTH_BASIC)) { userType = Type.AUTH_BASIC; } else if (str.equalsIgnoreCase(DSConfigMgr.VAL_AUTH_PROXY)) { userType = Type.AUTH_PROXY; } else if (str.equalsIgnoreCase(DSConfigMgr.VAL_AUTH_REBIND)) { userType = Type.AUTH_REBIND; } else if (str.equalsIgnoreCase(DSConfigMgr.VAL_AUTH_ADMIN)) { userType = Type.AUTH_ADMIN; } else { userType = Type.AUTH_ANONYMOUS; } // If this element is the password. if (genNode._name.equals(DSConfigMgr.AUTH_PASSWD)) { userPasswd = genNode._pcdata; } } } /** * Get the authentication ID of this user. * * @return String The LDAP Bind DN */ protected String getAuthID() { if (userName == null) return ANONYMOUS_USER; return userName; } /** * Get the authentication password. * * @return String the bind password. */ protected String getPasswd() { if (userPasswd == null) return ANONYMOUS_PASSWD; /* * return (String) AccessController.doPrivileged( new * DecodeAction(userPasswd)); */ return Crypt.decode(userPasswd); } /** * Get the type of authentication of this user. * * @return Type The authentication type. */ public Type getAuthType() { return userType; } public String getUserID() { return userID; } public static final String ANONYMOUS_USER = ""; public static final String ANONYMOUS_PASSWD = ""; private String userID; private String userName; private Type userType; private String userPasswd; public String toString() { StringBuilder buf = new StringBuilder(); buf.append("UserID="); buf.append(userID); buf.append(" UserName="); buf.append(userName); buf.append(" authType="); buf.append(userType.toString()); buf.append(" authPassword="); buf.append(userPasswd); return buf.toString(); } public static class Type { int authType = -1; /** * The user has anonyomous rights. */ public static final Type AUTH_ANONYMOUS = new Type(0); /** * The user is authenticated with a rootdn and password. */ public static final Type AUTH_BASIC = new Type(1); /** * The user has proxy rights. */ public static final Type AUTH_PROXY = new Type(2); /** * This user must be used only for rebind */ public static final Type AUTH_REBIND = new Type(3); /** * This user has root privilages. */ public static final Type AUTH_ADMIN = new Type(4); private Type(int type) { authType = type; } public boolean equals(Type type) { return (authType == type.authType); } public String toString() { if (equals(AUTH_ANONYMOUS)) { return "ANONYMOUS"; } if (equals(AUTH_BASIC)) { return "BASIC"; } if (equals(AUTH_PROXY)) { return "PROXY"; } if (equals(AUTH_REBIND)) { return "REBIND"; } if (equals(AUTH_ADMIN)) { return "ADMIN"; } return "ANONYMOUS"; } } }