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 2004/11/18 08:40:13 UTC

svn commit: rev 76216 - in incubator/directory: eve/trunk/protocol/src/java/org/apache/eve/protocol ldap/trunk/common/src/java/org/apache/ldap/common/message snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/decoder/search snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/encoder snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/search

Author: akarasulu
Date: Wed Nov 17 23:40:12 2004
New Revision: 76216

Modified:
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SearchHandler.java
   incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java
   incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/message/LockableAttributesImpl.java
   incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/decoder/search/SearchRequestProcessing.java
   incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/decoder/search/SearchRequestRule.java
   incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/encoder/AttributeEncoder.java
   incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/search/SearchRequestTest.java
Log:
Changes ...

 o found a bug in LockableAttributeImpl where serialized values for the keyMap
   were not being stored; we made the keyMap a non-transient field and made
   sure the keyMap is not null
 o found a bug in the Decoder where the state was not being reset; now the
   search decoder rule makes sure it resets the state of processing in finish()




Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/LdapProtocolProvider.java	Wed Nov 17 23:40:12 2004
@@ -19,6 +19,8 @@
 
 import java.util.*;
 
+import javax.naming.Context;
+
 import org.apache.seda.protocol.ProtocolProvider;
 import org.apache.seda.protocol.RequestHandler;
 import org.apache.seda.listener.ClientKey;
@@ -116,6 +118,8 @@
     public LdapProtocolProvider( Hashtable env ) throws LdapNamingException
     {
         this.handlers = new HashMap();
+
+        env.put( Context.PROVIDER_URL, "" );
         SessionRegistry.getSingleton( env );
 
         Iterator requestTypes = DEFAULT_HANDLERS.keySet().iterator();

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SearchHandler.java
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SearchHandler.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SearchHandler.java	Wed Nov 17 23:40:12 2004
@@ -22,6 +22,7 @@
 import javax.naming.InitialContext;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
+import javax.naming.Name;
 import javax.naming.ldap.LdapContext;
 import javax.naming.directory.SearchResult;
 import javax.naming.directory.SearchControls;
@@ -33,6 +34,7 @@
 import org.apache.ldap.common.util.ExceptionUtils;
 import org.apache.ldap.common.util.ArrayUtils;
 import org.apache.ldap.common.message.*;
+import org.apache.ldap.common.name.LdapName;
 
 
 /**
@@ -167,7 +169,7 @@
                      * local variable for the following call to next()
                      */
                     Attribute ref = result.getAttributes().get( "ref" );
-                    if ( ref == null && ref.size() > 0 )
+                    if ( ref == null || ref.size() > 0 )
                     {
                         SearchResponseEntry respEntry;
                         respEntry = new SearchResponseEntryImpl( req.getMessageId() );
@@ -270,7 +272,7 @@
              * local variable for the following call to next()
              */
             Attribute ref = result.getAttributes().get( "ref" );
-            if ( ref == null && ref.size() > 0 )
+            if ( ref == null || ref.size() > 0 )
             {
                 SearchResponseEntry respEntry = new SearchResponseEntryImpl( req.getMessageId() );
                 respEntry.setAttributes( result.getAttributes() );

Modified: incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java
==============================================================================
--- incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java	(original)
+++ incubator/directory/eve/trunk/protocol/src/java/org/apache/eve/protocol/SessionRegistry.java	Wed Nov 17 23:40:12 2004
@@ -19,6 +19,7 @@
 
 import java.util.*;
 import javax.naming.InitialContext;
+import javax.naming.Context;
 
 import org.apache.seda.listener.ClientKey;
 
@@ -68,10 +69,13 @@
         if ( env == null )
         {
             this.env = new Hashtable();
+            this.env.put( Context.PROVIDER_URL, "" );
+            this.env.put( Context.INITIAL_CONTEXT_FACTORY, "org.apache.eve.jndi.EveContextFactory" );
         }
         else
         {
             this.env = env;
+            this.env.put( Context.PROVIDER_URL, "" );
         }
     }
 

Modified: incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/message/LockableAttributesImpl.java
==============================================================================
--- incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/message/LockableAttributesImpl.java	(original)
+++ incubator/directory/ldap/trunk/common/src/java/org/apache/ldap/common/message/LockableAttributesImpl.java	Wed Nov 17 23:40:12 2004
@@ -44,7 +44,7 @@
     /** Map of user provided String ids to Attributes */
     private final Map map = new HashMap();
     /** Cache of lowercase id Strings to mixed cased user provided String ids */
-    private final transient Map keyMap;
+    private Map keyMap;
 
 
     // ------------------------------------------------------------------------
@@ -85,19 +85,19 @@
     {
         super( parent, false );
 
-        Iterator list = map.values().iterator();
-        while ( list.hasNext() )
-        {
-            Attribute attr = ( Attribute ) list.next();
-            this.map.put( attr.getID(), attr.clone() );
-        }
-
         this.keyMap = new HashMap();
 
         if ( keyMap != null )
         {
             this.keyMap.putAll( keyMap );
         }
+
+        Iterator list = map.values().iterator();
+        while ( list.hasNext() )
+        {
+            Attribute attr = ( Attribute ) list.next();
+            this.map.put( attr.getID(), attr.clone() );
+        }
     }
 
 
@@ -235,7 +235,11 @@
         if ( l_old != null )
         {
             map.remove( l_old.getID() );
-            keyMap.remove( l_old.getID().toLowerCase() );
+
+            if ( keyMap != null )
+            {
+                keyMap.remove( l_old.getID().toLowerCase() );
+            }
         }
 
         map.put( attr.getID(), attr );
@@ -263,7 +267,11 @@
         if ( l_old != null )
         {
             map.remove( l_old.getID() );
-            keyMap.remove( l_old.getID().toLowerCase() );
+
+            if ( keyMap != null )
+            {
+                keyMap.remove( l_old.getID().toLowerCase() );
+            }
         }
 
         return l_old;
@@ -386,6 +394,13 @@
      */
     private void setUserProvidedId( String userProvidedId )
     {
+        if ( keyMap == null )
+        {
+            keyMap = new HashMap();
+            keyMap.put( userProvidedId.toLowerCase(), userProvidedId );
+            return;
+        }
+
         if ( keyMap.get( userProvidedId ) == null )
         {
             keyMap.put( userProvidedId.toLowerCase(), userProvidedId );
@@ -407,6 +422,12 @@
         if ( map.containsKey( attrId ) )
         {
             return attrId;
+        }
+
+        if ( keyMap == null )
+        {
+            keyMap = new HashMap();
+            return null;
         }
 
         return ( String ) keyMap.get( attrId.toLowerCase() );

Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/decoder/search/SearchRequestProcessing.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/decoder/search/SearchRequestProcessing.java	(original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/decoder/search/SearchRequestProcessing.java	Wed Nov 17 23:40:12 2004
@@ -93,6 +93,11 @@
         {
             state = SCOPE_STATE ;
         }
+
+        public String toString()
+        {
+            return "BaseObject";
+        }
     }
 
 
@@ -105,6 +110,11 @@
         {
             state = DEREF_ALIAS_STATE ;
         }
+
+        public String toString()
+        {
+            return "Scope";
+        }
     }
 
 
@@ -117,6 +127,11 @@
         {
             state = SIZE_LIMIT_STATE ;
         }
+
+        public String toString()
+        {
+            return "DerefAliasState";
+        }
     }
 
 
@@ -129,6 +144,11 @@
         {
             state = TIME_LIMIT_STATE ;
         }
+
+        public String toString()
+        {
+            return "SizeLimit";
+        }
     }
 
 
@@ -141,6 +161,11 @@
         {
             state = TYPES_ONLY_STATE ;
         }
+
+        public String toString()
+        {
+            return "TimeLimit";
+        }
     }
 
 
@@ -153,6 +178,11 @@
         {
             state = FILTER_STATE ;
         }
+
+        public String toString()
+        {
+            return "TypesOnly";
+        }
     }
 
 
@@ -165,6 +195,11 @@
         {
             state = ATTRIBUTES_STATE ;
         }
+
+        public String toString()
+        {
+            return "Filter";
+        }
     }
 
 
@@ -177,6 +212,11 @@
         {
             state = CONTROLS_STATE ;
         }
+
+        public String toString()
+        {
+            return "Attributes";
+        }
     }
 
 
@@ -188,6 +228,11 @@
         protected void next()
         {
             state = BASE_OBJECT_STATE ;
+        }
+
+        public String toString()
+        {
+            return "Controls";
         }
     }
 }

Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/decoder/search/SearchRequestRule.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/decoder/search/SearchRequestRule.java	(original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/decoder/search/SearchRequestRule.java	Wed Nov 17 23:40:12 2004
@@ -72,5 +72,6 @@
         super.finish();
         getDigester().pop();
         getDigester().pop();
+        this.processing.reset();
     }
 }

Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/encoder/AttributeEncoder.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/encoder/AttributeEncoder.java	(original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/java/org/apache/snickers/ldap/encoder/AttributeEncoder.java	Wed Nov 17 23:40:12 2004
@@ -83,8 +83,18 @@
 
         while ( list.hasMoreElements() )
         {
-            child = ( DefaultMutableTupleNode )
-                EncoderUtils.encode( ( String ) list.nextElement() );
+            Object next = list.nextElement();
+
+            if ( next instanceof String )
+            {
+                child = ( DefaultMutableTupleNode )
+                    EncoderUtils.encode( ( String ) next );
+            }
+            else
+            {
+                child = ( DefaultMutableTupleNode )
+                    EncoderUtils.encode( ( byte[] ) next );
+            }
             setOf.addFront( child );
             child.setParent( setOf );
         }

Modified: incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/search/SearchRequestTest.java
==============================================================================
--- incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/search/SearchRequestTest.java	(original)
+++ incubator/directory/snickers/trunk/ldap-ber-provider/src/test/org/apache/snickers/ldap/decoder/search/SearchRequestTest.java	Wed Nov 17 23:40:12 2004
@@ -21,6 +21,7 @@
 import java.util.Iterator;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.nio.ByteBuffer;
 
 import org.apache.ldap.common.message.*;
 import org.apache.ldap.common.filter.*;
@@ -52,6 +53,70 @@
     {
         super.tearDown();
         normalizer = null;
+    }
+
+
+    private byte[] failingRequest0 = {
+    0x30, 0x2e, 0x02, 0x01, 0x03, 0x63, 0x29, 0x04,
+    0x09, 0x6f, 0x75, 0x3d, 0x73, 0x79, 0x73, 0x74,
+    0x65, 0x6d, 0x0a, 0x01, 0x00, 0x0a, 0x01, 0x03,
+    0x02, 0x01, 0x00, 0x02, 0x01, 0x00, 0x01, 0x01,
+    0x00, (byte) 0x87, 0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+    0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x30, 0x00 };
+
+
+    public void testFailingRequest0() throws Exception
+    {
+        ByteBuffer buf = ByteBuffer.wrap( failingRequest0 );
+
+        SearchRequest req = ( SearchRequest ) super.snickersDecode( buf );
+        assertEquals( 3, req.getMessageId() );
+        assertEquals( MessageTypeEnum.SEARCHREQUEST, req.getType() );
+        assertEquals( 0, req.getSizeLimit() );
+        assertEquals( 0, req.getTimeLimit() );
+        assertEquals( "ou=system", req.getBase() );
+        assertEquals( ScopeEnum.BASEOBJECT, req.getScope() );
+        assertEquals( DerefAliasesEnum.DEREFALWAYS, req.getDerefAliases() );
+        assertEquals( false, req.getTypesOnly() );
+
+        assertTrue( req.getControls().isEmpty() );
+        assertTrue( req.getAttributes().isEmpty() );
+        assertEquals( "(objectClass=*)", req.getFilter().toString().trim() );
+    }
+
+
+    public void testFailingRequest0Twice() throws Exception
+    {
+        ByteBuffer buf = ByteBuffer.wrap( failingRequest0 );
+
+        SearchRequest req = ( SearchRequest ) super.snickersDecode( buf );
+        assertEquals( 3, req.getMessageId() );
+        assertEquals( MessageTypeEnum.SEARCHREQUEST, req.getType() );
+        assertEquals( 0, req.getSizeLimit() );
+        assertEquals( 0, req.getTimeLimit() );
+        assertEquals( "ou=system", req.getBase() );
+        assertEquals( ScopeEnum.BASEOBJECT, req.getScope() );
+        assertEquals( DerefAliasesEnum.DEREFALWAYS, req.getDerefAliases() );
+        assertEquals( false, req.getTypesOnly() );
+
+        assertTrue( req.getControls().isEmpty() );
+        assertTrue( req.getAttributes().isEmpty() );
+        assertEquals( "(objectClass=*)", req.getFilter().toString().trim() );
+
+        buf.rewind();
+        req = ( SearchRequest ) super.snickersDecode( buf );
+        assertEquals( 3, req.getMessageId() );
+        assertEquals( MessageTypeEnum.SEARCHREQUEST, req.getType() );
+        assertEquals( 0, req.getSizeLimit() );
+        assertEquals( 0, req.getTimeLimit() );
+        assertEquals( "ou=system", req.getBase() );
+        assertEquals( ScopeEnum.BASEOBJECT, req.getScope() );
+        assertEquals( DerefAliasesEnum.DEREFALWAYS, req.getDerefAliases() );
+        assertEquals( false, req.getTypesOnly() );
+
+        assertTrue( req.getControls().isEmpty() );
+        assertTrue( req.getAttributes().isEmpty() );
+        assertEquals( "(objectClass=*)", req.getFilter().toString().trim() );
     }