[ 
https://issues.apache.org/jira/browse/DIRSERVER-1368?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12712619#action_12712619
 ] 

Emmanuel Lecharny commented on DIRSERVER-1368:
----------------------------------------------

Thanks to the test case, I was able to reproduce the problem easily. The fix 
was not so easy ... 

Basically, the problem is that when we add a new OC, we don't update the 
superiors' cache (it contains the list of OC superiors). I have added a fix for 
this specific case, but sadly, it does not work well with OC added to a 
disabled Schema. This is a bit problematic, because added schema elements are 
injected into a temporary registry, which is injected into the real registry 
when the schema is enabled, but the internal schema caches are not updated. 
This has to be fully reviewed and it will take quite some time (I expect the 
time to fix and test the issue to be around 2 days).

> Using Extended Objectclass fails
> --------------------------------
>
>                 Key: DIRSERVER-1368
>                 URL: https://issues.apache.org/jira/browse/DIRSERVER-1368
>             Project: Directory ApacheDS
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.5.5
>         Environment: Linux - Ubuntu 9.04
>            Reporter: Paul Edwards
>            Assignee: Emmanuel Lecharny
>             Fix For: 1.5.5
>
>         Attachments: ApacheDSTest.java, ApacheDSUtils.java
>
>
> I have need to modify the schema. I have everything running smoothly (see 
> previous posts to this group...) I have a situation where I need to extend 
> InetOrgPerson. I have this scenario running successfully under OpenLdap. So I 
> modify ou=schema in apacheDS with:
> dn: m-oid=2.16.840.1.113730.3.2.22.249, ou=attributeTypes, cn=inetorgperson, 
> ou=schema
> m-oid: 2.16.840.1.113730.3.2.22.249
> m-substr: caseIgnoreSubstringsMatch
> m-syntax: 1.3.6.1.4.1.1466.115.121.1.15
> m-equality: caseIgnoreMatch
> m-singleValue: TRUE
> m-name: accountStatus
> m-collective: FALSE
> m-obsolete: FALSE
> m-usage: USER_APPLICATIONS
> objectClass: metaAttributeType
> objectClass: metaTop
> objectClass: top
> m-noUserModification: FALSE
> m-description: Account Status
>        
> dn: m-oid=2.16.840.1.113730.3.2.22, ou=objectClasses, cn=inetorgperson, 
> ou=schema
> m-oid: 2.16.840.1.113730.3.2.22
> m-obsolete: FALSE
> m-may: accountStatus
> objectClass: metaObjectClass
> objectClass: metaTop
> objectClass: top
> m-typeObjectClass: STRUCTURAL
> m-name: extendPerson
> m-supObjectClass: inetOrgPerson
> m-description: Extended InetOrgPerson
> I can then connect to the apacheDS with third party ldap tools and see that 
> these changes are present.
> I then try to add:
> dn: cn=pedwards,ou=People,dc=testdomain,dc=co,dc=nz
> objectclass: top
> objectclass: extendPerson
> uid: pedwards
> sn: Edwards
> cn: pedwards
> initials: PE
> And I get:
> LDAP: error code 65 - OBJECT_CLASS_VIOLATION: failed for     Add Request
> Attribute initials not declared in objectClasses of entry 
> cn=pedwards,ou=People,dc=testdomain,dc=co,dc=nz
> However if I use inetOrgPerson instead of extendPerson, the ldif goes in 
> fine. It seems to me that its ignoring the fact that extendPerson extends 
> inetOrgPerson.
> org.apache.directory.shared.ldap.exception.LdapSchemaViolationException: 
> Attribute initials not declared in objectClasses of entry 
> cn=pedwards,ou=People,dc=testdomain,dc=co,dc=nz
>         at 
> org.apache.directory.server.core.schema.SchemaInterceptor.assertAllAttributesAllowed(SchemaInterceptor.java:1829)
>         at 
> org.apache.directory.server.core.schema.SchemaInterceptor.check(SchemaInterceptor.java:1703)
>         at 
> org.apache.directory.server.core.schema.SchemaInterceptor.add(SchemaInterceptor.java:1787)
>         at 
> org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
>         at 
> org.apache.directory.server.core.operational.OperationalAttributeInterceptor.add(OperationalAttributeInterceptor.java:202)
>         at 
> org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
>         at 
> org.apache.directory.server.core.changelog.ChangeLogInterceptor.add(ChangeLogInterceptor.java:109)
>         at 
> org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
>         at 
> org.apache.directory.server.core.exception.ExceptionInterceptor.add(ExceptionInterceptor.java:220)
>         at 
> org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
>         at 
> org.apache.directory.server.core.interceptor.BaseInterceptor.add(BaseInterceptor.java:129)
>         at 
> org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
>         at 
> org.apache.directory.server.core.authz.AciAuthorizationInterceptor.add(AciAuthorizationInterceptor.java:448)
>         at 
> org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
>         at 
> org.apache.directory.server.core.referral.ReferralInterceptor.add(ReferralInterceptor.java:251)
>         at 
> org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
>         at 
> org.apache.directory.server.core.authn.AuthenticationInterceptor.add(AuthenticationInterceptor.java:212)
>         at 
> org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.add(InterceptorChain.java:1196)
>         at 
> org.apache.directory.server.core.normalization.NormalizationInterceptor.add(NormalizationInterceptor.java:117)
>         at 
> org.apache.directory.server.core.interceptor.InterceptorChain.add(InterceptorChain.java:756)
>         at 
> org.apache.directory.server.core.DefaultOperationManager.add(DefaultOperationManager.java:260)
>         at 
> org.apache.directory.server.core.DefaultCoreSession.add(DefaultCoreSession.java:183)
>         at 
> org.apache.directory.server.core.DefaultCoreSession.add(DefaultCoreSession.java:169)
>         at 
> org.apache.directory.server.ldap.handlers.AddHandler.handle(AddHandler.java:57)
>         at 
> org.apache.directory.server.ldap.handlers.AddHandler.handle(AddHandler.java:39)
>         at 
> org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:176)
>         at 
> org.apache.directory.server.ldap.handlers.LdapRequestHandler.handleMessage(LdapRequestHandler.java:56)
>         at 
> org.apache.mina.handler.demux.DemuxingIoHandler.messageReceived(DemuxingIoHandler.java:232)
>         at 
> org.apache.directory.server.ldap.LdapProtocolHandler.messageReceived(LdapProtocolHandler.java:194)
>         at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:722)
>         at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
>         at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:48)
>         at 
> org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:802)
>         at 
> org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:59)
>         at org.apache.mina.core.session.IoEvent.run(IoEvent.java:64)
>         at 
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:552)
>         at 
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:544)
>         at 
> org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:488)
>         at java.lang.Thread.run(Thread.java:619)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to