Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
1.5.4
-
None
Description
The method org.apache.directory.server.core.integ.IntegrationUtils.injectEntries(DirectoryService, String) only supports adding entries - it assumes that there are no changetype: something-other-than-add entries in the LDIF. This greatly complicates modifying the intergration testing server's schema.
So the following LDIF cannot be currently processed by injectEntries:
version: 1
dn: cn=schema
changetype: modify
add: attributeTypes
attributeTypes: ( 1.3.6.1.4.1.12345.1.1 NAME 'customAttr1'
DESC 'custom attribute 1'
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )
attributeTypes: ( 1.3.6.1.4.1.12345.1.2 NAME 'customAttr2'
DESC 'custom attribute 2'
EQUALITY caseIgnoreMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )
-
add: objectClasses
objectClasses: ( .3.6.1.4.1.12345.2.1
NAME 'customClass1'
SUP top
STRUCTURAL
MUST ( cn $ customAttr1 )
MAY ( customAttr2 ) )
I've tracked down the problem and found out it's quite simple to add support for the remaining change types:
Index: src/main/java/org/apache/directory/server/core/integ/IntegrationUtils.java
===================================================================
— src/main/java/org/apache/directory/server/core/integ/IntegrationUtils.java (revision 731909)
+++ src/main/java/org/apache/directory/server/core/integ/IntegrationUtils.java (working copy)
@@ -99,8 +99,19 @@
for ( LdifEntry entry : entries )
{
- service.getAdminSession().add(
- new DefaultServerEntry( service.getRegistries(), entry.getEntry() ) );
+ if ( entry.isChangeAdd() )
+ { + service.getAdminSession().add( new DefaultServerEntry( service.getRegistries(), entry.getEntry() ) ); + + }+ else if ( entry.isChangeModify() )
{ + service.getAdminSession().modify( entry.getDn(), entry.getModificationItems() ); + }
++ else
{ + throw new NamingException( "Unsupported changetype found in LDIF: " + entry.getChangeType() ); + }
+}
}
I'll attach the patch in a minute.