On May 18, 2008, at 11:09 AM, h.b.furuseth(a)usit.uio.no wrote:
> Full_Name: Hallvard B Furuseth
> Version: HEAD
> OS: Linux
> URL:
> Submission from: (NULL) (129.240.6.233)
> Submitted by: hallvard
>
>
> If objectclass B is a subclass of A, and an entry contains
> objectclass B
> but not A, slapd returns attributeOrValueExists to a request to add A.
Yes, A is implicitly present (by implicit add).
> OTOH it allows replace(objectClass: <A, B>), and after that it allows
> delete(objectClass: A). This is inconsistent.
This can be argued to be incorrect. It is improper to attempt to
delete a superclass of any listed class.
> If the objectClass attribute contains B, does it "really" contain A as
> well?
If provided by the client, yes. Otherwise A is implicitly present due
to B.
When a client adds B then deletes B, its a net zero result. If A were
actually added by the server, the delete of B would either leave A
behind or be invalid (such as when A is abstract).
> I couldn't find such a statement in the RFCs,
The RFCs are someone vague here.
> so my guess is that add(objectClass: A) should be allowed.
Adding A when a subclass is present is just as invalid as deleting A
when a subclass is present. Both should result in errors.
> Though I haven't looked
> all that hard.
>
> Example:
>
> ldapadd -cx <<'EOF'
> # Create initial object
> dn: c=NO
> objectClass: friendlyCountry
> c: NO
> co: Norway
>
> # error
> dn: c=NO
> changetype: modify
> add: objectClass
> objectClass: top
> -
>
> # error
> dn: c=NO
> changetype: modify
> add: objectClass
> objectClass: country
> -
>
> # success
> dn: c=NO
> changetype: modify
> replace: objectClass
> objectClass: top
> objectClass: country
> objectClass: friendlyCountry
> -
>
> # success
> dn: c=NO
> changetype: modify
> delete: objectClass
> objectClass: top
> -
>
> # success
> dn: c=NO
> changetype: modify
> delete: objectClass
> objectClass: country
> -
> EOF
>
>