You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2006/08/02 21:29:44 UTC
svn commit: r428107 - in /directory/trunks/apacheds:
core-unit/src/test/java/org/apache/directory/server/core/jndi/
core/src/main/java/org/apache/directory/server/core/jndi/
Author: akarasulu
Date: Wed Aug 2 12:29:44 2006
New Revision: 428107
URL: http://svn.apache.org/viewvc?rev=428107&view=rev
Log:
fix for DIRSERVER-628
Modified:
directory/trunks/apacheds/core-unit/src/test/java/org/apache/directory/server/core/jndi/CreateContextITest.java
directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java
directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/jndi/ServerDirContext.java
Modified: directory/trunks/apacheds/core-unit/src/test/java/org/apache/directory/server/core/jndi/CreateContextITest.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/core-unit/src/test/java/org/apache/directory/server/core/jndi/CreateContextITest.java?rev=428107&r1=428106&r2=428107&view=diff
==============================================================================
--- directory/trunks/apacheds/core-unit/src/test/java/org/apache/directory/server/core/jndi/CreateContextITest.java (original)
+++ directory/trunks/apacheds/core-unit/src/test/java/org/apache/directory/server/core/jndi/CreateContextITest.java Wed Aug 2 12:29:44 2006
@@ -17,12 +17,15 @@
package org.apache.directory.server.core.jndi;
+import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
import org.apache.directory.server.core.unit.AbstractAdminTestCase;
@@ -35,6 +38,50 @@
*/
public class CreateContextITest extends AbstractAdminTestCase
{
+ protected Attributes getPersonAttributes( String sn, String cn )
+ {
+ Attributes attrs = new BasicAttributes();
+ Attribute ocls = new BasicAttribute( "objectClass" );
+ ocls.add( "top" );
+ ocls.add( "person" );
+ attrs.put( ocls );
+ attrs.put( "cn", cn );
+ attrs.put( "sn", sn );
+
+ return attrs;
+ }
+
+
+ /**
+ * DIRSERVER-628: Creation of entry with multivalued RDN leads to wrong
+ * attribute value.
+ */
+ public void testMultiValuedRdn() throws NamingException
+ {
+
+ Attributes attrs = getPersonAttributes( "Bush", "Kate Bush" );
+ String rdn = "cn=Kate Bush+sn=Bush";
+ super.sysRoot.createSubcontext( rdn, attrs );
+
+ SearchControls sctls = new SearchControls();
+ sctls.setSearchScope( SearchControls.SUBTREE_SCOPE );
+ String filter = "(sn=Bush)";
+ String base = "";
+
+ NamingEnumeration enm = sysRoot.search( base, filter, sctls );
+ while ( enm.hasMore() )
+ {
+ SearchResult sr = ( SearchResult ) enm.next();
+ attrs = sr.getAttributes();
+ Attribute cn = sr.getAttributes().get( "cn" );
+ assertNotNull( cn );
+ assertTrue( cn.contains( "Kate Bush" ) );
+ }
+
+ sysRoot.destroySubcontext( rdn );
+ }
+
+
/**
* Tests the creation and subsequent read of a new JNDI context under the
* system context root.
Modified: directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java?rev=428107&r1=428106&r2=428107&view=diff
==============================================================================
--- directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java (original)
+++ directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/jndi/ServerContext.java Wed Aug 2 12:29:44 2006
@@ -52,8 +52,9 @@
import org.apache.directory.shared.ldap.filter.ExprNode;
import org.apache.directory.shared.ldap.filter.PresenceNode;
import org.apache.directory.shared.ldap.message.LockableAttributesImpl;
+import org.apache.directory.shared.ldap.name.AttributeTypeAndValue;
import org.apache.directory.shared.ldap.name.LdapDN;
-import org.apache.directory.shared.ldap.util.NamespaceTools;
+import org.apache.directory.shared.ldap.name.Rdn;
import org.apache.directory.shared.ldap.util.StringTools;
@@ -296,11 +297,20 @@
Attributes attributes = new LockableAttributesImpl();
LdapDN target = buildTarget( name );
- String rdn = name.get( name.size() - 1 );
- String rdnAttribute = NamespaceTools.getRdnAttribute( rdn );
- String rdnValue = NamespaceTools.getRdnValue( rdn );
-
- attributes.put( rdnAttribute, rdnValue );
+ Rdn rdn = target.getRdn( target.size() - 1 );
+ if ( rdn.size() == 1 )
+ {
+ attributes.put( rdn.getType(), rdn.getValue() );
+ }
+ else
+ {
+ for ( Iterator ii = rdn.iterator(); ii.hasNext(); /**/ )
+ {
+ AttributeTypeAndValue atav = ( AttributeTypeAndValue ) ii.next();
+ attributes.put( atav.getType(), atav.getValue() );
+ }
+ }
+
attributes.put( JavaLdapSupport.OBJECTCLASS_ATTR, JavaLdapSupport.JCONTAINER_ATTR );
attributes.put( JavaLdapSupport.OBJECTCLASS_ATTR, JavaLdapSupport.TOP_ATTR );
Modified: directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/jndi/ServerDirContext.java
URL: http://svn.apache.org/viewvc/directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/jndi/ServerDirContext.java?rev=428107&r1=428106&r2=428107&view=diff
==============================================================================
--- directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/jndi/ServerDirContext.java (original)
+++ directory/trunks/apacheds/core/src/main/java/org/apache/directory/server/core/jndi/ServerDirContext.java Wed Aug 2 12:29:44 2006
@@ -21,6 +21,7 @@
import java.io.Serializable;
import java.text.ParseException;
import java.util.Hashtable;
+import java.util.Iterator;
import javax.naming.Name;
import javax.naming.NamingEnumeration;
@@ -46,8 +47,9 @@
import org.apache.directory.shared.ldap.filter.FilterParserImpl;
import org.apache.directory.shared.ldap.filter.PresenceNode;
import org.apache.directory.shared.ldap.filter.SimpleNode;
+import org.apache.directory.shared.ldap.name.AttributeTypeAndValue;
import org.apache.directory.shared.ldap.name.LdapDN;
-import org.apache.directory.shared.ldap.util.NamespaceTools;
+import org.apache.directory.shared.ldap.name.Rdn;
/**
@@ -330,19 +332,40 @@
}
LdapDN target = buildTarget( name );
- String rdn = name.get( name.size() - 1 );
- String rdnAttribute = NamespaceTools.getRdnAttribute( rdn );
- String rdnValue = NamespaceTools.getRdnValue( rdn );
-
- // Clone the attributes and add the Rdn attributes
+ Rdn rdn = target.getRdn( target.size() - 1 );
+
Attributes attributes = ( Attributes ) attrs.clone();
- boolean doRdnPut = attributes.get( rdnAttribute ) == null;
- doRdnPut = doRdnPut || attributes.get( rdnAttribute ).size() == 0;
- doRdnPut = doRdnPut || !attributes.get( rdnAttribute ).contains( rdnValue );
+ if ( rdn.size() == 1 )
+ {
+ String rdnAttribute = rdn.getType();
+ String rdnValue = rdn.getValue();
- if ( doRdnPut )
+ // Add the Rdn attribute
+ boolean doRdnPut = attributes.get( rdnAttribute ) == null;
+ doRdnPut = doRdnPut || attributes.get( rdnAttribute ).size() == 0;
+ doRdnPut = doRdnPut || !attributes.get( rdnAttribute ).contains( rdnValue );
+
+ if ( doRdnPut )
+ {
+ attributes.put( rdnAttribute, rdnValue );
+ }
+ }
+ else
{
- attributes.put( rdnAttribute, rdnValue );
+ for ( Iterator ii = rdn.iterator(); ii.hasNext(); /**/ )
+ {
+ AttributeTypeAndValue atav = ( AttributeTypeAndValue ) ii.next();
+
+ // Add the Rdn attribute
+ boolean doRdnPut = attributes.get( atav.getType() ) == null;
+ doRdnPut = doRdnPut || attributes.get( atav.getType() ).size() == 0;
+ doRdnPut = doRdnPut || !attributes.get( atav.getType() ).contains( atav.getValue() );
+
+ if ( doRdnPut )
+ {
+ attributes.put( atav.getType(), atav.getValue() );
+ }
+ }
}
// Add the new context to the server which as a side effect adds