X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fresult.c;h=228d4efdc4f666e39cae25e8f30820896a9f4fa4;hb=e25f6ef0cdd1780577dffeaca8ba8b19b5697880;hp=245ce3815008f28402e3007ef57c6179acba25a2;hpb=9383bf326511a182c8547e340f22aa4ff2632597;p=openldap diff --git a/servers/slapd/result.c b/servers/slapd/result.c index 245ce38150..228d4efdc4 100644 --- a/servers/slapd/result.c +++ b/servers/slapd/result.c @@ -1,7 +1,7 @@ /* result.c - routines to send ldap results, errors, and referrals */ /* $OpenLDAP$ */ /* - * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ @@ -19,7 +19,7 @@ #include "slap.h" -static char *v2ref( struct berval **ref, const char *text ) +static char *v2ref( BerVarray ref, const char *text ) { size_t len = 0, i = 0; char *v2; @@ -49,12 +49,12 @@ static char *v2ref( struct berval **ref, const char *text ) strcpy( v2+len, "Referral:" ); len += sizeof("Referral:"); - for( i=0; ref[i] != NULL; i++ ) { - v2 = ch_realloc( v2, len + ref[i]->bv_len + 1 ); + for( i=0; ref[i].bv_val != NULL; i++ ) { + v2 = ch_realloc( v2, len + ref[i].bv_len + 1 ); v2[len-1] = '\n'; - AC_MEMCPY(&v2[len], ref[i]->bv_val, ref[i]->bv_len ); - len += ref[i]->bv_len; - if (ref[i]->bv_val[ref[i]->bv_len-1] != '/') { + AC_MEMCPY(&v2[len], ref[i].bv_val, ref[i].bv_len ); + len += ref[i].bv_len; + if (ref[i].bv_val[ref[i].bv_len-1] != '/') { ++len; } } @@ -142,7 +142,6 @@ static long send_ldap_ber( err, sock_errstr(err), 0 ); #endif - if ( err != EWOULDBLOCK && err != EAGAIN ) { connection_closing( conn ); @@ -176,7 +175,7 @@ send_ldap_response( ber_int_t err, const char *matched, const char *text, - struct berval **ref, + BerVarray ref, const char *resoid, struct berval *resdata, struct berval *sasldata, @@ -188,8 +187,8 @@ send_ldap_response( int rc; long bytes; - if (op->o_response) { - op->o_response( conn, op, tag, msgid, err, matched, + if (op->o_callback && op->o_callback->sc_response) { + op->o_callback->sc_response( conn, op, tag, msgid, err, matched, text, ref, resoid, resdata, sasldata, ctrls ); return; } @@ -208,16 +207,15 @@ send_ldap_response( (long) msgid, (long) tag, (long) err ); #endif - if( ref ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ARGS, "send_ldap_response: conn %d ref=\"%s\"\n", conn ? conn->c_connid : 0, - ref[0] && ref[0]->bv_val ? ref[0]->bv_val : "NULL" )); + ref[0].bv_val ? ref[0].bv_val : "NULL" )); #else Debug( LDAP_DEBUG_ARGS, "send_ldap_response: ref=\"%s\"\n", - ref[0] && ref[0]->bv_val ? ref[0]->bv_val : "NULL", + ref[0].bv_val ? ref[0].bv_val : "NULL", NULL, NULL ); #endif @@ -255,7 +253,7 @@ send_ldap_response( if( rc != -1 ) { if ( ref != NULL ) { assert( err == LDAP_REFERRAL ); - rc = ber_printf( ber, "t{V}", + rc = ber_printf( ber, "t{W}", LDAP_TAG_REFERRAL, ref ); } else { assert( err != LDAP_REFERRAL ); @@ -383,7 +381,7 @@ send_ldap_result( ber_int_t err, const char *matched, const char *text, - struct berval **ref, + BerVarray ref, LDAPControl **ctrls ) { @@ -418,11 +416,11 @@ send_ldap_result( #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ARGS, "send_ldap_result: referral=\"%s\"\n", - ref[0] && ref[0]->bv_val ? ref[0]->bv_val : "NULL" )); + ref[0].bv_val ? ref[0].bv_val : "NULL" )); #else Debug( LDAP_DEBUG_ARGS, "send_ldap_result: referral=\"%s\"\n", - ref[0] && ref[0]->bv_val ? ref[0]->bv_val : "NULL", + ref[0].bv_val ? ref[0].bv_val : "NULL", NULL, NULL ); #endif } @@ -467,7 +465,7 @@ send_ldap_sasl( ber_int_t err, const char *matched, const char *text, - struct berval **ref, + BerVarray ref, LDAPControl **ctrls, struct berval *cred ) @@ -500,7 +498,7 @@ send_ldap_extended( ber_int_t err, const char *matched, const char *text, - struct berval **refs, + BerVarray refs, const char *rspoid, struct berval *rspdata, LDAPControl **ctrls @@ -539,7 +537,7 @@ send_search_result( ber_int_t err, const char *matched, const char *text, - struct berval **refs, + BerVarray refs, LDAPControl **ctrls, int nentries ) @@ -550,8 +548,8 @@ send_search_result( assert( !LDAP_API_ERROR( err ) ); - if (op->o_sresult) { - op->o_sresult(conn, op, err, matched, text, refs, + if (op->o_callback && op->o_callback->sc_sresult) { + op->o_callback->sc_sresult(conn, op, err, matched, text, refs, ctrls, nentries); return; } @@ -618,13 +616,13 @@ send_search_entry( Connection *conn, Operation *op, Entry *e, - struct berval **attrs, + AttributeName *attrs, int attrsonly, LDAPControl **ctrls ) { char berbuf[256]; - BerElement *ber = (BerElement *)berbuf;; + BerElement *ber = (BerElement *)berbuf; Attribute *a, *aa; int i, rc=-1, bytes; char *edn; @@ -633,6 +631,11 @@ send_search_entry( AttributeDescription *ad_entry = slap_schema.si_ad_entry; + if (op->o_callback && op->o_callback->sc_sendentry) { + return op->o_callback->sc_sendentry( be, conn, op, e, attrs, + attrsonly, ctrls ); + } + #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ENTRY, "send_search_entry: conn %d dn=\"%s\"%s\n", @@ -707,11 +710,11 @@ send_search_entry( /* check for special all user attributes ("*") type */ userattrs = ( attrs == NULL ) ? 1 - : bvec_inlist( attrs, &AllUser ); + : an_find( attrs, &AllUser ); /* check for special all operational attributes ("+") type */ opattrs = ( attrs == NULL ) ? 0 - : bvec_inlist( attrs, &AllOper ); + : an_find( attrs, &AllOper ); for ( a = e->e_attrs; a != NULL; a = a->a_next ) { AttributeDescription *desc = a->a_desc; @@ -766,9 +769,9 @@ send_search_entry( } if ( ! attrsonly ) { - for ( i = 0; a->a_vals[i] != NULL; i++ ) { + for ( i = 0; a->a_vals[i].bv_val != NULL; i++ ) { if ( ! access_allowed( be, conn, op, e, - desc, a->a_vals[i], ACL_READ ) ) + desc, &a->a_vals[i], ACL_READ ) ) { #ifdef NEW_LOGGING LDAP_LOG(( "acl", LDAP_LEVEL_INFO, @@ -783,7 +786,7 @@ send_search_entry( continue; } - if (( rc = ber_printf( ber, "O", a->a_vals[i] )) == -1 ) { + if (( rc = ber_printf( ber, "O", &a->a_vals[i] )) == -1 ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ERR, "send_search_entry: conn %d ber_printf failed.\n", @@ -875,9 +878,9 @@ send_search_entry( } if ( ! attrsonly ) { - for ( i = 0; a->a_vals[i] != NULL; i++ ) { + for ( i = 0; a->a_vals[i].bv_val != NULL; i++ ) { if ( ! access_allowed( be, conn, op, e, - desc, a->a_vals[i], ACL_READ ) ) + desc, &a->a_vals[i], ACL_READ ) ) { #ifdef NEW_LOGGING LDAP_LOG(( "acl", LDAP_LEVEL_INFO, @@ -893,7 +896,7 @@ send_search_entry( } - if (( rc = ber_printf( ber, "O", a->a_vals[i] )) == -1 ) { + if (( rc = ber_printf( ber, "O", &a->a_vals[i] )) == -1 ) { #ifdef NEW_LOGGING LDAP_LOG(( "operation", LDAP_LEVEL_ERR, "send_search_entry: conn %d ber_printf failed\n", @@ -999,9 +1002,9 @@ send_search_reference( Connection *conn, Operation *op, Entry *e, - struct berval **refs, + BerVarray refs, LDAPControl **ctrls, - struct berval ***v2refs + BerVarray *v2refs ) { char berbuf[256]; @@ -1071,7 +1074,7 @@ send_search_reference( if( op->o_protocol < LDAP_VERSION3 ) { /* save the references for the result */ - if( *refs != NULL ) { + if( refs[0].bv_val != NULL ) { value_add( v2refs, refs ); } return 0; @@ -1079,7 +1082,7 @@ send_search_reference( ber_init_w_nullc( ber, LBER_USE_DER ); - rc = ber_printf( ber, "{it{V}N}", op->o_msgid, + rc = ber_printf( ber, "{it{W}N}", op->o_msgid, LDAP_RES_SEARCH_REFERENCE, refs ); if ( rc == -1 ) {