From 117caa9aeb2850513c3a13c8778d2426ec126a0d Mon Sep 17 00:00:00 2001 From: Pierangelo Masarati Date: Sat, 14 Oct 2006 00:59:55 +0000 Subject: [PATCH] read entry should allow special attributes in request (*, +, 1.1) --- servers/slapd/controls.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) 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; + } } } -- 2.39.5