SubtreeSpecificationParser and LDAP filter
------------------------------------------
Key: DIRSERVER-916
URL: https://issues.apache.org/jira/browse/DIRSERVER-916
Project: Directory ApacheDS
Issue Type: Bug
Reporter: Stefan Seelmann
Fix For: 1.5.1
I got a curious error. While playing with the new LS subtreespecification
editor and writing a subtreespecification with an LDAP filter the
SubtreeSpecificationParser *sometimes* gets killed.
It seems like the parser is stateful. If I first write some
subtreespecifications w/o an LDAP filter the parser seems to be stable. But
when adding it just after starting the server the parser dies with an "Read end
dead".
It was able to reproduce it with the following steps, using the trunk:
1.) Create an entry with the following subtreespecification
-------------------------------------------------------------------
dn: cn=subentry,dc=example,dc=com
objectClass: accessControlSubentry
objectClass: subentry
objectClass: top
cn: subentry
prescriptiveaci: { identificationTag "dummy", precedence 1, authenticationLe
vel none, itemOrUserFirst userFirst: { userClasses { }, userPermissions {
} } }
subtreespecification: { specificationFilter (cn=test) }
-------------------------------------------------------------------
2.) Shutdown the server
3.) Startup the server
4.) Overwrite the subtreespecification value with a refinement
-------------------------------------------------------------------
dn: cn=subentry,dc=example,dc=com
changetype: modify
replace: subtreespecification
subtreespecification: { specificationFilter item:top }
-
-------------------------------------------------------------------
4.) Overwrite the subtreespecification value with a filter
-------------------------------------------------------------------
dn: cn=subentry,dc=example,dc=com
changetype: modify
replace: subtreespecification
subtreespecification: { specificationFilter (cn=test) }
-
-------------------------------------------------------------------
The client receives the following error message:
-------------------------------------------------------------------
ldap_modify: Invalid syntax (21)
additional info: failed to modify entry cn=subentry,dc=example,dc=com:
failed to parse the new subtreeSpecification
-------------------------------------------------------------------
The server throws the following exception:
-------------------------------------------------------------------
[22:46:49] ERROR [org.apache.directory.server.core.subtree.SubentryService] -
failed to parse the new subtreeSpecification
java.text.ParseException: Parser failure on subtree specification:
{ specificationFilter (cn=test) }
Antlr exception trace:
filterParser failed. Read end dead
at
org.apache.directory.shared.ldap.subtree.SubtreeSpecificationParser.parse(SubtreeSpecificationParser.java:133)
at
org.apache.directory.server.core.subtree.SubentryService.modify(SubentryService.java:1045)
at
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.modify(InterceptorChain.java:1162)
at
org.apache.directory.server.core.schema.SchemaService.modify(SchemaService.java:1517)
at
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.modify(InterceptorChain.java:1162)
at
org.apache.directory.server.core.operational.OperationalAttributeService.modify(OperationalAttributeService.java:177)
at
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.modify(InterceptorChain.java:1162)
at
org.apache.directory.server.core.exception.ExceptionService.modify(ExceptionService.java:291)
at
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.modify(InterceptorChain.java:1162)
at
org.apache.directory.server.core.authz.DefaultAuthorizationService.modify(DefaultAuthorizationService.java:241)
at
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.modify(InterceptorChain.java:1162)
at
org.apache.directory.server.core.authz.AuthorizationService.modify(AuthorizationService.java:510)
at
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.modify(InterceptorChain.java:1162)
at
org.apache.directory.server.core.referral.ReferralService.modify(ReferralService.java:746)
at
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.modify(InterceptorChain.java:1162)
at
org.apache.directory.server.core.authn.AuthenticationService.modify(AuthenticationService.java:351)
at
org.apache.directory.server.core.interceptor.InterceptorChain$Entry$1.modify(InterceptorChain.java:1162)
at
org.apache.directory.server.core.normalization.NormalizationService.modify(NormalizationService.java:132)
at
org.apache.directory.server.core.interceptor.InterceptorChain.modify(InterceptorChain.java:761)
at
org.apache.directory.server.core.partition.PartitionNexusProxy.modify(PartitionNexusProxy.java:362)
at
org.apache.directory.server.core.partition.PartitionNexusProxy.modify(PartitionNexusProxy.java:349)
at
org.apache.directory.server.core.jndi.ServerDirContext.modifyAttributes(ServerDirContext.java:233)
at
javax.naming.directory.InitialDirContext.modifyAttributes(InitialDirContext.java:153)
at
org.apache.directory.server.ldap.support.ModifyHandler.messageReceived(ModifyHandler.java:80)
at
org.apache.mina.handler.demux.DemuxingIoHandler.messageReceived(DemuxingIoHandler.java:144)
at
org.apache.directory.server.ldap.LdapProtocolProvider$LdapProtocolHandler.messageReceived(LdapProtocolProvider.java:427)
at
org.apache.mina.common.support.AbstractIoFilterChain$TailFilter.messageReceived(AbstractIoFilterChain.java:703)
at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:362)
at
org.apache.mina.common.support.AbstractIoFilterChain.access$1200(AbstractIoFilterChain.java:54)
at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:800)
at
org.apache.mina.filter.LoggingFilter.messageReceived(LoggingFilter.java:97)
at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:362)
at
org.apache.mina.common.support.AbstractIoFilterChain.access$1200(AbstractIoFilterChain.java:54)
at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:800)
at
org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush(SimpleProtocolDecoderOutput.java:60)
at
org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:190)
at
org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:362)
at
org.apache.mina.common.support.AbstractIoFilterChain.access$1200(AbstractIoFilterChain.java:54)
at
org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:800)
at
org.apache.mina.filter.executor.ExecutorFilter.processEvent(ExecutorFilter.java:243)
at
org.apache.mina.filter.executor.ExecutorFilter$ProcessEventsRunnable.run(ExecutorFilter.java:305)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:665)
at
edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:690)
at java.lang.Thread.run(Thread.java:595)
-------------------------------------------------------------------
Now when trying to modify the subtreespecification again, the client gets the
follwoing message, but no server logs:
-------------------------------------------------------------------
ldap_modify: Loop detected (54)
additional info: failed to modify entry cn=subentry,dc=example,dc=com:
Unexpected exception
-------------------------------------------------------------------
The same error occurs when trying to delete the entry
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.