From: Pierangelo Masarati Date: Sat, 14 Oct 2006 00:59:55 +0000 (+0000) Subject: read entry should allow special attributes in request (*, +, 1.1) X-Git-Tag: OPENLDAP_REL_ENG_2_3_MP~58 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=117caa9aeb2850513c3a13c8778d2426ec126a0d;p=openldap read entry should allow special attributes in request (*, +, 1.1) --- diff --git a/servers/slapd/controls.c b/servers/slapd/controls.c index b6c356e741..bc31133bac 100644 --- a/servers/slapd/controls.c +++ b/servers/slapd/controls.c @@ -1294,18 +1294,37 @@ static int parsePostRead ( goto done; } - for( i=0; isr_err = slap_bv2ad( &an[i].an_name, &an[i].an_desc, &dummy ); - if ( rs->sr_err != LDAP_SUCCESS && ctrl->ldctl_iscritical ) { - rs->sr_text = dummy - ? dummy - : "postread control: unknown attributeType"; - goto done; + rc = slap_bv2ad( &an[i].an_name, &an[i].an_desc, &dummy ); + if ( rc != LDAP_SUCCESS ) { + int i; + static struct berval special_attrs[] = { + BER_BVC( LDAP_NO_ATTRS ), + BER_BVC( LDAP_ALL_USER_ATTRIBUTES ), + BER_BVC( LDAP_ALL_OPERATIONAL_ATTRIBUTES ), + BER_BVNULL + }; + + /* deal with special attribute types */ + for ( i = 0; !BER_BVISNULL( &special_attrs[ i ] ); i++ ) { + if ( bvmatch( &an[i].an_name, &special_attrs[ i ] ) ) { + break; + } + } + + if ( BER_BVISNULL( &special_attrs[ i ] ) && ctrl->ldctl_iscritical ) { + rs->sr_err = rc; + rs->sr_text = dummy + ? dummy + : "postread control: unknown attributeType"; + goto done; + } } }