Author: ate
Date: Fri Mar 19 17:02:06 2010
New Revision: 925329

URL: http://svn.apache.org/viewvc?rev=925329&view=rev
Log:
JS2-1068: LDAP When last user is removed from a role a uniqueMember with 
uid=foobar is left
See: http://issues.apache.org/jira/browse/JS2-1068
"fixed" by providing a "magic" replacement marker value, "#dn", which will 
automatically be replaced with the ldap entry's own dn

Modified:
    
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/mapping/ldap/dao/impl/AttributeBasedRelationDAO.java
    
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/mapping/ldap/dao/impl/SpringLDAPEntityDAO.java
    
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-ldap.xml

Modified: 
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/mapping/ldap/dao/impl/AttributeBasedRelationDAO.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/mapping/ldap/dao/impl/AttributeBasedRelationDAO.java?rev=925329&r1=925328&r2=925329&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/mapping/ldap/dao/impl/AttributeBasedRelationDAO.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/mapping/ldap/dao/impl/AttributeBasedRelationDAO.java
 Fri Mar 19 17:02:06 2010
@@ -65,6 +65,18 @@ public class AttributeBasedRelationDAO e
             if (relationAttrValue != null)
             {
                 Collection<String> values = relationAttrValue.getValues();
+                if (relationAttrValue.getDefinition().isRequired())
+                {
+                    String defaultValue = 
relationAttrValue.getDefinition().getRequiredDefaultValue();
+                    if (defaultValue != null)
+                    {
+                        if 
(SpringLDAPEntityDAO.DN_REFERENCE_MARKER.equals(defaultValue))
+                        {
+                            defaultValue = entity.getInternalId();
+                        }
+                        values.remove(defaultValue);
+                    }
+                }
                 if (attributeContainsInternalId)
                 {
                     return toDAO.getEntitiesByInternalId(values);
@@ -85,8 +97,8 @@ public class AttributeBasedRelationDAO e
             {
                 // fetch entities using target Entity DAO with a specific 
filter
                 // on the member attribute
-                Filter roleMemberAttrFilter = new 
EqualsFilter(relationAttribute, fromEntityUsedIdValue);
-                return toDAO.getEntities(roleMemberAttrFilter);
+                Filter memberAttrFilter = new EqualsFilter(relationAttribute, 
fromEntityUsedIdValue);
+                return toDAO.getEntities(memberAttrFilter);
             }
         }
         return null;

Modified: 
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/mapping/ldap/dao/impl/SpringLDAPEntityDAO.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/mapping/ldap/dao/impl/SpringLDAPEntityDAO.java?rev=925329&r1=925328&r2=925329&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/mapping/ldap/dao/impl/SpringLDAPEntityDAO.java
 (original)
+++ 
portals/jetspeed-2/portal/trunk/components/jetspeed-security/src/main/java/org/apache/jetspeed/security/mapping/ldap/dao/impl/SpringLDAPEntityDAO.java
 Fri Mar 19 17:02:06 2010
@@ -54,6 +54,8 @@ import org.springframework.ldap.filter.O
  */
 public class SpringLDAPEntityDAO implements EntityDAO
 {
+    public static final String DN_REFERENCE_MARKER = "#dn";
+    
     protected enum UpdateMode
     {
         MAPPED, INTERNAL, ALL
@@ -192,6 +194,16 @@ public class SpringLDAPEntityDAO impleme
         return principalDN;
     }
 
+    protected String getFullDN(DistinguishedName relativeDN)
+    {        
+        String fullDN = relativeDN.toCompactString();
+        if (configuration.getBaseDN() != null && 
configuration.getBaseDN().length() > 0 && 
!fullDN.endsWith(configuration.getBaseDN()))
+        {
+            return fullDN + "," + configuration.getBaseDN();
+        }
+        return fullDN;
+    }
+
     protected String createSearchFilter(Filter filter)
     {
         if (configuration.getSearchFilter() != null)
@@ -373,7 +385,14 @@ public class SpringLDAPEntityDAO impleme
                         if (requiredValue != null && requiredValue.length() > 
0)
                         {
                             basicAttr = new BasicAttribute(attrDef.getName());
-                            basicAttr.add(attrDef.getRequiredDefaultValue());
+                            if 
(SpringLDAPEntityDAO.DN_REFERENCE_MARKER.equals(requiredValue))
+                            {
+                                basicAttr.add(getFullDN(dn));
+                            }
+                            else
+                            {
+                                basicAttr.add(requiredValue);
+                            }
                         }
                     }
                     else
@@ -538,7 +557,12 @@ public class SpringLDAPEntityDAO impleme
                             {
                                 if (attrDef.getRequiredDefaultValue() != null)
                                 {
-                                    
basicAttr.add(attrDef.getRequiredDefaultValue());
+                                    String defaultValue = 
attrDef.getRequiredDefaultValue();
+                                    if 
(SpringLDAPEntityDAO.DN_REFERENCE_MARKER.equals(defaultValue))
+                                    {
+                                        defaultValue = entity.getInternalId();
+                                    }
+                                    basicAttr.add(defaultValue);
                                     modItems.add(new 
ModificationItem(DirContext.REPLACE_ATTRIBUTE, basicAttr));
                                 }
                                 else

Modified: 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-ldap.xml
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-ldap.xml?rev=925329&r1=925328&r2=925329&view=diff
==============================================================================
--- 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-ldap.xml
 (original)
+++ 
portals/jetspeed-2/portal/trunk/jetspeed-portal-resources/src/main/resources/assembly/security-ldap.xml
 Fri Mar 19 17:02:06 2010
@@ -183,7 +183,7 @@
           <constructor-arg index="1" value="true" />
           <constructor-arg index="2" value="false" />
           <property name="required" value="true" />
-          <property name="requiredDefaultValue" value="uid=foobar" />
+          <property name="requiredDefaultValue" value="#dn" />
         </bean>
       </set>
     </property>
@@ -221,7 +221,7 @@
           <constructor-arg index="1" value="true" />
           <constructor-arg index="2" value="false" />
           <property name="required" value="true" />
-          <property name="requiredDefaultValue" value="uid=foobar" />
+          <property name="requiredDefaultValue" value="#dn" />
         </bean>
       </set>
     </property>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to