summaryrefslogtreecommitdiffstats
path: root/base
diff options
context:
space:
mode:
authorAde Lee <alee@redhat.com>2013-08-21 11:39:03 -0400
committerAde Lee <alee@redhat.com>2013-08-21 15:39:46 -0400
commit7f829d6ea87537a689edd0546eae25f4e13f558c (patch)
tree2ab11d8460800aca67aeef5e77a8ef0c85447c1e /base
parent6d99354ce9e2f1250538eb31a8b7e2e788518892 (diff)
downloadpki-7f829d6ea87537a689edd0546eae25f4e13f558c.tar.gz
pki-7f829d6ea87537a689edd0546eae25f4e13f558c.tar.xz
pki-7f829d6ea87537a689edd0546eae25f4e13f558c.zip
Add TPS profile ID auxilliary object to tps users
Diffstat (limited to 'base')
-rw-r--r--base/common/src/com/netscape/certsrv/user/UserData.java62
-rw-r--r--base/common/src/com/netscape/certsrv/user/UserResource.java3
-rw-r--r--base/common/src/com/netscape/certsrv/usrgrp/IUser.java13
-rw-r--r--base/common/src/com/netscape/certsrv/usrgrp/IUserConstants.java5
-rw-r--r--base/common/src/com/netscape/cms/servlet/admin/UserService.java38
-rw-r--r--base/common/src/com/netscape/cms/servlet/csadmin/ConfigurationUtils.java14
-rw-r--r--base/common/src/com/netscape/cms/servlet/csadmin/SystemConfigService.java6
-rw-r--r--base/common/src/com/netscape/cmscore/usrgrp/UGSubsystem.java86
-rw-r--r--base/common/src/com/netscape/cmscore/usrgrp/User.java33
-rw-r--r--base/java-tools/src/com/netscape/cmstools/user/UserCLI.java9
10 files changed, 263 insertions, 6 deletions
diff --git a/base/common/src/com/netscape/certsrv/user/UserData.java b/base/common/src/com/netscape/certsrv/user/UserData.java
index b62d02231..da771f2e7 100644
--- a/base/common/src/com/netscape/certsrv/user/UserData.java
+++ b/base/common/src/com/netscape/certsrv/user/UserData.java
@@ -20,6 +20,10 @@ package com.netscape.certsrv.user;
import java.io.StringReader;
import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
import javax.ws.rs.FormParam;
import javax.xml.bind.JAXBContext;
@@ -28,6 +32,9 @@ import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlValue;
+import javax.xml.bind.annotation.adapters.XmlAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.jboss.resteasy.plugins.providers.atom.Link;
@@ -62,6 +69,18 @@ public class UserData {
Link link;
+ @XmlElement(name="Attributes")
+ @XmlJavaTypeAdapter(MapAdapter.class)
+ Map<String, String> attributes = new LinkedHashMap<String, String>();
+
+ public String getAttribute(String name) {
+ return attributes.get(name);
+ }
+
+ public void setAttribute(String name, String value) {
+ attributes.put(name, value);
+ }
+
@XmlAttribute(name="id")
public String getID() {
return id;
@@ -144,6 +163,7 @@ public class UserData {
public int hashCode() {
final int prime = 31;
int result = 1;
+ result = prime * result + ((attributes == null) ? 0 : attributes.hashCode());
result = prime * result + ((email == null) ? 0 : email.hashCode());
result = prime * result + ((fullName == null) ? 0 : fullName.hashCode());
result = prime * result + ((id == null) ? 0 : id.hashCode());
@@ -163,6 +183,11 @@ public class UserData {
if (getClass() != obj.getClass())
return false;
UserData other = (UserData) obj;
+ if (attributes == null) {
+ if (other.attributes != null)
+ return false;
+ } else if (!attributes.equals(other.attributes))
+ return false;
if (email == null) {
if (other.email != null)
return false;
@@ -220,6 +245,43 @@ public class UserData {
}
}
+ public static class MapAdapter extends XmlAdapter<AttributeList, Map<String, String>> {
+
+ public AttributeList marshal(Map<String, String> map) {
+ AttributeList list = new AttributeList();
+ for (Map.Entry<String, String> entry : map.entrySet()) {
+ Attribute attribute = new Attribute();
+ attribute.name = entry.getKey();
+ attribute.value = entry.getValue();
+ list.attributes.add(attribute);
+ }
+ return list;
+ }
+
+ public Map<String, String> unmarshal(AttributeList list) {
+ Map<String, String> map = new LinkedHashMap<String, String>();
+ for (Attribute attribute : list.attributes) {
+ map.put(attribute.name, attribute.value);
+ }
+ return map;
+ }
+ }
+
+ public static class AttributeList {
+ @XmlElement(name="Attribute")
+ public List<Attribute> attributes = new ArrayList<Attribute>();
+ }
+
+ public static class Attribute {
+
+ @XmlAttribute
+ public String name;
+
+ @XmlValue
+ public String value;
+ }
+
+
public static void main(String args[]) throws Exception {
UserData before = new UserData();
diff --git a/base/common/src/com/netscape/certsrv/user/UserResource.java b/base/common/src/com/netscape/certsrv/user/UserResource.java
index 078992897..a0f5f1db5 100644
--- a/base/common/src/com/netscape/certsrv/user/UserResource.java
+++ b/base/common/src/com/netscape/certsrv/user/UserResource.java
@@ -42,6 +42,9 @@ import com.netscape.certsrv.authentication.AuthMethodMapping;
@AuthMethodMapping("admin")
public interface UserResource {
+ public static final String ATTR_TPS_PROFILES = "tpsProfiles";
+ public static final String ALL_PROFILES = "All Profiles";
+
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public UserCollection findUsers(
diff --git a/base/common/src/com/netscape/certsrv/usrgrp/IUser.java b/base/common/src/com/netscape/certsrv/usrgrp/IUser.java
index 7c957fd8a..af0d38336 100644
--- a/base/common/src/com/netscape/certsrv/usrgrp/IUser.java
+++ b/base/common/src/com/netscape/certsrv/usrgrp/IUser.java
@@ -18,6 +18,7 @@
package com.netscape.certsrv.usrgrp;
import java.security.cert.X509Certificate;
+import java.util.List;
import com.netscape.certsrv.base.IAttrSet;
@@ -168,4 +169,16 @@ public interface IUser extends IAttrSet, IUserConstants {
* @return user type.
*/
public String getUserType();
+
+ /**
+ * Get TPS profiles
+ * @return
+ */
+ public List<String> getTpsProfiles();
+
+ /**
+ * Set TPS profiles
+ * @param tpsProfiles
+ */
+ public void setTpsProfiles(List<String> tpsProfiles);
}
diff --git a/base/common/src/com/netscape/certsrv/usrgrp/IUserConstants.java b/base/common/src/com/netscape/certsrv/usrgrp/IUserConstants.java
index dbfe9a38b..350f7d7fd 100644
--- a/base/common/src/com/netscape/certsrv/usrgrp/IUserConstants.java
+++ b/base/common/src/com/netscape/certsrv/usrgrp/IUserConstants.java
@@ -63,4 +63,9 @@ public interface IUserConstants {
* Constant for usertype
*/
public static final String ATTR_USERTYPE = "usertype";
+
+ /**
+ * Constant for usertype
+ */
+ public static final String ATTR_TPS_PROFILES = "tpsProfiles";
}
diff --git a/base/common/src/com/netscape/cms/servlet/admin/UserService.java b/base/common/src/com/netscape/cms/servlet/admin/UserService.java
index 947d1731e..a098980cd 100644
--- a/base/common/src/com/netscape/cms/servlet/admin/UserService.java
+++ b/base/common/src/com/netscape/cms/servlet/admin/UserService.java
@@ -20,7 +20,9 @@ package com.netscape.cms.servlet.admin;
import java.net.URI;
import java.net.URLEncoder;
+import java.util.Arrays;
import java.util.Enumeration;
+import java.util.List;
import java.util.Map;
import javax.ws.rs.core.MediaType;
@@ -36,6 +38,7 @@ import com.netscape.certsrv.base.BadRequestDataException;
import com.netscape.certsrv.base.BadRequestException;
import com.netscape.certsrv.base.EBaseException;
import com.netscape.certsrv.base.ForbiddenException;
+import com.netscape.certsrv.base.IConfigStore;
import com.netscape.certsrv.base.PKIException;
import com.netscape.certsrv.base.UserNotFoundException;
import com.netscape.certsrv.common.OpDef;
@@ -178,6 +181,19 @@ public class UserService extends PKIService implements UserResource {
String type = user.getUserType();
if (!StringUtils.isEmpty(type)) userData.setType(type);
+ List<String> profiles = user.getTpsProfiles();
+ if (profiles != null) {
+ StringBuilder sb = new StringBuilder();
+ String prefix = "";
+ for (String profile: profiles) {
+ sb.append(prefix);
+ prefix = ",";
+ sb.append(profile);
+ }
+
+ userData.setAttribute(ATTR_TPS_PROFILES, sb.toString());
+ }
+
return userData;
} catch (PKIException e) {
@@ -205,6 +221,7 @@ public class UserService extends PKIService implements UserResource {
@Override
public Response addUser(UserData userData) {
+ IConfigStore cs = CMS.getConfigStore();
String userID = userData.getID();
// ensure that any low-level exceptions are reported
@@ -279,6 +296,16 @@ public class UserService extends PKIService implements UserResource {
user.setState(state);
}
+ String tpsProfiles = userData.getAttribute(ATTR_TPS_PROFILES);
+ String csType = cs.getString("cs.type");
+ if (tpsProfiles != null) {
+ if (!csType.equals("TPS")) {
+ throw new BadRequestDataException("Cannot set tpsProfiles on a non-TPS subsystem");
+ }
+ String[] profiles = tpsProfiles.split(",");
+ user.setTpsProfiles(Arrays.asList(profiles));
+ }
+
try {
userGroupManager.addUser(user);
@@ -339,6 +366,7 @@ public class UserService extends PKIService implements UserResource {
// ensure that any low-level exceptions are reported
// to the signed audit log and stored as failures
+ IConfigStore cs = CMS.getConfigStore();
try {
if (userID == null) {
log(ILogger.LL_FAILURE, CMS.getLogMessage("ADMIN_SRVLT_NULL_RS_ID"));
@@ -378,6 +406,16 @@ public class UserService extends PKIService implements UserResource {
user.setState(state);
}
+ String tpsProfiles = userData.getAttribute(ATTR_TPS_PROFILES);
+ String csType = cs.getString("cs.type");
+ if (tpsProfiles != null) {
+ if (!csType.equals("TPS")) {
+ throw new BadRequestDataException("Cannot set tpsProfiles on a non-TPS subsystem");
+ }
+ String[] profiles = tpsProfiles.split(",");
+ user.setTpsProfiles(Arrays.asList(profiles));
+ }
+
try {
userGroupManager.modifyUser(user);
diff --git a/base/common/src/com/netscape/cms/servlet/csadmin/ConfigurationUtils.java b/base/common/src/com/netscape/cms/servlet/csadmin/ConfigurationUtils.java
index 1ca0476a6..2371848ec 100644
--- a/base/common/src/com/netscape/cms/servlet/csadmin/ConfigurationUtils.java
+++ b/base/common/src/com/netscape/cms/servlet/csadmin/ConfigurationUtils.java
@@ -48,6 +48,7 @@ import java.security.cert.CertificateException;
import java.security.interfaces.RSAPublicKey;
import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;
@@ -155,6 +156,7 @@ import com.netscape.certsrv.usrgrp.EUsrGrpException;
import com.netscape.certsrv.usrgrp.IGroup;
import com.netscape.certsrv.usrgrp.IUGSubsystem;
import com.netscape.certsrv.usrgrp.IUser;
+import com.netscape.cms.servlet.admin.UserService;
import com.netscape.cmsutil.crypto.CryptoUtil;
import com.netscape.cmsutil.http.HttpClient;
import com.netscape.cmsutil.http.HttpRequest;
@@ -3679,6 +3681,18 @@ public class ConfigurationUtils {
removeOldDBUsers(certs[0].getSubjectDN().toString());
}
+ public static void addProfilesToTPSUser(String adminID) throws EUsrGrpException {
+ CMS.debug("Adding all profiles to TPS admin user");
+ IUGSubsystem system = (IUGSubsystem) CMS.getSubsystem(IUGSubsystem.ID);
+ IUser user = system.getUser(adminID);
+
+ List<String> profiles = new ArrayList<String>();
+ profiles.add(UserService.ALL_PROFILES);
+
+ user.setTpsProfiles(profiles);
+ system.modifyUser(user);
+ }
+
public static void registerUser(URI secdomainURI, URI targetURI, String targetType) throws Exception {
IConfigStore cs = CMS.getConfigStore();
String csType = cs.getString("cs.type");
diff --git a/base/common/src/com/netscape/cms/servlet/csadmin/SystemConfigService.java b/base/common/src/com/netscape/cms/servlet/csadmin/SystemConfigService.java
index ce82c9348..c834eef3f 100644
--- a/base/common/src/com/netscape/cms/servlet/csadmin/SystemConfigService.java
+++ b/base/common/src/com/netscape/cms/servlet/csadmin/SystemConfigService.java
@@ -467,13 +467,15 @@ public class SystemConfigService extends PKIService implements SystemConfigResou
if (csType.equals("TPS")) {
try {
+ ConfigurationUtils.addProfilesToTPSUser(data.getAdminUID());
+
URI secdomainURI = new URI(data.getSecurityDomainUri());
- // register tps with ca
+ // register TPS with CA
URI caURI = new URI(data.getCaUri());
ConfigurationUtils.registerUser(secdomainURI, caURI, "ca");
- // register tps with tks
+ // register TPS with TKS
URI tksURI = new URI(data.getTksUri());
ConfigurationUtils.registerUser(secdomainURI, tksURI, "tks");
diff --git a/base/common/src/com/netscape/cmscore/usrgrp/UGSubsystem.java b/base/common/src/com/netscape/cmscore/usrgrp/UGSubsystem.java
index 034357b6e..3833c2937 100644
--- a/base/common/src/com/netscape/cmscore/usrgrp/UGSubsystem.java
+++ b/base/common/src/com/netscape/cmscore/usrgrp/UGSubsystem.java
@@ -19,7 +19,10 @@ package com.netscape.cmscore.usrgrp;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.Enumeration;
+import java.util.List;
import java.util.Vector;
import netscape.ldap.LDAPAttribute;
@@ -75,6 +78,7 @@ public final class UGSubsystem implements IUGSubsystem {
protected static final String LDAP_ATTR_USER_CERT_STRING = "description";
protected static final String LDAP_ATTR_CERTDN = "seeAlso";
protected static final String LDAP_ATTR_USER_CERT = "userCertificate";
+ protected static final String LDAP_ATTR_PROFILE_ID = "profileID";
protected static final String PROP_BASEDN = "basedn";
@@ -624,6 +628,13 @@ public final class UGSubsystem implements IUGSubsystem {
}
}
+ LDAPAttribute profileAttr = entry.getAttribute(LDAP_ATTR_PROFILE_ID);
+ if (profileAttr != null) {
+ @SuppressWarnings("unchecked")
+ Enumeration<String> profiles = profileAttr.getStringValues();
+ id.setTpsProfiles(Collections.list(profiles));
+ }
+
return id;
}
@@ -647,10 +658,21 @@ public final class UGSubsystem implements IUGSubsystem {
}
LDAPAttributeSet attrs = new LDAPAttributeSet();
- String oc[] = { "top", "person", "organizationalPerson",
- "inetOrgPerson", "cmsuser" };
+ List<String> oclist = new ArrayList<String>();
+ oclist.add("top");
+ oclist.add("person");
+ oclist.add("organizationalPerson");
+ oclist.add("inetOrgPerson");
+ oclist.add("cmsuser");
- attrs.add(new LDAPAttribute("objectclass", oc));
+ if (id.getTpsProfiles() != null) {
+ oclist.add("tpsProfileID");
+ }
+
+ String oc[] = new String[oclist.size()];
+ oc = oclist.toArray(oc);
+
+ attrs.add(new LDAPAttribute(OBJECTCLASS_ATTR, oc));
attrs.add(new LDAPAttribute("uid", id.getUserID()));
attrs.add(new LDAPAttribute("sn", id.getFullName()));
attrs.add(new LDAPAttribute("cn", id.getFullName()));
@@ -685,6 +707,14 @@ public final class UGSubsystem implements IUGSubsystem {
}
}
+ // TODO add audit logging for profile
+ if (id.getTpsProfiles() != null) {
+ List<String> profiles = id.getTpsProfiles();
+ for (String profile: profiles) {
+ attrs.add(new LDAPAttribute(LDAP_ATTR_PROFILE_ID, profile));
+ }
+ }
+
LDAPEntry entry = new LDAPEntry("uid=" + LDAPUtil.escapeRDNValue(id.getUserID()) +
"," + getUserBaseDN(), attrs);
// for audit log
@@ -1074,6 +1104,7 @@ public final class UGSubsystem implements IUGSubsystem {
}
}
+
/**
* modifies user attributes. Certs are handled separately
*/
@@ -1147,6 +1178,55 @@ public final class UGSubsystem implements IUGSubsystem {
}
}
+ if (user.getTpsProfiles() != null) {
+ // TODO add audit logging for profile
+
+ // replace the objectclass in case tpsProfile is not present
+ String oc[] = { "top", "person", "organizationalPerson",
+ "inetOrgPerson", "cmsuser", "tpsProfileID" };
+ attrs.add(LDAPModification.REPLACE,
+ new LDAPAttribute(OBJECTCLASS_ATTR, oc));
+
+ User ldapUser = (User) getUser(user.getUserID());
+ List<String> oldProfiles = ldapUser.getTpsProfiles();
+ List<String> profiles = user.getTpsProfiles();
+
+ if (oldProfiles == null) {
+ for (String profile : profiles) {
+ attrs.add(LDAPModification.ADD,
+ new LDAPAttribute(LDAP_ATTR_PROFILE_ID, profile));
+ }
+ } else {
+ for (String profile : profiles) {
+ boolean found = false;
+ for (String oldProfile : oldProfiles) {
+ if (profile.equals(oldProfile)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ attrs.add(LDAPModification.ADD,
+ new LDAPAttribute(LDAP_ATTR_PROFILE_ID, profile));
+ }
+ }
+
+ for (String oldProfile : oldProfiles) {
+ boolean found = false;
+ for (String profile : profiles) {
+ if (profile.equals(oldProfile)) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ attrs.add(LDAPModification.DELETE,
+ new LDAPAttribute(LDAP_ATTR_PROFILE_ID, oldProfile));
+ }
+ }
+ }
+ }
+
/**
* if ((certs = user.getCertificates()) != null) {
* LDAPAttribute attrCertStr = new
diff --git a/base/common/src/com/netscape/cmscore/usrgrp/User.java b/base/common/src/com/netscape/cmscore/usrgrp/User.java
index 533477501..ef09a1ab5 100644
--- a/base/common/src/com/netscape/cmscore/usrgrp/User.java
+++ b/base/common/src/com/netscape/cmscore/usrgrp/User.java
@@ -18,13 +18,16 @@
package com.netscape.cmscore.usrgrp;
import java.security.cert.X509Certificate;
+import java.util.ArrayList;
import java.util.Enumeration;
+import java.util.List;
import java.util.Vector;
import com.netscape.certsrv.apps.CMS;
import com.netscape.certsrv.base.EBaseException;
import com.netscape.certsrv.usrgrp.IUser;
import com.netscape.certsrv.usrgrp.IUsrGrp;
+import com.netscape.cms.servlet.admin.UserService;
/**
* A class represents a user.
@@ -51,6 +54,7 @@ public class User implements IUser {
private String mCertDN = null;
private String mUserType = null;
private X509Certificate mx509Certs[] = null;
+ private List<String> tpsProfiles = null;
private static final Vector<String> mNames = new Vector<String>();
static {
@@ -60,9 +64,31 @@ public class User implements IUser {
mNames.addElement(ATTR_PASSWORD);
mNames.addElement(ATTR_STATE);
mNames.addElement(ATTR_EMAIL);
- // mNames.addElement(ATTR_PHONENUMBER);
+ // mNames.addElement(ATTR_PHONENUMBER);
mNames.addElement(ATTR_X509_CERTIFICATES);
mNames.addElement(ATTR_USERTYPE);
+ mNames.addElement(ATTR_TPS_PROFILES);
+ }
+
+ public List<String> getTpsProfiles() {
+ return tpsProfiles;
+ }
+
+ public void setTpsProfiles(List<String> tpsProfiles) {
+ boolean setAll = false;
+ for (String profile: tpsProfiles) {
+ if (profile.equals(UserService.ALL_PROFILES)) {
+ setAll = true;
+ break;
+ }
+ }
+ if (!setAll) {
+ this.tpsProfiles = tpsProfiles;
+ } else {
+ List<String> list = new ArrayList<String>();
+ list.add(UserService.ALL_PROFILES);
+ this.tpsProfiles = list;
+ }
}
/**
@@ -169,6 +195,7 @@ public class User implements IUser {
mCertDN = dn;
}
+ @SuppressWarnings("unchecked")
public void set(String name, Object object) throws EBaseException {
if (name.equals(ATTR_NAME)) {
throw new EBaseException(CMS.getUserMessage("CMS_BASE_INVALID_ATTRIBUTE", name));
@@ -184,6 +211,8 @@ public class User implements IUser {
setX509Certificates((X509Certificate[]) object);
} else if (name.equals(ATTR_USERTYPE)) {
setUserType((String) object);
+ } else if (name.equals(ATTR_TPS_PROFILES)) {
+ setTpsProfiles((List<String>) object);
} else {
throw new EBaseException(CMS.getUserMessage("CMS_BASE_INVALID_ATTRIBUTE", name));
}
@@ -204,6 +233,8 @@ public class User implements IUser {
return getX509Certificates();
} else if (name.equals(ATTR_USERTYPE)) {
return getUserType();
+ } else if (name.equals(ATTR_TPS_PROFILES)) {
+ return getTpsProfiles();
} else {
throw new EBaseException(CMS.getUserMessage("CMS_BASE_INVALID_ATTRIBUTE", name));
}
diff --git a/base/java-tools/src/com/netscape/cmstools/user/UserCLI.java b/base/java-tools/src/com/netscape/cmstools/user/UserCLI.java
index 2343d1989..b111f1558 100644
--- a/base/java-tools/src/com/netscape/cmstools/user/UserCLI.java
+++ b/base/java-tools/src/com/netscape/cmstools/user/UserCLI.java
@@ -27,6 +27,7 @@ import com.netscape.certsrv.user.UserCertData;
import com.netscape.certsrv.user.UserClient;
import com.netscape.certsrv.user.UserData;
import com.netscape.certsrv.user.UserMembershipData;
+import com.netscape.certsrv.user.UserResource;
import com.netscape.cmstools.cli.CLI;
import com.netscape.cmstools.cli.MainCLI;
@@ -134,6 +135,14 @@ public class UserCLI extends CLI {
if (verbose && link != null) {
System.out.println(" Link: " + link.getHref());
}
+
+ String tpsProfiles = userData.getAttribute(UserResource.ATTR_TPS_PROFILES);
+ if (tpsProfiles != null) {
+ System.out.println(" TPS Profiles:");
+ for (String profile: tpsProfiles.split(",")) {
+ System.out.println(" " + profile);
+ }
+ }
}
public static void printCert(