From e00017cd80b04d5e924f51a06e47626e5ae6b2e5 Mon Sep 17 00:00:00 2001
From: Adrian Damian <Adrian.Damian@nrc.ca>
Date: Thu, 3 Sep 2015 16:28:36 -0700
Subject: [PATCH] Accommodate the use of DNPrincipal in proxy user login

---
 .../src/ca/nrc/cadc/ac/server/web/users/LoginServlet.java   | 6 +++++-
 .../src/ca/nrc/cadc/auth/AuthenticatorImpl.java             | 2 +-
 .../nrc/cadc/ac/server/web/users/UserLoginServletTest.java  | 5 ++++-
 3 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/LoginServlet.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/LoginServlet.java
index ea59ec4f..01291c29 100755
--- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/LoginServlet.java
+++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/ac/server/web/users/LoginServlet.java
@@ -89,6 +89,7 @@ import ca.nrc.cadc.ac.server.GroupDetailSelector;
 import ca.nrc.cadc.ac.server.UserPersistence;
 import ca.nrc.cadc.ac.server.ldap.LdapGroupPersistence;
 import ca.nrc.cadc.ac.server.ldap.LdapUserPersistence;
+import ca.nrc.cadc.auth.AuthenticatorImpl;
 import ca.nrc.cadc.auth.HttpPrincipal;
 import ca.nrc.cadc.auth.SSOCookieManager;
 import ca.nrc.cadc.log.ServletLogInfo;
@@ -228,9 +229,10 @@ public class LoginServlet extends HttpServlet
         final LdapGroupPersistence<HttpPrincipal> gp = 
                 getLdapGroupPersistence();
         
-        
+        AuthenticatorImpl ai = new AuthenticatorImpl();
         Subject proxySubject = new Subject();
         proxySubject.getPrincipals().add(new HttpPrincipal(proxyUser));
+        ai.augmentSubject(proxySubject);
         try
         {
             Subject.doAs(proxySubject, new PrivilegedExceptionAction<Object>()
@@ -238,6 +240,7 @@ public class LoginServlet extends HttpServlet
                 @Override
                 public Object run() throws Exception
                 {
+                    
                     if (gp.getGroups(new HttpPrincipal(proxyUser), Role.MEMBER,
                             proxyGroup).size() == 0)
                     {
@@ -253,6 +256,7 @@ public class LoginServlet extends HttpServlet
 
             Subject userSubject = new Subject();
             userSubject.getPrincipals().add(new HttpPrincipal(userID));
+            ai.augmentSubject(userSubject);
             Subject.doAs(userSubject, new PrivilegedExceptionAction<Object>()
             {
                 @Override
diff --git a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/auth/AuthenticatorImpl.java b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/auth/AuthenticatorImpl.java
index 1812fc7e..e7b9cdf1 100644
--- a/projects/cadcAccessControl-Server/src/ca/nrc/cadc/auth/AuthenticatorImpl.java
+++ b/projects/cadcAccessControl-Server/src/ca/nrc/cadc/auth/AuthenticatorImpl.java
@@ -124,7 +124,7 @@ public class AuthenticatorImpl implements Authenticator
         return subject;
     }
 
-    protected void augmentSubject(final Subject subject)
+    public void augmentSubject(final Subject subject)
     {
 
         try
diff --git a/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/UserLoginServletTest.java b/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/UserLoginServletTest.java
index 99d060b3..fd94de9a 100644
--- a/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/UserLoginServletTest.java
+++ b/projects/cadcAccessControl-Server/test/src/ca/nrc/cadc/ac/server/web/users/UserLoginServletTest.java
@@ -37,7 +37,10 @@ public class UserLoginServletTest
                 proxyGroups.add(new Group(proxyGroup));
                 Collection<Group> niGroups = new HashSet<Group>();
                 niGroups.add(new Group(nonImpersonGroup));
-                LdapGroupPersistence<HttpPrincipal> mockGp = EasyMock
+                // mock returns a shell instance
+                @SuppressWarnings("unchecked")
+                LdapGroupPersistence<HttpPrincipal> mockGp = 
+                    (LdapGroupPersistence<HttpPrincipal>)EasyMock
                         .createMock(LdapGroupPersistence.class);
                 mockGp.setDetailSelector(new GroupDetailSelector()
                 {
-- 
GitLab