Lines Matching refs:ld

44 static int check_response_queue( LDAP *ld, int msgid, int all,
46 static int ldap_abandoned( LDAP *ld, int msgid );
47 static int ldap_mark_abandoned( LDAP *ld, int msgid );
48 static int wait4msg( LDAP *ld, int msgid, int all, int unlock_permitted,
50 static int read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb, LDAPConn *lc,
52 static void check_for_refs( LDAP *ld, LDAPRequest *lr, BerElement *ber,
54 static int build_result_ber( LDAP *ld, BerElement **berp, LDAPRequest *lr );
55 static void merge_error_info( LDAP *ld, LDAPRequest *parentr, LDAPRequest *lr );
57 static int cldap_select1( LDAP *ld, struct timeval *timeout );
59 static void link_pend( LDAP *ld, LDAPPend *lp );
61 static void unlink_pend( LDAP *ld, LDAPPend *lp );
62 static int unlink_msg( LDAP *ld, int msgid, int all );
82 LDAP *ld, in ldap_result() argument
93 if ( !NSLDAPI_VALID_LDAP_POINTER( ld )) { in ldap_result()
97 LDAP_MUTEX_LOCK( ld, LDAP_RESULT_LOCK ); in ldap_result()
99 rc = nsldapi_result_nolock(ld, msgid, all, 1, timeout, result); in ldap_result()
101 LDAP_MUTEX_UNLOCK( ld, LDAP_RESULT_LOCK ); in ldap_result()
108 nsldapi_result_nolock( LDAP *ld, int msgid, int all, int unlock_permitted, in nsldapi_result_nolock() argument
124 LDAP_SET_LDERRNO( ld, LDAP_PARAM_ERROR, NULL, NULL ); in nsldapi_result_nolock()
128 if ( check_response_queue( ld, msgid, all, 1, result ) != 0 ) { in nsldapi_result_nolock()
129 LDAP_SET_LDERRNO( ld, LDAP_SUCCESS, NULL, NULL ); in nsldapi_result_nolock()
132 rc = wait4msg( ld, msgid, all, unlock_permitted, timeout, in nsldapi_result_nolock()
139 if ( ld->ld_memcache != NULL && NSLDAPI_SEARCH_RELATED_RESULT( rc ) && in nsldapi_result_nolock()
141 ldap_memcache_append( ld, (*result)->lm_msgid, in nsldapi_result_nolock()
160 check_response_queue( LDAP *ld, int msgid, int all, int do_abandon_check, in check_response_queue() argument
171 LDAP_MUTEX_LOCK( ld, LDAP_RESP_LOCK ); in check_response_queue()
172 for ( lm = ld->ld_responses; lm != NULL; lm = nextlm ) { in check_response_queue()
175 if ( do_abandon_check && ldap_abandoned( ld, lm->lm_msgid ) ) { in check_response_queue()
176 ldap_mark_abandoned( ld, lm->lm_msgid ); in check_response_queue()
179 ld->ld_responses = lm->lm_next; in check_response_queue()
204 LDAP_MUTEX_UNLOCK( ld, LDAP_RESP_LOCK ); in check_response_queue()
221 || (( lr = nsldapi_find_request_by_msgid( ld, lm->lm_msgid )) in check_response_queue()
223 LDAP_MUTEX_UNLOCK( ld, LDAP_RESP_LOCK ); in check_response_queue()
233 ld->ld_responses = lm->lm_next; in check_response_queue()
239 ld->ld_responses = lm->lm_chain; in check_response_queue()
240 ld->ld_responses->lm_next = lm->lm_next; in check_response_queue()
248 ld->ld_responses = lm->lm_next; in check_response_queue()
258 LDAP_MUTEX_UNLOCK( ld, LDAP_RESP_LOCK ); in check_response_queue()
269 wait4msg( LDAP *ld, int msgid, int all, int unlock_permitted, argument
293 if ( ld->ld_cache_on && ld->ld_cache_result != NULL ) {
295 LDAP_MUTEX_LOCK( ld, LDAP_CACHE_LOCK );
296 rc = (ld->ld_cache_result)( ld, msgid, all, timeout, result );
297 LDAP_MUTEX_UNLOCK( ld, LDAP_CACHE_LOCK );
302 if ( ld->ld_cache_strategy == LDAP_CACHE_LOCALDB ) {
303 LDAP_SET_LDERRNO( ld, LDAP_TIMEOUT, NULL, NULL );
313 LDAP_MUTEX_LOCK( ld, LDAP_REQ_LOCK );
314 if (( lr = nsldapi_find_request_by_msgid( ld, msgid ))
316 LDAP_MUTEX_UNLOCK( ld, LDAP_REQ_LOCK );
317 LDAP_SET_LDERRNO( ld, LDAP_PARAM_ERROR, NULL,
324 nsldapi_free_request( ld, lr, 1 );
325 LDAP_MUTEX_UNLOCK( ld, LDAP_REQ_LOCK );
326 LDAP_SET_LDERRNO( ld, LDAP_SERVER_DOWN, NULL, NULL );
329 LDAP_MUTEX_UNLOCK( ld, LDAP_REQ_LOCK );
350 nsldapi_dump_connection( ld, ld->ld_conns, 1 );
351 nsldapi_dump_requests_and_responses( ld );
354 LDAP_MUTEX_LOCK( ld, LDAP_CONN_LOCK );
355 LDAP_MUTEX_LOCK( ld, LDAP_REQ_LOCK );
356 for ( lc = ld->ld_conns; lc != NULL; lc = lc->lconn_next ) {
359 rc = read1msg( ld, msgid, all, lc->lconn_sb,
364 LDAP_MUTEX_UNLOCK( ld, LDAP_REQ_LOCK );
365 LDAP_MUTEX_UNLOCK( ld, LDAP_CONN_LOCK );
368 rc = nsldapi_iostatus_poll( ld, tvp );
374 LDAP_GET_ERRNO( ld ), 0, 0 );
379 if ( rc == 0 || ( rc == -1 && (( ld->ld_options &
381 LDAP_GET_ERRNO( ld ) != EINTR ))) {
385 LDAP_SET_LDERRNO( ld, (rc == -1 ?
389 LDAP_MUTEX_LOCK( ld, LDAP_REQ_LOCK );
390 nsldapi_connection_lost_nolock( ld,
392 LDAP_MUTEX_UNLOCK( ld, LDAP_REQ_LOCK );
401 LDAP_MUTEX_LOCK( ld, LDAP_CONN_LOCK );
402 LDAP_MUTEX_LOCK( ld, LDAP_REQ_LOCK );
403 for ( lc = ld->ld_conns; rc == -2 && lc != NULL;
408 nsldapi_iostatus_is_read_ready( ld,
410 rc = read1msg( ld, msgid, all,
413 else if (ld->ld_options & LDAP_BITOPT_ASYNC) {
416 && nsldapi_iostatus_is_write_ready( ld,
418 rc = nsldapi_ber_flush( ld, lc->lconn_sb, lr->lr_ber, 0, 1 );
425 nsldapi_iostatus_interest_read( ld, lc->lconn_sb );
428 LDAP_SET_LDERRNO( ld, LDAP_SERVER_DOWN, NULL, NULL );
429 nsldapi_free_request( ld, lr, 0 );
430 nsldapi_free_connection( ld, lc, NULL, NULL,
437 LDAP_MUTEX_UNLOCK( ld, LDAP_REQ_LOCK );
438 LDAP_MUTEX_UNLOCK( ld, LDAP_CONN_LOCK );
451 check_response_queue( ld, msgid, all, 0, result ) != 0 ) {
452 LDAP_SET_LDERRNO( ld, LDAP_SUCCESS, NULL, NULL );
468 LDAP_SET_LDERRNO( ld, LDAP_TIMEOUT, NULL,
491 read1msg( LDAP *ld, int msgid, int all, Sockbuf *sb, LDAPConn *lc,
512 if ( lc->lconn_ber == NULLBER && nsldapi_alloc_ber_with_options( ld,
521 LDAP_SET_ERRNO( ld, 0 );
526 terrno = LDAP_GET_ERRNO( ld );
530 LDAP_SET_LDERRNO( ld, (tag == LBER_DEFAULT ? LDAP_SERVER_DOWN :
533 nsldapi_connection_lost_nolock( ld, sb );
547 LDAP_SET_LDERRNO( ld, LDAP_DECODING_ERROR, NULL, NULL );
552 if ( ldap_abandoned( ld, (int)id ) ) {
559 } else if (( lr = nsldapi_find_request_by_msgid( ld, id )) == NULL ) {
569 LDAP_SET_LDERRNO( ld, LDAP_DECODING_ERROR, NULL, NULL );
587 check_for_refs( ld, lr, ber, lc->lconn_version, &reftotal,
622 if ( LDAP_SUCCESS == nsldapi_parse_result( ld,
646 merge_error_info( ld, lr->lr_parent, lr );
677 if ( build_result_ber( ld, &ber, lr )
685 nsldapi_free_request( ld, lr, 1 );
699 LDAP_SET_LDERRNO( ld, LDAP_NO_MEMORY, NULL, NULL );
712 if ( ld->ld_cache_on ) {
713 nsldapi_add_result_to_cache( ld, new );
728 LDAP_SET_LDERRNO( ld, LDAP_SUCCESS, NULL,
742 LDAP_MUTEX_LOCK( ld, LDAP_RESP_LOCK );
743 for ( l = ld->ld_responses; l != NULL; l = l->lm_next ) {
752 LDAP_MUTEX_UNLOCK( ld, LDAP_RESP_LOCK );
754 LDAP_SET_LDERRNO( ld, LDAP_SUCCESS, NULL, NULL );
758 new->lm_next = ld->ld_responses;
759 ld->ld_responses = new;
763 LDAP_MUTEX_UNLOCK( ld, LDAP_RESP_LOCK );
765 POST( ld, new->lm_msgid, new );
804 ld->ld_responses = new;
834 ld->ld_responses = new;
864 ld->ld_responses = l->lm_chain;
875 ld->ld_responses = l->lm_next;
881 LDAP_MUTEX_UNLOCK( ld, LDAP_RESP_LOCK );
882 LDAP_SET_LDERRNO( ld, LDAP_SUCCESS, NULL, NULL );
885 LDAP_MUTEX_UNLOCK( ld, LDAP_RESP_LOCK );
895 check_for_refs( LDAP *ld, LDAPRequest *lr, BerElement *ber,
906 && ( ld->ld_options & LDAP_BITOPT_REFERRALS ) == 0 )) {
912 err = nsldapi_parse_reference( ld, ber, &v3refs, NULL );
916 err = nsldapi_parse_result( ld, lr->lr_res_msgtype, ber,
927 err = nsldapi_chase_v3_refs( ld, lr, v3refs,
935 err = nsldapi_chase_v2_referrals( ld, lr, &errstr,
982 build_result_ber( LDAP *ld, BerElement **berp, LDAPRequest *lr )
989 if (( err = nsldapi_alloc_ber_with_options( ld, &ber ))
1013 merge_error_info( LDAP *ld, LDAPRequest *parentr, LDAPRequest *lr )
1021 (void)nsldapi_append_referral( ld, &parentr->lr_res_error,
1053 cldap_select1( LDAP *ld, struct timeval *timeout )
1057 NSLDAPIIOStatus *iosp = ld->ld_iostatus;
1078 FD_SET( ld->ld_sbp->sb_sd, &readfds );
1086 pollfds[0].lpoll_fd = ld->ld_sbp->sb_sd;
1087 pollfds[0].lpoll_arg = ld->ld_sbp->sb_arg;
1090 rc = ld->ld_extpoll_fn( pollfds, 1, nsldapi_tv2ms( timeout ),
1091 ld->ld_ext_session_arg );
1105 cldap_select1( LDAP *ld, struct timeval *timeout )
1108 return( tcpselect( ld->ld_sbp->sb_sd, timeout ));
1116 cldap_select1( LDAP *ld, struct timeval *timeout )
1122 FD_SET( ld->ld_sbp->sb_sd, &readfds );
1124 if ( NSLDAPI_IO_TYPE_STANDARD == ld->ldiou_type &&
1125 NULL != ld->ld_select_fn ) {
1126 rc = ld->ld_select_fn( 1, &readfds, 0, 0, timeout );
1127 } else if ( NSLDAPI_IO_TYPE_EXTENDED == ld->ldiou_type &&
1128 NULL != ld->ld_extselect_fn ) {
1129 rc = ld->ld_extselect_fn( ld->ld_ext_session_arg, 1, &readfds, 0,
1166 ldap_msgdelete( LDAP *ld, int msgid )
1173 if ( !NSLDAPI_VALID_LDAP_POINTER( ld )) {
1178 LDAP_MUTEX_LOCK( ld, LDAP_RESP_LOCK );
1179 for ( lm = ld->ld_responses; lm != NULL; lm = lm->lm_next ) {
1187 LDAP_MUTEX_UNLOCK( ld, LDAP_RESP_LOCK );
1192 ld->ld_responses = lm->lm_next;
1195 LDAP_MUTEX_UNLOCK( ld, LDAP_RESP_LOCK );
1211 ldap_abandoned( LDAP *ld, int msgid )
1215 LDAP_MUTEX_LOCK( ld, LDAP_ABANDON_LOCK );
1216 if ( ld->ld_abandoned == NULL )
1218 LDAP_MUTEX_UNLOCK( ld, LDAP_ABANDON_LOCK );
1222 for ( i = 0; ld->ld_abandoned[i] != -1; i++ )
1223 if ( ld->ld_abandoned[i] == msgid )
1225 LDAP_MUTEX_UNLOCK( ld, LDAP_ABANDON_LOCK );
1229 LDAP_MUTEX_UNLOCK( ld, LDAP_ABANDON_LOCK );
1235 ldap_mark_abandoned( LDAP *ld, int msgid )
1239 LDAP_MUTEX_LOCK( ld, LDAP_ABANDON_LOCK );
1240 if ( ld->ld_abandoned == NULL )
1242 LDAP_MUTEX_UNLOCK( ld, LDAP_ABANDON_LOCK );
1246 for ( i = 0; ld->ld_abandoned[i] != -1; i++ )
1247 if ( ld->ld_abandoned[i] == msgid )
1250 if ( ld->ld_abandoned[i] == -1 )
1252 LDAP_MUTEX_UNLOCK( ld, LDAP_ABANDON_LOCK );
1256 for ( ; ld->ld_abandoned[i] != -1; i++ ) {
1257 ld->ld_abandoned[i] = ld->ld_abandoned[i + 1];
1260 LDAP_MUTEX_UNLOCK( ld, LDAP_ABANDON_LOCK );
1267 cldap_getmsg( LDAP *ld, struct timeval *timeout, BerElement **ber )
1273 if ( ld->ld_sbp->sb_ber.ber_ptr >= ld->ld_sbp->sb_ber.ber_end ) {
1274 rc = cldap_select1( ld, timeout );
1276 LDAP_SET_LDERRNO( ld, (rc == -1 ? LDAP_SERVER_DOWN :
1283 if ( (tag = ber_get_next( ld->ld_sbp, &len, ber ))
1285 LDAP_SET_LDERRNO( ld, (tag == LBER_DEFAULT ? LDAP_SERVER_DOWN :
1295 nsldapi_post_result( LDAP *ld, int msgid, LDAPMessage *result )
1301 ld, msgid, result );
1302 LDAP_MUTEX_LOCK( ld, LDAP_PEND_LOCK );
1307 for( lp = ld->ld_pend; lp != NULL; lp = lp->lp_next )
1324 for( lp = ld->ld_pend; lp != NULL; lp = lp->lp_next )
1341 LDAP_MUTEX_UNLOCK( ld, LDAP_PEND_LOCK );
1342 LDAP_SET_LDERRNO( ld, LDAP_NO_MEMORY, NULL,
1348 link_pend( ld, newlp );
1360 LDAP_SEMA_POST( ld, lp );
1363 LDAP_MUTEX_UNLOCK( ld, LDAP_PEND_LOCK );
1368 link_pend( LDAP *ld, LDAPPend *lp )
1370 if (( lp->lp_next = ld->ld_pend ) != NULL )
1374 ld->ld_pend = lp;
1380 unlink_pend( LDAP *ld, LDAPPend *lp )
1383 ld->ld_pend = lp->lp_next;
1394 unlink_msg( LDAP *ld, int msgid, int all )
1400 LDAP_MUTEX_LOCK( ld, LDAP_RESP_LOCK );
1401 for ( lm = ld->ld_responses; lm != NULL; lm = nextlm )
1433 ld->ld_responses = lm->lm_next;
1441 ld->ld_responses = lm->lm_chain;
1442 ld->ld_responses->lm_next = lm->lm_next;
1454 ld->ld_responses = lm->lm_next;
1468 LDAP_MUTEX_UNLOCK( ld, LDAP_RESP_LOCK );