From 448fc0e99a35e3b19b9e6f633dceac845616f0b1 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Wed, 27 Oct 1999 04:36:10 +0000 Subject: [PATCH] For LDAPV2 results, make sure Referrals are appended to any error text instead of replacing it. --- servers/slapd/result.c | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/servers/slapd/result.c b/servers/slapd/result.c index 31b130aef5..78b5f7d99c 100644 --- a/servers/slapd/result.c +++ b/servers/slapd/result.c @@ -18,15 +18,25 @@ /* we need LBER internals */ #include "../../libraries/liblber/lber-int.h" -static char *v2ref( struct berval **ref ) +static char *v2ref( struct berval **ref, const char *text ) { - size_t len, i; + size_t len = 0, i = 0; char *v2; - if(ref == NULL) return NULL; + if(ref == NULL) return (char *)text; - len = sizeof("Referral:"); - v2 = ch_strdup("Referral:"); + if (text) { + len = strlen( text ); + if (text[len-1] != '\n') + i = 1; + } + v2 = ch_malloc( len+i+sizeof("Referral:") ); + if (text) { + strcpy(v2, text); + if (i) + v2[len++] = '\n'; + } + strcpy( v2+len, "Referral:" ); for( i=0; ref[i] != NULL; i++ ) { v2 = ch_realloc( v2, len + ref[i]->bv_len + 1 ); @@ -384,12 +394,15 @@ send_ldap_result( err = LDAP_NO_SUCH_OBJECT; } else if ( op->o_protocol < LDAP_VERSION3 ) { err = LDAP_PARTIAL_RESULTS; - tmp = v2ref( ref ); - text = tmp; - ref = NULL; } } + if ( op->o_protocol < LDAP_VERSION3 ) { + tmp = v2ref( ref, text ); + text = tmp; + ref = NULL; + } + tag = req2res( op->o_tag ); msgid = (tag != LBER_SEQUENCE) ? op->o_msgid : 0; @@ -449,11 +462,9 @@ send_search_result( err = LDAP_PARTIAL_RESULTS; } - tmp = v2ref( refs ); + tmp = v2ref( refs, text ); + text = tmp; refs = NULL; - - if( tmp != NULL ) text = tmp; - } else { /* don't send references in search results */ assert( refs == NULL ); -- 2.39.5