mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-03-07 14:18:15 +08:00
tag optional stuff
This commit is contained in:
parent
faddae3a0e
commit
6bedf74c41
@ -198,21 +198,24 @@ ldap_parse_derefresponse_control(
|
|||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( tag = ber_first_element( ber, &len, &last2 );
|
tag = ber_peek_tag( ber, &len );
|
||||||
tag != LBER_DEFAULT;
|
if ( tag == (LBER_CONSTRUCTED|LBER_CLASS_CONTEXT) ) {
|
||||||
tag = ber_next_element( ber, &len, last2 ) )
|
for ( tag = ber_first_element( ber, &len, &last2 );
|
||||||
{
|
tag != LBER_DEFAULT;
|
||||||
LDAPDerefVal *dv;
|
tag = ber_next_element( ber, &len, last2 ) )
|
||||||
|
{
|
||||||
|
LDAPDerefVal *dv;
|
||||||
|
|
||||||
dv = LDAP_CALLOC( 1, sizeof(LDAPDerefVal) );
|
dv = LDAP_CALLOC( 1, sizeof(LDAPDerefVal) );
|
||||||
|
|
||||||
tag = ber_scanf( ber, "{a[W]}", &dv->type, &dv->vals );
|
tag = ber_scanf( ber, "{a[W]}", &dv->type, &dv->vals );
|
||||||
if ( tag == LBER_ERROR ) {
|
if ( tag == LBER_ERROR ) {
|
||||||
goto done;
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
*dvp = dv;
|
||||||
|
dvp = &dv->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
*dvp = dv;
|
|
||||||
dvp = &dv->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tag = ber_scanf( ber, "}" );
|
tag = ber_scanf( ber, "}" );
|
||||||
|
@ -64,7 +64,7 @@
|
|||||||
* DerefRes ::= SEQUENCE {
|
* DerefRes ::= SEQUENCE {
|
||||||
* derefAttr AttributeDescription,
|
* derefAttr AttributeDescription,
|
||||||
* derefVal LDAPDN,
|
* derefVal LDAPDN,
|
||||||
* attrVals PartialAttributeList OPTIONAL }
|
* attrVals [0] PartialAttributeList OPTIONAL }
|
||||||
*
|
*
|
||||||
* If vals is empty, partialAttribute is omitted.
|
* If vals is empty, partialAttribute is omitted.
|
||||||
* If all vals in attrVals are empty, attrVals is omitted.
|
* If all vals in attrVals are empty, attrVals is omitted.
|
||||||
@ -345,19 +345,28 @@ deref_response( Operation *op, SlapReply *rs )
|
|||||||
rc = ber_printf( ber, "{" /*}*/ );
|
rc = ber_printf( ber, "{" /*}*/ );
|
||||||
for ( dr = drhead; dr != NULL; dr = dr->dr_next ) {
|
for ( dr = drhead; dr != NULL; dr = dr->dr_next ) {
|
||||||
for ( i = 0; !BER_BVISNULL( &dr->dr_vals[ i ].dv_derefSpecVal ); i++ ) {
|
for ( i = 0; !BER_BVISNULL( &dr->dr_vals[ i ].dv_derefSpecVal ); i++ ) {
|
||||||
int j;
|
int j, first = 1;
|
||||||
|
|
||||||
rc = ber_printf( ber, "{OO{" /*}*/,
|
rc = ber_printf( ber, "{OO" /*}*/,
|
||||||
&dr->dr_spec.ds_derefAttr->ad_cname,
|
&dr->dr_spec.ds_derefAttr->ad_cname,
|
||||||
&dr->dr_vals[ i ].dv_derefSpecVal );
|
&dr->dr_vals[ i ].dv_derefSpecVal );
|
||||||
for ( j = 0; j < dr->dr_spec.ds_nattrs; j++ ) {
|
for ( j = 0; j < dr->dr_spec.ds_nattrs; j++ ) {
|
||||||
if ( dr->dr_vals[ i ].dv_attrVals[ j ] != NULL ) {
|
if ( dr->dr_vals[ i ].dv_attrVals[ j ] != NULL ) {
|
||||||
|
if ( first ) {
|
||||||
|
rc = ber_printf( ber, "t{" /*}*/,
|
||||||
|
(LBER_CONSTRUCTED|LBER_CLASS_CONTEXT) );
|
||||||
|
first = 0;
|
||||||
|
}
|
||||||
rc = ber_printf( ber, "{O[W]}",
|
rc = ber_printf( ber, "{O[W]}",
|
||||||
&dr->dr_spec.ds_attributes[ j ]->ad_cname,
|
&dr->dr_spec.ds_attributes[ j ]->ad_cname,
|
||||||
dr->dr_vals[ i ].dv_attrVals[ j ] );
|
dr->dr_vals[ i ].dv_attrVals[ j ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rc = ber_printf( ber, /*{*/ "}N}" );
|
if ( !first ) {
|
||||||
|
rc = ber_printf( ber, /*{{*/ "}N}" );
|
||||||
|
} else {
|
||||||
|
rc = ber_printf( ber, /*{*/ "}" );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rc = ber_printf( ber, /*{*/ "}" );
|
rc = ber_printf( ber, /*{*/ "}" );
|
||||||
|
Loading…
Reference in New Issue
Block a user