X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Foc.c;h=3a4c48d2c5940a28bfcb485a84f7a7f4f5f1aabf;hb=ffebea4a8b879db1a9dc23e2c2749d303b271d43;hp=c2ba69013df2c18d05162c54a4d27a1fecd2466a;hpb=58a72b915a265e25f3542eac4871e417c4612c60;p=openldap diff --git a/servers/slapd/oc.c b/servers/slapd/oc.c index c2ba69013d..3a4c48d2c5 100644 --- a/servers/slapd/oc.c +++ b/servers/slapd/oc.c @@ -48,7 +48,8 @@ int is_object_subclass( int is_entry_objectclass( Entry* e, - ObjectClass *oc ) + ObjectClass *oc, + int set_flags ) { Attribute *attr; struct berval *bv; @@ -59,6 +60,10 @@ int is_entry_objectclass( return 0; } + if( set_flags && ( e->e_ocflags & SLAP_OC__END )) { + return (e->e_ocflags & oc->soc_flags); + } + /* * find objectClass attribute */ @@ -84,13 +89,15 @@ int is_entry_objectclass( for( bv=attr->a_vals; bv->bv_val; bv++ ) { ObjectClass *objectClass = oc_bvfind( bv ); - if( objectClass == oc ) { + if ( objectClass == oc && !set_flags ) { return 1; } - } - return 0; + e->e_ocflags |= objectClass->soc_flags; + } + e->e_ocflags |= SLAP_OC__END; /* We've finished this */ + return (e->e_ocflags & oc->soc_flags); }