Enforce stronger constraints on role names for SAML

Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/1b310154
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/1b310154
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/1b310154

Branch: refs/heads/3.0.x-fixes
Commit: 1b3101542c14b6c761a83d39547d79fa732e9603
Parents: af03a16
Author: Colm O hEigeartaigh <cohei...@apache.org>
Authored: Mon Jul 20 19:56:04 2015 +0100
Committer: Colm O hEigeartaigh <cohei...@apache.org>
Committed: Mon Jul 20 20:49:45 2015 +0100

----------------------------------------------------------------------
 .../cxf/rt/security/saml/SAMLSecurityContext.java      | 13 +++++++++++--
 .../xacml/AbstractXACMLAuthorizingInterceptor.java     |  6 +++++-
 2 files changed, 16 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/1b310154/rt/security/src/main/java/org/apache/cxf/rt/security/saml/SAMLSecurityContext.java
----------------------------------------------------------------------
diff --git 
a/rt/security/src/main/java/org/apache/cxf/rt/security/saml/SAMLSecurityContext.java
 
b/rt/security/src/main/java/org/apache/cxf/rt/security/saml/SAMLSecurityContext.java
index 4287eb2..2784a18 100644
--- 
a/rt/security/src/main/java/org/apache/cxf/rt/security/saml/SAMLSecurityContext.java
+++ 
b/rt/security/src/main/java/org/apache/cxf/rt/security/saml/SAMLSecurityContext.java
@@ -19,6 +19,8 @@
 package org.apache.cxf.rt.security.saml;
 
 import java.security.Principal;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.Set;
 
 import org.w3c.dom.Element;
@@ -67,7 +69,7 @@ public class SAMLSecurityContext implements 
ClaimsSecurityContext {
             return false;
         }
         for (Principal principalRole : roles) {
-            if (principalRole.getName().equals(role)) {
+            if (principalRole != principal && 
principalRole.getName().equals(role)) {
                 return true;
             }
         }
@@ -83,7 +85,14 @@ public class SAMLSecurityContext implements 
ClaimsSecurityContext {
     }
     
     public Set<Principal> getUserRoles() {
-        return roles;
+        if (roles == null) {
+            return Collections.emptySet();
+        }
+        Set<Principal> retRoles = new HashSet<Principal>(roles);
+        if (principal != null && retRoles.contains(principal)) {
+            retRoles.remove(principal);
+        }
+        return retRoles;
     }
     
     public void setAssertionElement(Element assertionElement) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/1b310154/rt/security/src/main/java/org/apache/cxf/rt/security/xacml/AbstractXACMLAuthorizingInterceptor.java
----------------------------------------------------------------------
diff --git 
a/rt/security/src/main/java/org/apache/cxf/rt/security/xacml/AbstractXACMLAuthorizingInterceptor.java
 
b/rt/security/src/main/java/org/apache/cxf/rt/security/xacml/AbstractXACMLAuthorizingInterceptor.java
index 51e45cd..f7a8697 100644
--- 
a/rt/security/src/main/java/org/apache/cxf/rt/security/xacml/AbstractXACMLAuthorizingInterceptor.java
+++ 
b/rt/security/src/main/java/org/apache/cxf/rt/security/xacml/AbstractXACMLAuthorizingInterceptor.java
@@ -74,13 +74,17 @@ public abstract class AbstractXACMLAuthorizingInterceptor 
extends AbstractPhaseI
         
         if (sc instanceof LoginSecurityContext) {
             Principal principal = sc.getUserPrincipal();
+            String principalName = null;
+            if (principal != null) {
+                principalName = principal.getName();
+            }
             
             LoginSecurityContext loginSecurityContext = 
(LoginSecurityContext)sc;
             Set<Principal> principalRoles = 
loginSecurityContext.getUserRoles();
             List<String> roles = new ArrayList<String>();
             if (principalRoles != null) {
                 for (Principal p : principalRoles) {
-                    if (p != principal) {
+                    if (p != null && p.getName() != null && 
!p.getName().equals(principalName)) {
                         roles.add(p.getName());
                     }
                 }

Reply via email to