[ http://issues.apache.org/jira/browse/DIRLDAP-84?page=all ]
     
Emmanuel Lecharny resolved DIRLDAP-84:
--------------------------------------

    Resolution: Fixed

The creation of an entry with an attribute wwhich is not described in the 
schema is now not any more allowed.

> Modify attribute fails with exception 
> javax.naming.Directory.InvalidAttributeIdentifierException
> ------------------------------------------------------------------------------------------------
>
>          Key: DIRLDAP-84
>          URL: http://issues.apache.org/jira/browse/DIRLDAP-84
>      Project: Directory LDAP
>         Type: Bug
>     Versions: 0.9.3
>  Environment: Windows XP ,  JNDI(Java 1.5.06)  and also JXplorer LDAP browser
>     Reporter: Somashish Gupta

>
>  I recently upgraded Directory server from version 0.9 to 0.9.3.  After the 
> upgradation the JNDI call 
> javax.naming.directory.DirContext.modifyAttributes(String name, 
> ModificationItems[] mods)has stopped working(This call was working without 
> any issue in 0.9). It has started failing with 
> InvalidAttributeIdentifierException. The structure of my application data 
> present in the LDAP server is identical in 0.9.3 to what it was in 0.9, so I 
> am sure the call is able to resolve the name. I have also checked the 
> contents of mods. The attributes are also present. The only difference that I 
> have noticed is the properties file in the 2 cases. In 0.9.3 it is an xml 
> file instead of a properties file. I am using the sample server.xml file that 
> comes with the 0.9.3 source distribution. (In case of 0.9 I was using the 
> sample server.properties file coming with the distribution). Also I use 
> JXplorer as LDAP browser. There also I am noticing the identical behavior. 
> Modification of any attribute was working in case of 0.9. But now with 0.9.3, 
> I am not able to update any attribute through the browser.
> After more testing the following is what I found.
> While developing my application using 0.9, I created objects in the LDAP like 
> Attributes orgAttrs = new BasicAttributes(true); 
> orgAttrs.put(new BasicAttribute("objectclass","organizationalUnit")) ; 
> orgAttrs.put(new BasicAttribute("activeFlag","A")) ; 
> orgAttrs.put(new BasicAttribute("description","abcd")) ; .
> .
> .
> ctx.createSubcontext("ou=domain1", orgAttrs);
> Please note that I was able to create attribute "activeFlag" in this object 
> even though I didn't do any change/insert in any schema. (description is 
> ofcourse a predefined attribute) After creating this object, I was also able 
> to update the value of this attribute in the following way
> ModificationItem[] mods = new ModificationItem[some size here] ;
> mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new 
> BasicAttribute(("activeFlag","I"));
> mods[1] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new 
> BasicAttribute(("description","abcdNew"));
> ctx.modifyAttributes("ou=domain1" , mods) ;
> All the above calls were working properly in 0.9.
> Now when I upgraded to 0.9.3, the update to activeFlag doesn't work, update 
> to description works. But the creation of both activeFlag and description 
> using the createSubContext call works.
> So I think it is to do with schema, but then how does the creation work in 
> the first place?
> Following is the server.xml file that I use to start the LDAP server
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
>   "http://www.springframework.org/dtd/spring-beans.dtd";>
> <beans>
>   <bean id="environment" 
> class="org.springframework.beans.factory.config.PropertiesFactoryBean">
>     <property name="properties">
>       <props>
>         <prop 
> key="asn.1.berlib.provider">org.apache.ldap.common.berlib.asn1.SnickersProvider</prop>
>         <!--prop 
> key="asn.1.berlib.provider">org.apache.asn1new.ldap.TwixProvider</prop-->
>         <prop key="java.naming.security.authentication">simple</prop>
>         <prop key="java.naming.security.principal">uid=admin,ou=system</prop>
>         <prop key="java.naming.security.credentials">secret</prop>
>         <prop key="java.naming.ldap.attributes.binary">photo 
> personalSignature audio jpegPhoto javaSerializedData userPassword 
> userCertificate cACertificate authorityRevocationList 
> certificateRevocationList crossCertificatePair x500UniqueIdentifier 
> krb5Key</prop>
>         <!--<prop key="kdc.entryBaseDn">ou=users,dc=example,dc=com</prop>-->
>         <!--<prop key="kdc.java.naming.security.credentials">secret</prop>-->
>         <!--<prop 
> key="changepw.entryBaseDn">ou=users,dc=example,dc=com</prop>-->
>         <!--<prop 
> key="changepw.java.naming.security.credentials">secret</prop>-->
>       </props>
>     </property>
>   </bean>
>   
>   <bean id="configuration" 
> class="org.apache.ldap.server.configuration.MutableServerStartupConfiguration">
>     <property name="workingDirectory"><value>example.com</value></property>
>     <!-- Uncomment below to have the server load entries on startup!        
> -->
>     <!-- ldifDirectory property can point to a relative file, directory or  
> -->
>     <!-- can point to an absolute path to either using the URL path         
> -->
>     <!-- notation: i.e. file:///Users/jack/apacheds/ldifs                   
> -->
>     <!-- Entries will optionally be filtered using LdifLoadFilters in the   
> -->
>     <!-- order specified.  The included Krb5KdcEntryFilter will filter      
> -->
>     <!-- kerberos principals creating keys for them using their             
> -->
>     <!-- userPassword attribute if present.                                 
> -->
>     <!--<property name="ldifDirectory">
>       <value>example.ldif</value>
>     </property>
>     <property name="ldifFilters">
>       <list>
>         <bean class="org.apache.protocol.common.store.Krb5KdcEntryFilter"/>
>       </list>
>     </property>-->
>     <property name="allowAnonymousAccess"><value>false</value></property>
>     <property name="accessControlEnabled"><value>false</value></property>
>     <property name="enableNtp"><value>false</value></property>
>     <property name="enableKerberos"><value>false</value></property>
>     <property name="enableChangePassword"><value>false</value></property>
>     <property name="ldapPort"><value>10389</value></property>
>     <property name="contextPartitionConfigurations">
>       <set>
>         <ref bean="examplePartitionConfiguration"/>
>       </set>
>     </property>
>     <property name="bootstrapSchemas">
>       <set>
>         <bean class="org.apache.ldap.server.schema.bootstrap.AutofsSchema"/>
>         <bean class="org.apache.ldap.server.schema.bootstrap.CorbaSchema"/>
>         <bean class="org.apache.ldap.server.schema.bootstrap.CoreSchema"/>
>         <bean class="org.apache.ldap.server.schema.bootstrap.CosineSchema"/>
>         <bean class="org.apache.ldap.server.schema.bootstrap.ApacheSchema"/>
>         <bean 
> class="org.apache.ldap.server.schema.bootstrap.CollectiveSchema"/>
>         <bean 
> class="org.apache.ldap.server.schema.bootstrap.InetorgpersonSchema"/>
>         <bean class="org.apache.ldap.server.schema.bootstrap.JavaSchema"/>
>         <bean class="org.apache.ldap.server.schema.bootstrap.Krb5kdcSchema"/>
>         <bean class="org.apache.ldap.server.schema.bootstrap.NisSchema"/>
>         <bean class="org.apache.ldap.server.schema.bootstrap.SystemSchema"/>
>         <bean 
> class="org.apache.ldap.server.schema.bootstrap.ApachednsSchema"/>
>       </set>
>     </property>
>     
>     <property name="interceptorConfigurations">
>       <list>
>         <bean 
> class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration">
>           <property name="name"><value>normalizationService</value></property>
>           <property name="interceptor">
>             <bean 
> class="org.apache.ldap.server.normalization.NormalizationService" />
>           </property>
>         </bean>
>         <bean 
> class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration">
>           <property 
> name="name"><value>authenticationService</value></property>
>           <property name="interceptor">
>             <bean class="org.apache.ldap.server.authn.AuthenticationService" 
> />
>           </property>
>         </bean>
>         <bean 
> class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration">
>           <property name="name"><value>authorizationService</value></property>
>           <property name="interceptor">
>             <bean class="org.apache.ldap.server.authz.AuthorizationService" />
>           </property>
>         </bean>
>         <bean 
> class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration">
>           <property 
> name="name"><value>oldAuthorizationService</value></property>
>           <property name="interceptor">
>             <bean 
> class="org.apache.ldap.server.authz.OldAuthorizationService" />
>           </property>
>         </bean>
>         <bean 
> class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration">
>           <property name="name"><value>exceptionService</value></property>
>           <property name="interceptor">
>             <bean class="org.apache.ldap.server.exception.ExceptionService" />
>           </property>
>         </bean>
>         <bean 
> class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration">
>           <property name="name"><value>schemaService</value></property>
>           <property name="interceptor">
>             <bean class="org.apache.ldap.server.schema.SchemaService" />
>           </property>
>         </bean>
>         <bean 
> class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration">
>           <property name="name"><value>subentryService</value></property>
>           <property name="interceptor">
>             <bean class="org.apache.ldap.server.subtree.SubentryService" />
>           </property>
>         </bean>
>         <bean 
> class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration">
>           <property 
> name="name"><value>operationalAttributeService</value></property>
>           <property name="interceptor">
>             <bean 
> class="org.apache.ldap.server.operational.OperationalAttributeService" />
>           </property>
>         </bean>
>         <bean 
> class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration">
>           <property 
> name="name"><value>collectiveAttributeService</value></property>
>           <property name="interceptor">
>             <bean 
> class="org.apache.ldap.server.collective.CollectiveAttributeService" />
>           </property>
>         </bean>
>         <bean 
> class="org.apache.ldap.server.configuration.MutableInterceptorConfiguration">
>           <property name="name"><value>eventService</value></property>
>           <property name="interceptor">
>             <bean class="org.apache.ldap.server.event.EventService" />
>           </property>
>         </bean>
>       </list>
>     </property>
>   </bean>
>   
>   <bean id="examplePartitionConfiguration" 
> class="org.apache.ldap.server.configuration.MutableDirectoryPartitionConfiguration">
>     <property name="name"><value>example</value></property>
>     <property name="suffix"><value>dc=example,dc=com</value></property>
>     <property name="indexedAttributes">
>       <set>
>         <value>dc</value>
>         <value>ou</value>
>         <value>objectClass</value>
>         <value>krb5PrincipalName</value>
>         <value>uid</value>
>       </set>
>     </property>
>     <property name="contextEntry">
>       <value>
>         objectClass: top
>         objectClass: domain
>         objectClass: extensibleObject
>         dc: example
>       </value>
>     </property>
>   </bean>
>   <bean 
> class="org.springframework.beans.factory.config.CustomEditorConfigurer">
>     <property name="customEditors">
>       <map>
>         <entry key="javax.naming.directory.Attributes">
>           <bean 
> class="org.apache.ldap.server.configuration.AttributesPropertyEditor"/>
>         </entry>
>       </map>
>    </property>
>   </bean>
> </beans>

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to