From e2483d8a9bc7fa72bac53d8af3ed215d3a1d80d0 Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Tue, 16 Dec 2003 01:10:33 +0000 Subject: [PATCH] honor '!' (objectClass negation) when checking attribute presence in list --- servers/slapd/ad.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/servers/slapd/ad.c b/servers/slapd/ad.c index 51399c3934..8543c9b2a4 100644 --- a/servers/slapd/ad.c +++ b/servers/slapd/ad.c @@ -555,6 +555,42 @@ int ad_inlist( attrs->an_oc = oc; } if( oc != NULL ) { + if ( attrs->an_oc_exclude ) { + int gotit = 0; + + if ( oc == slap_schema.si_oc_extensibleObject ) { + /* extensibleObject allows the return of anything */ + return 0; + } + + if( oc->soc_required ) { + /* allow return of required attributes */ + int i; + + for ( i = 0; oc->soc_required[i] != NULL; i++ ) { + for (a = desc->ad_type; a; a=a->sat_sup) { + if ( a == oc->soc_required[i] ) { + return 0; + } + } + } + } + + if( oc->soc_allowed ) { + /* allow return of allowed attributes */ + int i; + for ( i = 0; oc->soc_allowed[i] != NULL; i++ ) { + for (a = desc->ad_type; a; a=a->sat_sup) { + if ( a == oc->soc_allowed[i] ) { + return 0; + } + } + } + } + + return 1; + } + if ( oc == slap_schema.si_oc_extensibleObject ) { /* extensibleObject allows the return of anything */ return 1; @@ -563,6 +599,7 @@ int ad_inlist( if( oc->soc_required ) { /* allow return of required attributes */ int i; + for ( i = 0; oc->soc_required[i] != NULL; i++ ) { for (a = desc->ad_type; a; a=a->sat_sup) { if ( a == oc->soc_required[i] ) { -- 2.39.5