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

Stefan Seelmann commented on DIRSERVER-1357:
--------------------------------------------

As far as I understand, with Emmanuel's and Kiran's solution there could be 
aliases that points to nowhere, right? But in that case the server must be able 
to handle this case for all relevant operations and throw suitable exceptions. 
I'm in doubt if the server does this right now, because it doesn't allow to 
inject a new alias that points to an non-existing entry. E.g. it must handle 
the case, when there is such an alias that points to an non-existing entry, and 
afterwards the target entry is added, then the alias indices must be updated.

I see three solutions, I already wrote in a mail [1] some time ago:
1. Reject deletion of an entry, if any alias points to this entry. This is easy 
to check in the JdbmStore using the aliasIdx.
2. Automatically delete all alias entries that point to the entry that should 
be deleted, some kind of cascade delete, may be dangerous. This is also easy to 
implement in JdmbStore.
3. Allow aliases that points to an non-existing entry. 

IMHO 1 and 2 are short-term fixes, 3 should be a goal for 2.0 but needs more 
work.

[1] http://markmail.org/message/4sttjaakkxm6qoos

> NullPointerException when deleting alias
> ----------------------------------------
>
>                 Key: DIRSERVER-1357
>                 URL: https://issues.apache.org/jira/browse/DIRSERVER-1357
>             Project: Directory ApacheDS
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.5.5, 1.5.4
>            Reporter: Stefan Seelmann
>             Fix For: 1.5.5
>
>         Attachments: DIRSERVER_1357.java
>
>
> There is a NPE when deleting an alias entry is some special case. Here is a 
> example DIT:
> ou=system
>    |--ou=sales
>    |    |--cn=foo  <--real entry
>    |--ou=engineering
>         |--cn=foo  <--alias, pointing to the real entry
> When I first delete the real entry and afterwards the alias the server throws 
> an exception, when it cleans the oneAliasIdx and subAliasIdx in the 
> JdbmStore. Note, the exception does not occur if the real entry and alias are 
> direct descendants of the context entry, because in that case the oneAliasIdx 
> and subAliasIdx are not used.
> java.lang.NullPointerException
>       at 
> org.apache.directory.server.core.partition.impl.btree.LongComparator.compare(LongComparator.java:45)
>       at 
> org.apache.directory.server.core.partition.impl.btree.LongComparator.compare(LongComparator.java:1)
>       at 
> org.apache.directory.server.core.avltree.AvlTree.find(AvlTree.java:661)
>       at 
> org.apache.directory.server.core.avltree.AvlTree.remove(AvlTree.java:217)
>       at 
> org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmTable.remove(JdbmTable.java:662)
>       at 
> org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmIndex.drop(JdbmIndex.java:468)
>       at 
> org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmStore.dropAliasIndices(JdbmStore.java:822)
>       at 
> org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmStore.delete(JdbmStore.java:1098)
>       at 
> org.apache.directory.server.core.partition.impl.btree.jdbm.JdbmPartition.delete(JdbmPartition.java:487)
>       at 
> org.apache.directory.server.core.partition.impl.btree.BTreePartition.delete(BTreePartition.java:217)
>       at 
> org.apache.directory.server.core.partition.DefaultPartitionNexus.delete(DefaultPartitionNexus.java:824)

-- 
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