You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2010/04/28 19:14:48 UTC

svn commit: r939011 - in /directory: apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/ shared/trunk/i18n/src/main/java/org/apache/directory/shared/i18n/ shared/trunk/i18n/src/main/resources/org/apache/directory/shared/i18n...

Author: elecharny
Date: Wed Apr 28 17:14:48 2010
New Revision: 939011

URL: http://svn.apache.org/viewvc?rev=939011&view=rev
Log:
o Fixed the way binary values handle null values : the syntaxChecker is called if the Value is schema aware
o Added some error messages

Modified:
    directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryAttributeTest.java
    directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryTest.java
    directory/shared/trunk/i18n/src/main/java/org/apache/directory/shared/i18n/I18n.java
    directory/shared/trunk/i18n/src/main/resources/org/apache/directory/shared/i18n/errors.properties
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/BinaryValue.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntry.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntryAttribute.java
    directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/entry/BinaryValueAttributeTypeTest.java

Modified: directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryAttributeTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryAttributeTest.java?rev=939011&r1=939010&r2=939011&view=diff
==============================================================================
--- directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryAttributeTest.java (original)
+++ directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryAttributeTest.java Wed Apr 28 17:14:48 2010
@@ -775,7 +775,7 @@ public class SchemaAwareEntryAttributeTe
         EntryAttribute attr6 = new DefaultEntryAttribute( atPwd );
         
         nbAdded = attr6.add( "a", (String)null );
-        assertEquals( 1, nbAdded );
+        assertEquals( 2, nbAdded );
         assertFalse( attr6.isHR() );
     }
 
@@ -830,7 +830,7 @@ public class SchemaAwareEntryAttributeTe
         EntryAttribute attr6 = new DefaultEntryAttribute( atPwd );
         
         nbAdded = attr6.add( "ab", (String)null );
-        assertEquals( 1, nbAdded );
+        assertEquals( 2, nbAdded );
         assertFalse( attr6.isHR() );
     }
 
@@ -1264,7 +1264,7 @@ public class SchemaAwareEntryAttributeTe
         EntryAttribute attr6 = new DefaultEntryAttribute( atPwd );
         
         nbAdded = attr6.add( "a", (String)null );
-        assertEquals( 1, nbAdded );
+        assertEquals( 2, nbAdded );
         assertFalse( attr6.isHR() );
     }
 

Modified: directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryTest.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryTest.java?rev=939011&r1=939010&r2=939011&view=diff
==============================================================================
--- directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryTest.java (original)
+++ directory/apacheds/trunk/core-entry/src/test/java/org/apache/directory/server/core/entry/SchemaAwareEntryTest.java Wed Apr 28 17:14:48 2010
@@ -63,7 +63,6 @@ import org.apache.directory.shared.ldap.
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-
 /**
  * Test the DefaultEntry class.
  *
@@ -287,9 +286,9 @@ public class SchemaAwareEntryTest
         
         entry.clear();
         
-        entry.add( "jpegPhoto", BYTES1, BYTES1, BYTES2 );
+        entry.add( "userPassword", BYTES1, BYTES1, BYTES2 );
         assertEquals( 1, entry.size() );
-        EntryAttribute attributeJPG = entry.get( "jpegPhoto" );
+        EntryAttribute attributeJPG = entry.get( "userPassword" );
         assertEquals( 2, attributeJPG.size() );
         assertNotNull( attributeJPG.get() );
         assertTrue( attributeJPG.contains( BYTES1 ) );
@@ -309,8 +308,8 @@ public class SchemaAwareEntryTest
          }
 
          // Cannot add String values into a binary attribute
-         entry.add( "jpegPhoto", "test", "test2" );
-         assertEquals( 0, entry.get( "jpegPhoto" ).size() );
+         entry.add( "userPassword", "test", "test2" );
+         assertEquals( 2, entry.get( "userPassword" ).size() );
     }
      
 
@@ -646,6 +645,17 @@ public class SchemaAwareEntryTest
         DN dn = new DN( "cn=test" );
         DefaultEntry entry = new DefaultEntry( schemaManager, dn );
         
+        // Test that we can't inject a null AT
+        try
+        {
+            entry.add( (AttributeType)null, "test" );
+            fail();
+        }
+        catch ( IllegalArgumentException iae )
+        {
+            // Expected
+        }
+        
         // Test a simple addition
         entry.add( atDC, "test1" );
         assertNotNull( entry.get( atDC ) );
@@ -696,11 +706,34 @@ public class SchemaAwareEntryTest
         DefaultEntry entry = new DefaultEntry( schemaManager, dn );
         
         AttributeType atPassword = schemaManager.lookupAttributeTypeRegistry( "userPassword" );
+        AttributeType atJpegPhoto = schemaManager.lookupAttributeTypeRegistry( "jpegPhoto" );
         
         byte[] test1 = StringTools.getBytesUtf8( "test1" );
         byte[] test2 = StringTools.getBytesUtf8( "test2" );
         byte[] test3 = StringTools.getBytesUtf8( "test3" );
         
+        // Test that we can't inject a null AT
+        try
+        {
+            entry.add( (AttributeType)null, test1 );
+            fail();
+        }
+        catch ( IllegalArgumentException iae )
+        {
+            // Expected
+        }
+        
+        // Test that we cannot inject a null value in an AT that does not allow it
+        try
+        {
+            entry.add( atJpegPhoto, (byte[])null );
+            fail();
+        }
+        catch ( IllegalArgumentException iae )
+        {
+            // Expected
+        }
+        
         // Test a simple addition
         entry.add( atPassword, test1 );
         assertNotNull( entry.get( atPassword ) );
@@ -766,6 +799,17 @@ public class SchemaAwareEntryTest
         Value<byte[]> testB2 = new BinaryValue( atPassword, b2 );
         Value<byte[]> testB3 = new BinaryValue( atPassword, b3 );
         
+        // Test that we can't inject a null AT
+        try
+        {
+            entry.add( (AttributeType)null, test1 );
+            fail();
+        }
+        catch ( IllegalArgumentException iae )
+        {
+            // Expected
+        }
+        
         // Test a simple addition in atDC
         entry.add( atDC, test1 );
         assertNotNull( entry.get( atDC ) );
@@ -2375,16 +2419,16 @@ public class SchemaAwareEntryTest
         assertNotNull( entry.get( "userPassword" ).get().get() );
         assertTrue( entry.get( "userPassword" ).contains( BYTES1 ) );
         
-        replaced = entry.put(  "jpegPhoto", BYTES1, BYTES2, BYTES1 );
-        assertNull( replaced );
-        assertEquals( 2, entry.size() );
-        assertNotNull( entry.get( "jpegPhoto" ) );
-        assertEquals( 2, entry.get( "JPEGPhoto" ).size() );
-        EntryAttribute attribute = entry.get( "jpegPhoto" );
+        replaced = entry.put(  "userPassword", BYTES1, BYTES2, BYTES1 );
+        assertNotNull( replaced );
+        assertEquals( 1, entry.size() );
+        assertNotNull( entry.get( "userPassword" ) );
+        assertEquals( 2, entry.get( "USERPassword" ).size() );
+        EntryAttribute attribute = entry.get( "userPassword" );
         assertTrue( attribute.contains( BYTES1 ) );
         assertTrue( attribute.contains( BYTES2 ) );
-        assertEquals( "jpegphoto", attribute.getId() );
-        assertEquals( "jpegPhoto", attribute.getUpId() );
+        assertEquals( "userpassword", attribute.getId() );
+        assertEquals( "userPassword", attribute.getUpId() );
     }
 
 

Modified: directory/shared/trunk/i18n/src/main/java/org/apache/directory/shared/i18n/I18n.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/i18n/src/main/java/org/apache/directory/shared/i18n/I18n.java?rev=939011&r1=939010&r2=939011&view=diff
==============================================================================
--- directory/shared/trunk/i18n/src/main/java/org/apache/directory/shared/i18n/I18n.java (original)
+++ directory/shared/trunk/i18n/src/main/java/org/apache/directory/shared/i18n/I18n.java Wed Apr 28 17:14:48 2010
@@ -620,6 +620,8 @@ public class I18n
     public static final String ERR_04475 = "ERR_04475";
     public static final String ERR_04476 = "ERR_04476";
     public static final String ERR_04477_NO_VALID_AT_FOR_THIS_ID = "ERR_04477_NO_VALID_AT_FOR_THIS_ID";
+    public static final String ERR_04478_NO_VALUE_NOT_ALLOWED = "ERR_04478_NO_VALUE_NOT_ALLOWED";
+    public static final String ERR_04479_INVALID_SYNTAX_VALUE = "ERR_04479_INVALID_SYNTAX_VALUE";
 
 	// ldap-constants
 	public static final String ERR_05001 = "ERR_05001";

Modified: directory/shared/trunk/i18n/src/main/resources/org/apache/directory/shared/i18n/errors.properties
URL: http://svn.apache.org/viewvc/directory/shared/trunk/i18n/src/main/resources/org/apache/directory/shared/i18n/errors.properties?rev=939011&r1=939010&r2=939011&view=diff
==============================================================================
--- directory/shared/trunk/i18n/src/main/resources/org/apache/directory/shared/i18n/errors.properties (original)
+++ directory/shared/trunk/i18n/src/main/resources/org/apache/directory/shared/i18n/errors.properties Wed Apr 28 17:14:48 2010
@@ -579,6 +579,8 @@ ERR_04474=Expected string to normalize
 ERR_04475=Expected byte[] to normalize
 ERR_04476=Cannot set an AttributeType {0} when another one ({1}) is already present
 ERR_04477_NO_VALID_AT_FOR_THIS_ID=Cannot find a valid AttributeType for the ''{0}'' id
+ERR_04478_NO_VALUE_NOT_ALLOWED=Cannot create or add an Attribute with no value in it
+ERR_04479_INVALID_SYNTAX_VALUE= The value ''{0}'' does not respect the AttributeType ''{1}'' syntax
 
 # ldap-constants
 ERR_05001=Unknown AuthenticationLevel {0}

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/BinaryValue.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/BinaryValue.java?rev=939011&r1=939010&r2=939011&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/BinaryValue.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/BinaryValue.java Wed Apr 28 17:14:48 2010
@@ -32,6 +32,7 @@ import org.apache.directory.shared.i18n.
 import org.apache.directory.shared.ldap.schema.AttributeType;
 import org.apache.directory.shared.ldap.schema.LdapComparator;
 import org.apache.directory.shared.ldap.schema.Normalizer;
+import org.apache.directory.shared.ldap.schema.SyntaxChecker;
 import org.apache.directory.shared.ldap.schema.comparators.ByteArrayComparator;
 import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
@@ -133,7 +134,21 @@ public class BinaryValue extends Abstrac
     public BinaryValue( AttributeType attributeType, byte[] value )
     {
         this( attributeType );
-        this.wrappedValue = value;
+        SyntaxChecker syntaxChecker = attributeType.getSyntax().getSyntaxChecker();
+        
+        if ( syntaxChecker != null ) 
+        {
+            if ( syntaxChecker.isValidSyntax( value ) )
+            {
+                this.wrappedValue = value;
+            }
+            else
+            {
+                String msg = I18n.err( I18n.ERR_04479_INVALID_SYNTAX_VALUE, value, attributeType.getName() );
+                LOG.info( msg );
+                throw new IllegalArgumentException( msg );
+            }
+        }
     }
 
 

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntry.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntry.java?rev=939011&r1=939010&r2=939011&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntry.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntry.java Wed Apr 28 17:14:48 2010
@@ -587,6 +587,13 @@ public class DefaultEntry implements Ent
             throw new IllegalArgumentException( message );
         }
         
+        if ( ( values == null ) || ( values.length == 0 ) )
+        {
+            String message = I18n.err( I18n.ERR_04478_NO_VALUE_NOT_ALLOWED );
+            LOG.error( message );
+            throw new IllegalArgumentException( message );
+        }
+        
         // ObjectClass with binary values are not allowed
         if ( attributeType.equals( OBJECT_CLASS_AT ) )
         {

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntryAttribute.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntryAttribute.java?rev=939011&r1=939010&r2=939011&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntryAttribute.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/entry/DefaultEntryAttribute.java Wed Apr 28 17:14:48 2010
@@ -26,8 +26,6 @@ import java.io.ObjectOutput;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
 import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
 
 import org.apache.directory.shared.ldap.exception.LdapException;
 import org.apache.directory.shared.ldap.exception.LdapInvalidAttributeValueException;
@@ -37,7 +35,6 @@ import org.apache.directory.shared.i18n.
 import org.apache.directory.shared.ldap.message.ResultCodeEnum;
 import org.apache.directory.shared.ldap.schema.AttributeType;
 import org.apache.directory.shared.ldap.schema.SyntaxChecker;
-import org.apache.directory.shared.ldap.util.ArrayUtils;
 import org.apache.directory.shared.ldap.util.StringTools;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -916,11 +913,19 @@ public class DefaultEntryAttribute imple
                 {
                     if ( val == null )
                     {
-                        Value<byte[]> nullSV = new BinaryValue( attributeType, (byte[])null );
-                        
-                        if ( values.add( nullSV ) )
+                        if ( attributeType.getSyntax().getSyntaxChecker().isValidSyntax( val ) )
                         {
-                            nbAdded++;
+                            Value<byte[]> nullSV = new BinaryValue( attributeType, (byte[])null );
+                            
+                            if ( values.add( nullSV ) )
+                            {
+                                nbAdded++;
+                            }
+                        }
+                        else
+                        {
+                            String message = I18n.err( I18n.ERR_04452 );
+                            LOG.error( message );
                         }
                     }
                     else

Modified: directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/entry/BinaryValueAttributeTypeTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/entry/BinaryValueAttributeTypeTest.java?rev=939011&r1=939010&r2=939011&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/entry/BinaryValueAttributeTypeTest.java (original)
+++ directory/shared/trunk/ldap/src/test/java/org/apache/directory/shared/ldap/entry/BinaryValueAttributeTypeTest.java Wed Apr 28 17:14:48 2010
@@ -429,8 +429,15 @@ public class BinaryValueAttributeTypeTes
         value = new BinaryValue( attribute, new byte[]{0x01, 0x02} );
         assertTrue( value.isValid() );
 
-        value = new BinaryValue( attribute, new byte[]{0x01, 0x02, 0x03, 0x04, 0x05, 0x06} );
-        assertFalse( value.isValid() );
+        try
+        {
+            value = new BinaryValue( attribute, new byte[]{0x01, 0x02, 0x03, 0x04, 0x05, 0x06} );
+            fail();
+        }
+        catch ( IllegalArgumentException iae )
+        {
+            assertTrue( true );
+        }
     }