Commit db6cf4e0 authored by Jeff Burke's avatar Jeff Burke
Browse files

Merge branch 's1890' of gimli2:/srv/cadc/git/ac into s1890

parents 665f763b 4e9dbfc2
Loading
Loading
Loading
Loading
+44 −30
Original line number Original line Diff line number Diff line
@@ -1109,30 +1109,53 @@ public class LdapUserDAO extends LdapDAO
        }
        }
    }
    }


    private Principal getPreferredPrincipal(User user)
    {
        Principal ret = null;
        Principal next = null;
        Iterator<Principal> i = user.getIdentities().iterator();
        while (i.hasNext())
        {
            next = i.next();
            if (next instanceof NumericPrincipal)
            {
                return next;
            }
            ret = next;
        }
        return ret;
    }

    DN getUserDN(User user)
    DN getUserDN(User user)
        throws UserNotFoundException, TransientException
        throws UserNotFoundException, TransientException, LDAPException
    {
    {
        // Could be a DNPrincipal from a memberOf or uniquemember entrydn
        Principal p = getPreferredPrincipal(user);
        Principal userID = user.getHttpPrincipal();
        if (p == null)
        String searchField = userLdapAttrib.get(userID.getClass());
        {
            throw new UserNotFoundException("No identities");
        }

        // DN can be formulated if it is the numeric id
        if (p instanceof NumericPrincipal)
            return this.getUserDN(p.getName(), config.getUsersDN());

        // Otherwise we need to search for the numeric id
        String searchField = userLdapAttrib.get(p.getClass());
        if (searchField == null)
        if (searchField == null)
        {
        {
            throw new IllegalArgumentException(
            throw new IllegalArgumentException(
                    "Unsupported principal type " + userID.getClass());
                    "Unsupported principal type " + p.getClass());
        }
        }


//      change the DN to be in the 'java' format
//      change the DN to be in the 'java' format
        Filter filter;
//      if (userID instanceof X500Principal)
//      if (userID instanceof X500Principal)
//      {
//      {
//          X500Principal orderedPrincipal = AuthenticationUtil.getOrderedForm(
//          X500Principal orderedPrincipal = AuthenticationUtil.getOrderedForm(
//              (X500Principal) userID);
//              (X500Principal) userID);
//          filter = Filter.createEqualityFilter(searchField, orderedPrincipal.toString());
//          filter = Filter.createEqualityFilter(searchField, orderedPrincipal.toString());
//      }
//      }
//        else

//        {
        Filter filter = Filter.createEqualityFilter(searchField, p.getName());
            filter = Filter.createEqualityFilter(searchField, userID.getName());
//        }
        logger.debug("search filter: " + filter);
        logger.debug("search filter: " + filter);


        SearchResultEntry searchResult = null;
        SearchResultEntry searchResult = null;
@@ -1141,7 +1164,7 @@ public class LdapUserDAO extends LdapDAO
            SearchRequest searchRequest = new SearchRequest(
            SearchRequest searchRequest = new SearchRequest(
                config.getUsersDN(), SearchScope.ONE, filter, LDAP_ENTRYDN);
                config.getUsersDN(), SearchScope.ONE, filter, LDAP_ENTRYDN);
            searchResult = getReadOnlyConnection().searchForEntry(searchRequest);
            searchResult = getReadOnlyConnection().searchForEntry(searchRequest);
            logger.info("getUserDN: got " + userID.getName() + " from " + config.getUsersDN());
            logger.debug("getUserDN: got " + p.getName() + " from " + config.getUsersDN());
        }
        }
        catch (LDAPException e)
        catch (LDAPException e)
        {
        {
@@ -1150,26 +1173,17 @@ public class LdapUserDAO extends LdapDAO


        if (searchResult == null)
        if (searchResult == null)
        {
        {
            String msg = "User not found " + userID.getName() + " in " + config.getUsersDN();
            String msg = "User not found " + p.getName() + " in " + config.getUsersDN();
            logger.debug(msg);
            logger.debug(msg);
            throw new UserNotFoundException(msg);
            throw new UserNotFoundException(msg);
        }
        }
        return searchResult.getAttributeValueAsDN(LDAP_ENTRYDN);
        return searchResult.getAttributeValueAsDN(LDAP_ENTRYDN);
    }
    }


    protected DN getUserDN(final String userID, final String usersDN)
    protected DN getUserDN(String numericID, String usersDN)
            throws LDAPException, TransientException
            throws LDAPException, TransientException
    {
    {
        try
        return new DN(LDAP_UID + "=" + numericID + "," + usersDN);
        {
            return new DN(LDAP_UID + "=" + userID + "," + usersDN);
        }
        catch (LDAPException e)
        {
            logger.debug("getUserDN Exception: " + e, e);
            LdapDAO.checkLdapResult(e.getResultCode());
        }
        throw new IllegalArgumentException(userID + " not a valid user ID");
    }
    }


    private void addAttribute(List<Attribute> attributes, final String name, final String value)
    private void addAttribute(List<Attribute> attributes, final String name, final String value)
+22 −19
Original line number Original line Diff line number Diff line
@@ -69,12 +69,14 @@
package ca.nrc.cadc.ac.server.web.groups;
package ca.nrc.cadc.ac.server.web.groups;


import java.io.IOException;
import java.io.IOException;
import java.lang.reflect.Field;
import java.security.AccessControlException;
import java.security.AccessControlException;
import java.security.Principal;
import java.security.PrivilegedActionException;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.security.PrivilegedExceptionAction;
import java.util.Iterator;
import java.util.List;
import java.util.List;


import javax.security.auth.x500.X500Principal;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequest;


import org.apache.log4j.Logger;
import org.apache.log4j.Logger;
@@ -83,9 +85,11 @@ import ca.nrc.cadc.ac.GroupAlreadyExistsException;
import ca.nrc.cadc.ac.GroupNotFoundException;
import ca.nrc.cadc.ac.GroupNotFoundException;
import ca.nrc.cadc.ac.MemberAlreadyExistsException;
import ca.nrc.cadc.ac.MemberAlreadyExistsException;
import ca.nrc.cadc.ac.MemberNotFoundException;
import ca.nrc.cadc.ac.MemberNotFoundException;
import ca.nrc.cadc.ac.User;
import ca.nrc.cadc.ac.UserNotFoundException;
import ca.nrc.cadc.ac.UserNotFoundException;
import ca.nrc.cadc.ac.server.GroupPersistence;
import ca.nrc.cadc.ac.server.GroupPersistence;
import ca.nrc.cadc.ac.server.web.SyncOutput;
import ca.nrc.cadc.ac.server.web.SyncOutput;
import ca.nrc.cadc.auth.HttpPrincipal;
import ca.nrc.cadc.net.TransientException;
import ca.nrc.cadc.net.TransientException;


public abstract class AbstractGroupAction implements PrivilegedExceptionAction<Object>
public abstract class AbstractGroupAction implements PrivilegedExceptionAction<Object>
@@ -233,27 +237,26 @@ public abstract class AbstractGroupAction implements PrivilegedExceptionAction<O
        this.logInfo.deletedMembers = deletedMembers;
        this.logInfo.deletedMembers = deletedMembers;
    }
    }


    // set private field using reflection
    protected String getUseridForLogging(User u)
    protected void setField(Object object, Object value, String name)
    {
    {
        try
        if (u.getIdentities().isEmpty())
        {
            return "anonUser";
            Field field = object.getClass().getDeclaredField(name);

            field.setAccessible(true);
        Iterator<Principal> i = u.getIdentities().iterator();
            field.set(object, value);
        String ret = null;
        }
        Principal next = null;
        catch (NoSuchFieldException e)
        while (i.hasNext())
        {
            final String error = object.getClass().getSimpleName() +
                " field " + name + "not found";
            throw new RuntimeException(error, e);
        }
        catch (IllegalAccessException e)
        {
        {
            final String error = "unable to update " + name + " in " +
            next = i.next();
                object.getClass().getSimpleName();
            if (next instanceof HttpPrincipal)
            throw new RuntimeException(error, e);
                return next.getName();
            if (next instanceof X500Principal)
                ret = next.getName();
            else if (ret == null)
                ret = next.getName();
        }
        }
        return ret;
    }
    }



}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -107,7 +107,7 @@ public class AddUserMemberAction extends AbstractGroupAction
        groupPersistence.modifyGroup(group);
        groupPersistence.modifyGroup(group);


        List<String> addedMembers = new ArrayList<String>();
        List<String> addedMembers = new ArrayList<String>();
        addedMembers.add(toAdd.getHttpPrincipal().getName());
        addedMembers.add(getUseridForLogging(toAdd));
        logGroupInfo(group.getID(), null, addedMembers);
        logGroupInfo(group.getID(), null, addedMembers);
    }
    }


+2 −2
Original line number Original line Diff line number Diff line
@@ -102,7 +102,7 @@ public class ModifyGroupAction extends AbstractGroupAction
        {
        {
            if (!oldGroup.getUserMembers().remove(member))
            if (!oldGroup.getUserMembers().remove(member))
            {
            {
                addedMembers.add(member.getHttpPrincipal().getName());
                addedMembers.add(getUseridForLogging(member));
            }
            }
        }
        }
        for (Group gr : group.getGroupMembers())
        for (Group gr : group.getGroupMembers())
@@ -119,7 +119,7 @@ public class ModifyGroupAction extends AbstractGroupAction
        List<String> deletedMembers = new ArrayList<String>();
        List<String> deletedMembers = new ArrayList<String>();
        for (User member : oldGroup.getUserMembers())
        for (User member : oldGroup.getUserMembers())
        {
        {
            deletedMembers.add(member.getHttpPrincipal().getName());
            deletedMembers.add(getUseridForLogging(member));
        }
        }
        for (Group gr : oldGroup.getGroupMembers())
        for (Group gr : oldGroup.getGroupMembers())
        {
        {
+1 −4
Original line number Original line Diff line number Diff line
@@ -71,9 +71,6 @@ package ca.nrc.cadc.ac.server.web.groups;
import java.security.Principal;
import java.security.Principal;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
import java.util.Set;

import javax.security.auth.x500.X500Principal;


import ca.nrc.cadc.ac.Group;
import ca.nrc.cadc.ac.Group;
import ca.nrc.cadc.ac.MemberNotFoundException;
import ca.nrc.cadc.ac.MemberNotFoundException;
@@ -110,7 +107,7 @@ public class RemoveUserMemberAction extends AbstractGroupAction
        groupPersistence.modifyGroup(group);
        groupPersistence.modifyGroup(group);


        List<String> deletedMembers = new ArrayList<String>();
        List<String> deletedMembers = new ArrayList<String>();
        deletedMembers.add(toRemove.getHttpPrincipal().getName());
        deletedMembers.add(getUseridForLogging(toRemove));
        logGroupInfo(group.getID(), deletedMembers, null);
        logGroupInfo(group.getID(), deletedMembers, null);
    }
    }


Loading