diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/RequestValidator.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/RequestValidator.java index 25889a6903b852534cd6ae2e165884ec90dc8b2a..f35fef417dbc5f90ca550c1013783e649c52f043 100644 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/RequestValidator.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/RequestValidator.java @@ -68,16 +68,16 @@ */ package ca.nrc.cadc.ac.server; -import ca.nrc.cadc.ac.IdentityType; +import java.security.Principal; +import java.util.List; + +import org.apache.log4j.Logger; + import ca.nrc.cadc.ac.Role; import ca.nrc.cadc.auth.AuthenticationUtil; import ca.nrc.cadc.uws.Parameter; import ca.nrc.cadc.uws.ParameterUtil; -import java.security.Principal; -import java.util.List; -import org.apache.log4j.Logger; - /** * Request Validator. This class extracts and validates the ID, TYPE, ROLE * and GURI parameters. diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java index c6b9221c59c58a15699d495f1239b43d2fc30683..c3e33dca2cfe6a99fd87095489074f8ff234f804 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/ldap/LdapUserDAO.java @@ -79,15 +79,13 @@ import javax.security.auth.x500.X500Principal; import org.apache.log4j.Logger; -import ca.nrc.cadc.ac.Group; import ca.nrc.cadc.ac.PersonalDetails; import ca.nrc.cadc.ac.User; import ca.nrc.cadc.ac.UserNotFoundException; +import ca.nrc.cadc.auth.AuthenticationUtil; import ca.nrc.cadc.auth.HttpPrincipal; import ca.nrc.cadc.net.TransientException; -import com.unboundid.ldap.sdk.CompareRequest; -import com.unboundid.ldap.sdk.CompareResult; import com.unboundid.ldap.sdk.DN; import com.unboundid.ldap.sdk.Filter; import com.unboundid.ldap.sdk.LDAPException; @@ -128,6 +126,8 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO System.arraycopy(memberAttribs, 0, tmp, princs.length, memberAttribs.length); memberAttribs = tmp; } + + /** * Get the user specified by userID. @@ -409,7 +409,7 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO } searchField = "(" + searchField + "=" + - user.getUserID().getName() + ")"; + user.getUserID().getName() + ")"; SearchResultEntry searchResult = null; try @@ -425,11 +425,10 @@ public class LdapUserDAO<T extends Principal> extends LdapDAO { LdapDAO.checkLdapResult(e.getResultCode()); } - if (searchResult == null) { - String msg = "User not found " + user.getUserID().toString(); + String msg = "User not found " + user.getUserID().getName(); logger.debug(msg); throw new UserNotFoundException(msg); } diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java index 6ceca04328afecd0a281618cd0c089185452c251..f654e88928617663c2f13e18ec4fa8d75d6bfdb0 100755 --- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java +++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/ACSearchRunner.java @@ -74,8 +74,11 @@ import java.security.AccessController; import java.security.Principal; import java.util.Collection; import java.util.Date; +import java.util.Iterator; +import java.util.Set; import javax.security.auth.Subject; +import javax.security.auth.x500.X500Principal; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; @@ -87,6 +90,8 @@ import ca.nrc.cadc.ac.UserNotFoundException; import ca.nrc.cadc.ac.server.GroupPersistence; import ca.nrc.cadc.ac.server.PluginFactory; import ca.nrc.cadc.ac.server.RequestValidator; +import ca.nrc.cadc.auth.AuthenticationUtil; +import ca.nrc.cadc.auth.HttpPrincipal; import ca.nrc.cadc.net.TransientException; import ca.nrc.cadc.uws.ExecutionPhase; import ca.nrc.cadc.uws.Job; @@ -125,15 +130,31 @@ public class ACSearchRunner implements JobRunner @Override public void run() { - log.debug("RUN ACSearchRunner: " + job.ownerSubject); + AccessControlContext acContext = AccessController.getContext(); + Subject subject = Subject.getSubject(acContext); + + log.debug("RUN ACSearchRunner: " + subject); + if (log.isDebugEnabled()) + { + Set<Principal> principals = subject.getPrincipals(); + Iterator<Principal> i = principals.iterator(); + while (i.hasNext()) + { + Principal next = i.next(); + log.debug("Principal " + + next.getClass().getSimpleName() + + ": " + next.getName()); + } + } logInfo = new JobLogInfo(job); + logInfo.setSubject(subject); String startMessage = logInfo.start(); log.info(startMessage); long t1 = System.currentTimeMillis(); - search(); + search(subject); long t2 = System.currentTimeMillis(); logInfo.setElapsedTime(t2 - t1); @@ -143,7 +164,7 @@ public class ACSearchRunner implements JobRunner } @SuppressWarnings("unchecked") - private void search() + private void search(Subject subject) { // Note: This search runner is customized to run with @@ -156,8 +177,6 @@ public class ACSearchRunner implements JobRunner try { - - ExecutionPhase ep = jobUpdater.setPhase(job.getID(), ExecutionPhase.QUEUED, ExecutionPhase.EXECUTING, new Date()); @@ -172,21 +191,37 @@ public class ACSearchRunner implements JobRunner // only allow users to search themselves... Principal userBeingSearched = rv.getPrincipal(); - if (userBeingSearched != null) + + boolean idMatch = false; + if (userBeingSearched instanceof X500Principal) { - AccessControlContext acContext = AccessController.getContext(); - Subject subject = Subject.getSubject(acContext); - boolean idMatch = false; - for (Principal p : subject.getPrincipals()) + Set<X500Principal> x500Principals = subject.getPrincipals(X500Principal.class); + Iterator<X500Principal> i = x500Principals.iterator(); + while (i.hasNext()) { - if (p.equals(userBeingSearched)) + X500Principal next = i.next(); + log.debug(String.format("Comparing x500: [%s][%s]", + next.getName(), userBeingSearched.getName())); + if (AuthenticationUtil.equals(next, userBeingSearched)) idMatch = true; } - if (!idMatch) - throw new AccessControlException("Can only search oneself."); } + else if (userBeingSearched instanceof HttpPrincipal) + { + Set<HttpPrincipal> httpPrincipals = subject.getPrincipals(HttpPrincipal.class); + Iterator<HttpPrincipal> i = httpPrincipals.iterator(); + while (i.hasNext()) + { + HttpPrincipal next = i.next(); + log.debug(String.format("Comparing http: [%s][%s]", + next.getName(), userBeingSearched.getName())); + if (next.equals(userBeingSearched)) + idMatch = true; + } + } + if (!idMatch) + throw new AccessControlException("Can only search oneself."); - PluginFactory factory = new PluginFactory(); GroupPersistence dao = factory.getGroupPersistence(); Collection<Group> groups =