X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fresult.c;h=781b5e0340ec53c3bb1d6ed5fe1322b14a267a71;hb=4a2b9b21951cb9966f98cd49064e856f6ff7e6a4;hp=3d326ca7c5c4d040309ee50ee96fedf774437bd3;hpb=49f414738569096eae2c94a4f05f0f3f2636b8b7;p=openldap diff --git a/libraries/libldap/result.c b/libraries/libldap/result.c index 3d326ca7c5..781b5e0340 100644 --- a/libraries/libldap/result.c +++ b/libraries/libldap/result.c @@ -1,6 +1,6 @@ /* $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 */ /* Portions @@ -63,17 +63,22 @@ static ber_tag_t try_read1msg LDAP_P(( LDAP *ld, ber_int_t msgid, int all, Sockbuf *sb, LDAPConn *lc, LDAPMessage **result )); static ber_tag_t build_result_ber LDAP_P(( LDAP *ld, BerElement **bp, LDAPRequest *lr )); static void merge_error_info LDAP_P(( LDAP *ld, LDAPRequest *parentr, LDAPRequest *lr )); +static LDAPMessage * chkResponseList LDAP_P(( LDAP *ld, int msgid, int all)); /* * ldap_result - wait for an ldap result response to a message from the - * ldap server. If msgid is -1, any message will be accepted, otherwise - * ldap_result will wait for a response with msgid. If all is 0 the - * first message with id msgid will be accepted, otherwise, ldap_result - * will wait for all responses with id msgid and then return a pointer to - * the entire list of messages. This is only useful for search responses, - * which can be of two message types (zero or more entries, followed by an - * ldap result). The type of the first message received is returned. + * ldap server. If msgid is LDAP_RES_ANY (-1), any message will be + * accepted. If msgid is LDAP_RES_UNSOLICITED (0), any unsolicited + * message is accepted. Otherwise ldap_result will wait for a response + * with msgid. If all is LDAP_MSG_ONE (0) the first message with id + * msgid will be accepted, otherwise, ldap_result will wait for all + * responses with id msgid and then return a pointer to the entire list + * of messages. In general, this is only useful for search responses, + * which can be of three message types (zero or more entries, zero or + * search references, followed by an ldap result). An extension to + * LDAPv3 allows partial extended responses to be returned in response + * to any request. The type of the first message received is returned. * When waiting, any messages that have been abandoned are discarded. * * Example: @@ -87,12 +92,16 @@ ldap_result( struct timeval *timeout, LDAPMessage **result ) { - LDAPMessage *lm, *lastlm, *nextlm; + LDAPMessage *lm; assert( ld != NULL ); assert( result != NULL ); - Debug( LDAP_DEBUG_TRACE, "ldap_result\n", 0, 0, 0 ); +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_ARGS, "ldap_result msgid %d\n", msgid )); +#else + Debug( LDAP_DEBUG_TRACE, "ldap_result msgid %d\n", msgid, 0, 0 ); +#endif if( ld == NULL ) { return -1; @@ -103,22 +112,56 @@ ldap_result( return -1; } - /* - * First, look through the list of responses we have received on + lm = chkResponseList(ld, msgid, all); + + if ( lm == NULL ) { + return( wait4msg( ld, msgid, all, timeout, result ) ); + } + + *result = lm; + ld->ld_errno = LDAP_SUCCESS; + return( lm->lm_msgtype ); +} + +static LDAPMessage * +chkResponseList( + LDAP *ld, + int msgid, + int all) +{ + LDAPMessage *lm, *lastlm, *nextlm; + /* + * Look through the list of responses we have received on * this association and see if the response we're interested in * is there. If it is, return it. If not, call wait4msg() to * wait until it arrives or timeout occurs. */ - *result = NULL; +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_ARGS, + "ldap_chkResponseList for msgid=%d, all=%d\n", msgid, all )); +#else + Debug( LDAP_DEBUG_TRACE, + "ldap_chkResponseList for msgid=%d, all=%d\n", + msgid, all, 0 ); +#endif lastlm = NULL; for ( lm = ld->ld_responses; lm != NULL; lm = nextlm ) { nextlm = lm->lm_next; if ( ldap_abandoned( ld, lm->lm_msgid ) ) { +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "ldap_chkResponseList msg abandoned, msgid %d\n", msgid )); +#else + Debug( LDAP_DEBUG_TRACE, + "ldap_chkResponseList msg abandoned, msgid %d\n", + msgid, 0, 0 ); +#endif ldap_mark_abandoned( ld, lm->lm_msgid ); if ( lastlm == NULL ) { + /* Remove first entry in list */ ld->ld_responses = lm->lm_next; } else { lastlm->lm_next = nextlm; @@ -132,16 +175,17 @@ ldap_result( if ( msgid == LDAP_RES_ANY || lm->lm_msgid == msgid ) { LDAPMessage *tmp; - if ( all == LDAP_MSG_ONE - || (lm->lm_msgtype != LDAP_RES_SEARCH_RESULT - && lm->lm_msgtype != LDAP_RES_SEARCH_REFERENCE /* LDAPv3 */ - && lm->lm_msgtype != LDAP_RES_SEARCH_ENTRY - && lm->lm_msgtype != LDAP_RES_EXTENDED_PARTIAL) ) + if ( all == LDAP_MSG_ONE || msgid == LDAP_RES_UNSOLICITED ) { break; + } for ( tmp = lm; tmp != NULL; tmp = tmp->lm_chain ) { - if ( tmp->lm_msgtype == LDAP_RES_SEARCH_RESULT ) + if ( tmp->lm_msgtype != LDAP_RES_SEARCH_ENTRY + && tmp->lm_msgtype != LDAP_RES_SEARCH_REFERENCE + && tmp->lm_msgtype != LDAP_RES_EXTENDED_PARTIAL ) + { break; + } } if ( tmp == NULL ) { @@ -152,27 +196,45 @@ ldap_result( } lastlm = lm; } - if ( lm == NULL ) { - return( wait4msg( ld, msgid, all, timeout, result ) ); - } - if ( lastlm == NULL ) { - ld->ld_responses = (all == LDAP_MSG_ONE && lm->lm_chain != NULL - ? lm->lm_chain : lm->lm_next); + if ( lm != NULL ) { + /* Found an entry, remove it from the list */ + if ( lastlm == NULL ) { + ld->ld_responses = (all == LDAP_MSG_ONE && lm->lm_chain != NULL + ? lm->lm_chain : lm->lm_next); + } else { + lastlm->lm_next = (all == LDAP_MSG_ONE && lm->lm_chain != NULL + ? lm->lm_chain : lm->lm_next); + } + if ( all == LDAP_MSG_ONE && lm->lm_chain != NULL ) { + lm->lm_chain->lm_next = lm->lm_next; + lm->lm_chain = NULL; + } + lm->lm_next = NULL; + } + +#ifdef LDAP_DEBUG + if( lm == NULL) { +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_RESULTS, + "ldap_chkResponseList returns NULL\n" )); +#else + Debug( LDAP_DEBUG_TRACE, + "ldap_chkResponseList returns NULL\n", 0, 0, 0); +#endif } else { - lastlm->lm_next = (all == LDAP_MSG_ONE && lm->lm_chain != NULL - ? lm->lm_chain : lm->lm_next); - } - if ( all == LDAP_MSG_ONE && lm->lm_chain != NULL ) - { - lm->lm_chain->lm_next = lm->lm_next; - lm->lm_chain = NULL; +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_RESULTS, + "ldap_chkResponseList returns msgid %d, type 0x02lu\n", + lm->lm_msgid, (unsigned long) lm->lm_msgtype )); +#else + Debug( LDAP_DEBUG_TRACE, + "ldap_chkResponseList returns msgid %d, type 0x%02lu\n", + lm->lm_msgid, (unsigned long) lm->lm_msgtype, 0); +#endif } - lm->lm_next = NULL; - - *result = lm; - ld->ld_errno = LDAP_SUCCESS; - return( lm->lm_msgtype ); +#endif + return lm; } static int @@ -194,11 +256,22 @@ wait4msg( #ifdef LDAP_DEBUG if ( timeout == NULL ) { - Debug( LDAP_DEBUG_TRACE, "wait4msg (infinite timeout)\n", - 0, 0, 0 ); +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_ARGS, + "wait4msg (infinite timeout), msgid %d\n", msgid )); +#else + Debug( LDAP_DEBUG_TRACE, "wait4msg (infinite timeout), msgid %d\n", + msgid, 0, 0 ); +#endif } else { - Debug( LDAP_DEBUG_TRACE, "wait4msg (timeout %ld sec, %ld usec)\n", - (long) timeout->tv_sec, (long) timeout->tv_usec, 0 ); +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_ARGS, + "wait4msg (timeout %ld sec, %ld usec), msgid %d\n", + (long) timeout->tv_sec, (long) timeout->tv_usec, msgid )); +#else + Debug( LDAP_DEBUG_TRACE, "wait4msg (timeout %ld sec, %ld usec), msgid %d\n", + (long) timeout->tv_sec, (long) timeout->tv_usec, msgid ); +#endif } #endif /* LDAP_DEBUG */ @@ -213,57 +286,76 @@ wait4msg( rc = -2; while ( rc == -2 ) { #ifdef LDAP_DEBUG +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_ARGS, + "wait4msg continue, msgid %d, all %d\n", msgid, all )); +#else + Debug( LDAP_DEBUG_TRACE, "wait4msg continue, msgid %d, all %d\n", + msgid, all, 0 ); +#endif if ( ldap_debug & LDAP_DEBUG_TRACE ) { ldap_dump_connection( ld, ld->ld_conns, 1 ); ldap_dump_requests_and_responses( ld ); } #endif /* LDAP_DEBUG */ - for ( lc = ld->ld_conns; lc != NULL; lc = lc->lconn_next ) { - if ( ber_sockbuf_ctrl( lc->lconn_sb, - LBER_SB_OPT_DATA_READY, NULL ) ) { - rc = try_read1msg( ld, msgid, all, lc->lconn_sb, - lc, result ); - break; - } - } - if ( lc == NULL ) { - rc = do_ldap_select( ld, tvp ); + if( (*result = chkResponseList(ld, msgid, all)) != NULL ) { + rc = (*result)->lm_msgtype; + } else { + + for ( lc = ld->ld_conns; lc != NULL; lc = lc->lconn_next ) { + if ( ber_sockbuf_ctrl( lc->lconn_sb, + LBER_SB_OPT_DATA_READY, NULL ) ) { + rc = try_read1msg( ld, msgid, all, lc->lconn_sb, + lc, result ); + break; + } + } + + if ( lc == NULL ) { + rc = ldap_int_select( ld, tvp ); #ifdef LDAP_DEBUG - if ( rc == -1 ) { - Debug( LDAP_DEBUG_TRACE, - "do_ldap_select returned -1: errno %d\n", - errno, 0, 0 ); - } + if ( rc == -1 ) { +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_ARGS, + "wait4msg: ldap_int_select returned -1: errno %d\n", + errno )); +#else + Debug( LDAP_DEBUG_TRACE, + "ldap_int_select returned -1: errno %d\n", + errno, 0, 0 ); +#endif + } #endif - if ( rc == 0 || ( rc == -1 && ( - !LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_RESTART) - || errno != EINTR ))) - { - ld->ld_errno = (rc == -1 ? LDAP_SERVER_DOWN : - LDAP_TIMEOUT); - return( rc ); - } - - if ( rc == -1 ) { - rc = -2; /* select interrupted: loop */ - } else { - rc = -2; - for ( lc = ld->ld_conns; rc == -2 && lc != NULL; - lc = nextlc ) { - nextlc = lc->lconn_next; - if ( lc->lconn_status == - LDAP_CONNST_CONNECTED && - ldap_is_read_ready( ld, - lc->lconn_sb )) { - rc = try_read1msg( ld, msgid, all, - lc->lconn_sb, lc, result ); - } - } - } + if ( rc == 0 || ( rc == -1 && ( + !LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_RESTART) + || errno != EINTR ))) + { + ld->ld_errno = (rc == -1 ? LDAP_SERVER_DOWN : + LDAP_TIMEOUT); + return( rc ); + } + + if ( rc == -1 ) { + rc = -2; /* select interrupted: loop */ + } else { + rc = -2; + for ( lc = ld->ld_conns; rc == -2 && lc != NULL; + lc = nextlc ) { + nextlc = lc->lconn_next; + if ( lc->lconn_status == + LDAP_CONNST_CONNECTED && + ldap_is_read_ready( ld, + lc->lconn_sb )) { + rc = try_read1msg( ld, msgid, all, + lc->lconn_sb, lc, result ); + } + } + } + } } if ( rc == -2 && tvp != NULL ) { @@ -274,8 +366,13 @@ wait4msg( break; } +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "wait4msg: %ld secs to go\n", (long) tv.tv_sec )); +#else Debug( LDAP_DEBUG_TRACE, "wait4msg: %ld secs to go\n", (long) tv.tv_sec, 0, 0 ); +#endif start_time = tmp_time; } } @@ -290,7 +387,7 @@ try_read1msg( ber_int_t msgid, int all, Sockbuf *sb, - LDAPConn *lc, + LDAPConn *lc, LDAPMessage **result ) { BerElement *ber; @@ -312,7 +409,12 @@ try_read1msg( assert( ld != NULL ); assert( lc != NULL ); - Debug( LDAP_DEBUG_TRACE, "read1msg\n", 0, 0, 0 ); +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_ARGS, "read1msg: msgid %d, all %d\n", + msgid, all )); +#else + Debug( LDAP_DEBUG_TRACE, "read1msg: msgid %d, all %d\n", msgid, all, 0 ); +#endif if ( lc->lconn_ber == NULL ) { lc->lconn_ber = ldap_alloc_ber_with_options(ld); @@ -323,17 +425,28 @@ try_read1msg( } ber = lc->lconn_ber; - assert( BER_VALID (ber) ); + assert( LBER_VALID (ber) ); /* get the next message */ errno = 0; +#ifdef LDAP_CONNECTIONLESS + if ( LDAP_IS_UDP(ld) ) { + struct sockaddr from; + ber_int_sb_read(sb, &from, sizeof(struct sockaddr)); + } +#endif if ( (tag = ber_get_next( sb, &len, ber )) != LDAP_TAG_MESSAGE ) { if ( tag == LBER_DEFAULT) { #ifdef LDAP_DEBUG +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: ber_get_next failed\n" )); +#else Debug( LDAP_DEBUG_CONNS, "ber_get_next failed.\n", 0, 0, 0 ); #endif +#endif #ifdef EWOULDBLOCK if (errno==EWOULDBLOCK) return -2; #endif @@ -363,18 +476,34 @@ try_read1msg( /* if it's been abandoned, toss it */ if ( ldap_abandoned( ld, id ) ) { ber_free( ber, 1 ); +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: abandoned\n" )); +#else Debug( LDAP_DEBUG_ANY, "abandoned\n", 0, 0, 0); +#endif return( -2 ); /* continue looking */ } if (( lr = ldap_find_request_by_msgid( ld, id )) == NULL ) { +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: no request for response with msgid %ld (tossing)\n", + (long) id )); +#else Debug( LDAP_DEBUG_ANY, "no request for response with msgid %ld (tossing)\n", (long) id, 0, 0 ); +#endif ber_free( ber, 1 ); return( -2 ); /* continue looking */ } - +#ifdef LDAP_CONNECTIONLESS + if (LDAP_IS_UDP(ld) && ld->ld_options.ldo_version == LDAP_VERSION2) { + struct berval blank; + ber_scanf(ber, "m{", &blank); + } +#endif /* the message type */ if ( (tag = ber_peek_tag( ber, &len )) == LBER_ERROR ) { ld->ld_errno = LDAP_DECODING_ERROR; @@ -382,9 +511,17 @@ try_read1msg( return( -1 ); } - Debug( LDAP_DEBUG_TRACE, "ldap_read: message type %s msgid %ld, original id %ld\n", +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: ldap_read: message type %s msgid %ld, original id %ld\n", + ldap_int_msgtype2str( tag ), + (long) lr->lr_msgid, (long) lr->lr_origid )); +#else + Debug( LDAP_DEBUG_TRACE, + "ldap_read: message type %s msgid %ld, original id %ld\n", ldap_int_msgtype2str( tag ), (long) lr->lr_msgid, (long) lr->lr_origid ); +#endif id = lr->lr_origid; refer_cnt = 0; @@ -414,14 +551,21 @@ try_read1msg( } else { /* Note: refs arrary is freed by ldap_chase_v3referrals */ refer_cnt = ldap_chase_v3referrals( ld, lr, refs, - &lr->lr_res_error, &hadref ); + 1, &lr->lr_res_error, &hadref ); if ( refer_cnt > 0 ) { /* sucessfully chased reference */ /* If haven't got end search, set chasing referrals */ if( lr->lr_status != LDAP_REQST_COMPLETED) { lr->lr_status = LDAP_REQST_CHASINGREFS; +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: search ref chased," + "mark request chasing refs, id = %d\n", + lr->lr_msgid )); +#else Debug( LDAP_DEBUG_TRACE, "read1msg: search ref chased, mark request chasing refs, id = %d\n", lr->lr_msgid, 0, 0); +#endif } v3ref = 1; /* We sucessfully chased the reference */ } @@ -445,19 +589,33 @@ try_read1msg( if( ber_scanf( &tmpber, "{v}", &refs) == LBER_ERROR) { rc = LDAP_DECODING_ERROR; lr->lr_status = LDAP_REQST_COMPLETED; +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: referral decode error," + "mark request completed, id = %d\n", + lr->lr_msgid )); +#else Debug( LDAP_DEBUG_TRACE, "read1msg: referral decode error, mark request completed, id = %d\n", lr->lr_msgid, 0, 0); +#endif } else { /* Chase the referral * Note: refs arrary is freed by ldap_chase_v3referrals */ refer_cnt = ldap_chase_v3referrals( ld, lr, refs, - &lr->lr_res_error, &hadref ); + 0, &lr->lr_res_error, &hadref ); lr->lr_status = LDAP_REQST_COMPLETED; +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: referral chased," + "mark request completed, id = %d\n", + lr->lr_msgid )); +#else Debug( LDAP_DEBUG_TRACE, "read1msg: referral chased, mark request completed, id = %d\n", lr->lr_msgid, 0, 0); +#endif if( refer_cnt > 0) { v3ref = 1; /* Referral successfully chased */ } @@ -490,17 +648,23 @@ try_read1msg( tmpber = *ber; /* struct copy */ if ( v3ref == 1 ) { ; /* V3 search reference or V3 referral sucessfully chased */ - } else - if ( ber_scanf( &tmpber, "{iaa}", &lderr, + } else if ( ber_scanf( &tmpber, "{iaa}", &lderr, &lr->lr_res_matched, &lr->lr_res_error ) != LBER_ERROR ) { if ( lderr != LDAP_SUCCESS ) { /* referrals are in error string */ refer_cnt = ldap_chase_referrals( ld, lr, - &lr->lr_res_error, &hadref ); + &lr->lr_res_error, -1, &hadref ); lr->lr_status = LDAP_REQST_COMPLETED; +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: V2 referral chased," + "mark request completed, id = %d\n", + lr->lr_msgid )); +#else Debug( LDAP_DEBUG_TRACE, "read1msg: V2 referral chased, mark request completed, id = %d\n", lr->lr_msgid, 0, 0); +#endif } /* save errno, message, and matched string */ @@ -513,15 +677,27 @@ try_read1msg( } else { lr->lr_res_errno = LDAP_PARTIAL_RESULTS; } +#ifdef NEW_LOGGING +LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: new result: res_errno: %d, res_error: <%s>, res_matched: <%s>\n", + lr->lr_res_errno, lr->lr_res_error ? lr->lr_res_error : "", + lr->lr_res_matched ? lr->lr_res_matched : "" )); +#else Debug( LDAP_DEBUG_TRACE, "new result: res_errno: %d, res_error: <%s>, res_matched: <%s>\n", lr->lr_res_errno, lr->lr_res_error ? lr->lr_res_error : "", lr->lr_res_matched ? lr->lr_res_matched : "" ); +#endif } } +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: %d new referrals\n", refer_cnt )); +#else Debug( LDAP_DEBUG_TRACE, "read1msg: %d new referrals\n", refer_cnt, 0, 0 ); +#endif if ( refer_cnt != 0 ) { /* chasing referrals */ ber_free( ber, 1 ); @@ -541,8 +717,13 @@ Debug( LDAP_DEBUG_TRACE, } lr->lr_status = LDAP_REQST_COMPLETED; /* declare this request done */ +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: mark request completed, id = %d\n", lr->lr_msgid )); +#else Debug( LDAP_DEBUG_TRACE, "read1msg: mark request completed, id = %d\n", lr->lr_msgid, 0, 0); +#endif while ( lr->lr_parent != NULL ) { merge_error_info( ld, lr->lr_parent, lr ); @@ -553,9 +734,12 @@ Debug( LDAP_DEBUG_TRACE, } /* Check if all requests are finished, lr is now parent */ - for(tmplr=lr ; tmplr != NULL; tmplr=tmplr->lr_refnext) { + tmplr = lr; + if (tmplr->lr_status == LDAP_REQST_COMPLETED) { + for(tmplr=lr->lr_child; tmplr != NULL; tmplr=tmplr->lr_refnext) { if( tmplr->lr_status != LDAP_REQST_COMPLETED) { break; + } } } @@ -563,12 +747,21 @@ Debug( LDAP_DEBUG_TRACE, if ( lr->lr_outrefcnt <= 0 && lr->lr_parent == NULL && tmplr == NULL ) { id = lr->lr_msgid; tag = lr->lr_res_msgtype; +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: request %ld done\n", (long) id )); + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: res_errno: %d,res_error: <%s>, res_matched: <%s>\n", + lr->lr_res_errno, lr->lr_res_error ? lr->lr_res_error : "", + lr->lr_res_matched ? lr->lr_res_matched : "" )); +#else Debug( LDAP_DEBUG_ANY, "request %ld done\n", (long) id, 0, 0 ); Debug( LDAP_DEBUG_TRACE, "res_errno: %d, res_error: <%s>, res_matched: <%s>\n", lr->lr_res_errno, lr->lr_res_error ? lr->lr_res_error : "", lr->lr_res_matched ? lr->lr_res_matched : "" ); +#endif if ( !simple_request ) { ber_free( ber, 1 ); ber = NULL; @@ -647,8 +840,14 @@ lr->lr_res_matched ? lr->lr_res_matched : "" ); return( -2 ); /* continue looking */ } +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: adding response id %ld type %ld\n", + (long) new->lm_msgid, (long) new->lm_msgtype )); +#else Debug( LDAP_DEBUG_TRACE, "adding response id %ld type %ld:\n", (long) new->lm_msgid, (long) new->lm_msgtype, 0 ); +#endif /* part of a search response - add to end of list of entries */ for ( tmp = l; (tmp->lm_chain != NULL) && @@ -767,12 +966,21 @@ merge_error_info( LDAP *ld, LDAPRequest *parentr, LDAPRequest *lr ) } } +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_DETAIL1, + "read1msg: merged parent (id %d) error info: result errno %d, " + "error <%s>, matched <%s>\n", parentr->lr_msgid, + parentr->lr_res_errno, parentr->lr_res_error ? + parentr->lr_res_error : "", parentr->lr_res_matched ? + parentr->lr_res_matched : "" )); +#else Debug( LDAP_DEBUG_TRACE, "merged parent (id %d) error info: ", parentr->lr_msgid, 0, 0 ); Debug( LDAP_DEBUG_TRACE, "result errno %d, error <%s>, matched <%s>\n", parentr->lr_res_errno, parentr->lr_res_error ? parentr->lr_res_error : "", parentr->lr_res_matched ? parentr->lr_res_matched : "" ); +#endif } @@ -818,9 +1026,11 @@ ldap_msgfree( LDAPMessage *lm ) LDAPMessage *next; int type = 0; - assert( lm != NULL ); - +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_ENTRY, "ldap_msgfree\n" )); +#else Debug( LDAP_DEBUG_TRACE, "ldap_msgfree\n", 0, 0, 0 ); +#endif for ( ; lm != NULL; lm = next ) { next = lm->lm_chain; @@ -844,7 +1054,11 @@ ldap_msgdelete( LDAP *ld, int msgid ) assert( ld != NULL ); +#ifdef NEW_LOGGING + LDAP_LOG (( "result", LDAP_LEVEL_ENTRY, "ldap_msgdelete\n" )); +#else Debug( LDAP_DEBUG_TRACE, "ldap_msgdelete\n", 0, 0, 0 ); +#endif prev = NULL; for ( lm = ld->ld_responses; lm != NULL; lm = lm->lm_next ) { @@ -908,42 +1122,3 @@ ldap_mark_abandoned( LDAP *ld, ber_int_t msgid ) return( 0 ); } - - -#ifdef LDAP_CONNECTIONLESS -int -cldap_getmsg( LDAP *ld, struct timeval *timeout, BerElement *ber ) -{ - int rc; - ber_tag_t tag; - ber_len_t len; - ber_socket_t sd; - - ber_sockbuf_ctrl( ld->ld_sb, LBER_SB_OPT_GET_FD, &sd ); - if ( sd != AC_SOCKET_INVALID ) { - /* restored from ldap_select1() in result.c version 1.24 */ - fd_set readfds; - if ( ldap_int_tblsize == 0 ) - ldap_int_ip_init(); - FD_ZERO( &readfds ); - FD_SET( sd, &readfds ); - rc = select( ldap_int_tblsize, &readfds, 0, 0, timeout ); - - if ( rc == -1 || rc == 0 ) { - ld->ld_errno = (rc == -1 ? LDAP_SERVER_DOWN : - LDAP_TIMEOUT); - return( rc ); - } - } - - /* get the next message */ - if ( (tag = ber_get_next( ld->ld_sb, &len, ber )) - != LDAP_TAG_MESSAGE ) { - ld->ld_errno = (tag == LBER_DEFAULT ? LDAP_SERVER_DOWN : - LDAP_LOCAL_ERROR); - return( -1 ); - } - - return( 0 ); -} -#endif /* LDAP_CONNECTIONLESS */