Diff for /libraries/libldap/result.c between versions 1.84.2.8 and 1.85

version 1.84.2.8, 2004/10/09 04:26:10 version 1.85, 2003/05/31 03:01:50
Line 1 Line 1
 /* result.c - wait for an ldap result */  /* $OpenLDAP: pkg/ldap/libraries/libldap/result.c,v 1.84 2003/02/28 12:41:53 hyc Exp $ */
 /* $OpenLDAP: pkg/ldap/libraries/libldap/result.c,v 1.84.2.7 2004/10/09 01:20:05 kurt Exp $ */  /*
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.   * Copyright 1998-2003 The OpenLDAP Foundation, All Rights Reserved.
  *   * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  * Copyright 1998-2004 The OpenLDAP Foundation.  
  * All rights reserved.  
  *  
  * Redistribution and use in source and binary forms, with or without  
  * modification, are permitted only as authorized by the OpenLDAP  
  * Public License.  
  *  
  * A copy of this license is available in the file LICENSE in the  
  * top-level directory of the distribution or, alternatively, at  
  * <http://www.OpenLDAP.org/license.html>.  
  */   */
 /* Portions Copyright (c) 1990 Regents of the University of Michigan.  /*  Portions
  * All rights reserved.   *  Copyright (c) 1990 Regents of the University of Michigan.
    *  All rights reserved.
  */   */
 /* This notice applies to changes, created by or for Novell, Inc.,  /*---
    * This notice applies to changes, created by or for Novell, Inc.,
  * to preexisting works for which notices appear elsewhere in this file.   * to preexisting works for which notices appear elsewhere in this file.
  *   *
  * Copyright (C) 1999, 2000 Novell, Inc. All Rights Reserved.   * Copyright (C) 1999, 2000 Novell, Inc. All Rights Reserved.
Line 32 Line 24
  *---   *---
  * Modification to OpenLDAP source by Novell, Inc.   * Modification to OpenLDAP source by Novell, Inc.
  * April 2000 sfs Add code to process V3 referrals and search results   * April 2000 sfs Add code to process V3 referrals and search results
  *---   *
  * Note: A verbatim copy of version 2.0.1 of the OpenLDAP Public License    *  result.c - wait for an ldap result
    */
   /* Note: A verbatim copy of version 2.0.1 of the OpenLDAP Public License 
  * can be found in the file "build/LICENSE-2.0.1" in this distribution   * can be found in the file "build/LICENSE-2.0.1" in this distribution
  * of OpenLDAP Software.   * of OpenLDAP Software.
  */   */
 /* Portions Copyright (C) The Internet Society (1997)  
  * ASN.1 fragments are from RFC 2251; see RFC for full legal notices.  
  */  
   
 /*  /*
  * LDAPv3 (RFC2251)   * LDAPv3 (RFC2251)
Line 73  static int ldap_mark_abandoned LDAP_P(( Line 64  static int ldap_mark_abandoned LDAP_P((
 static int wait4msg LDAP_P(( LDAP *ld, ber_int_t msgid, int all, struct timeval *timeout,  static int wait4msg LDAP_P(( LDAP *ld, ber_int_t msgid, int all, struct timeval *timeout,
         LDAPMessage **result ));          LDAPMessage **result ));
 static ber_tag_t try_read1msg LDAP_P(( LDAP *ld, ber_int_t msgid,  static ber_tag_t try_read1msg LDAP_P(( LDAP *ld, ber_int_t msgid,
         int all, Sockbuf *sb, LDAPConn **lc, LDAPMessage **result ));          int all, Sockbuf *sb, LDAPConn *lc, LDAPMessage **result ));
 static ber_tag_t build_result_ber LDAP_P(( LDAP *ld, BerElement **bp, LDAPRequest *lr ));  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 void merge_error_info LDAP_P(( LDAP *ld, LDAPRequest *parentr, LDAPRequest *lr ));
 static LDAPMessage * chkResponseList LDAP_P(( LDAP *ld, int msgid, int all));  static LDAPMessage * chkResponseList LDAP_P(( LDAP *ld, int msgid, int all));
Line 314  wait4msg( Line 305  wait4msg(
         if( (*result = chkResponseList(ld, msgid, all)) != NULL ) {          if( (*result = chkResponseList(ld, msgid, all)) != NULL ) {
             rc = (*result)->lm_msgtype;              rc = (*result)->lm_msgtype;
         } else {          } else {
                         int lc_ready = 0;  
   
                         for ( lc = ld->ld_conns; lc != NULL; lc = nextlc ) {                          for ( lc = ld->ld_conns; lc != NULL; lc = lc->lconn_next ) {
                                 nextlc = lc->lconn_next;  
                                 if ( ber_sockbuf_ctrl( lc->lconn_sb,                                  if ( ber_sockbuf_ctrl( lc->lconn_sb,
                                                 LBER_SB_OPT_DATA_READY, NULL ) ) {                                                  LBER_SB_OPT_DATA_READY, NULL ) ) {
                                         rc = try_read1msg( ld, msgid, all, lc->lconn_sb,                                              rc = try_read1msg( ld, msgid, all, lc->lconn_sb,
                                                 &lc, result );                                                  lc, result );
                                         lc_ready = 1;  
                                     break;                                      break;
                                 }                                  }
                 }                  }
   
                     if ( !lc_ready ) {                      if ( lc == NULL ) {
                             rc = ldap_int_select( ld, tvp );                              rc = ldap_int_select( ld, tvp );
 #ifdef LDAP_DEBUG  #ifdef LDAP_DEBUG
                             if ( rc == -1 ) {                              if ( rc == -1 ) {
Line 349  wait4msg( Line 337  wait4msg(
                             {                              {
                                     ld->ld_errno = (rc == -1 ? LDAP_SERVER_DOWN :                                      ld->ld_errno = (rc == -1 ? LDAP_SERVER_DOWN :
                                         LDAP_TIMEOUT);                                          LDAP_TIMEOUT);
                                     return rc;                                      return( rc );
                             }                              }
   
                             if ( rc == -1 ) {                              if ( rc == -1 ) {
Line 376  wait4msg( Line 364  wait4msg(
                                                 ldap_is_read_ready( ld,                                                  ldap_is_read_ready( ld,
                                                 lc->lconn_sb )) {                                                  lc->lconn_sb )) {
                                                     rc = try_read1msg( ld, msgid, all,                                                      rc = try_read1msg( ld, msgid, all,
                                                         lc->lconn_sb, &lc, result );                                                          lc->lconn_sb, lc, result );
                                                         if ( lc == NULL ) lc = nextlc;  
                                             }                                              }
                                     }                                      }
                             }                              }
Line 413  try_read1msg( Line 400  try_read1msg(
         ber_int_t msgid,          ber_int_t msgid,
         int all,          int all,
         Sockbuf *sb,          Sockbuf *sb,
         LDAPConn **lcp,          LDAPConn *lc,
         LDAPMessage **result )          LDAPMessage **result )
 {  {
         BerElement      *ber;          BerElement      *ber;
Line 423  try_read1msg( Line 410  try_read1msg(
         ber_len_t       len;          ber_len_t       len;
         int             foundit = 0;          int             foundit = 0;
         LDAPRequest     *lr, *tmplr;          LDAPRequest     *lr, *tmplr;
         LDAPConn        *lc;  
         BerElement      tmpber;          BerElement      tmpber;
         int             rc, refer_cnt, hadref, simple_request;          int             rc, refer_cnt, hadref, simple_request;
         ber_int_t       lderr;          ber_int_t       lderr;
Line 437  try_read1msg( Line 423  try_read1msg(
         int     v3ref;          int     v3ref;
   
         assert( ld != NULL );          assert( ld != NULL );
         assert( lcp != NULL );          assert( lc != NULL );
         assert( *lcp != NULL );  
                   
 #ifdef NEW_LOGGING  #ifdef NEW_LOGGING
         LDAP_LOG ( OPERATION, ARGS, "read1msg: msgid %d, all %d\n", msgid, all, 0 );          LDAP_LOG ( OPERATION, ARGS, "read1msg: msgid %d, all %d\n", msgid, all, 0 );
Line 446  try_read1msg( Line 431  try_read1msg(
         Debug( LDAP_DEBUG_TRACE, "read1msg: msgid %d, all %d\n", msgid, all, 0 );          Debug( LDAP_DEBUG_TRACE, "read1msg: msgid %d, all %d\n", msgid, all, 0 );
 #endif  #endif
   
         lc = *lcp;  
   
 retry:  retry:
         if ( lc->lconn_ber == NULL ) {          if ( lc->lconn_ber == NULL ) {
                 lc->lconn_ber = ldap_alloc_ber_with_options(ld);                  lc->lconn_ber = ldap_alloc_ber_with_options(ld);
Line 677  nextresp2: Line 660  nextresp2:
          * go through the following code.  This code also chases V2 referrals           * go through the following code.  This code also chases V2 referrals
          * and checks if all referrals have been chased.           * and checks if all referrals have been chased.
          */           */
         if ( (tag != LDAP_RES_SEARCH_ENTRY) && (v3ref > -1) &&          if ( (tag != LDAP_RES_SEARCH_ENTRY) && (v3ref > -1)
                 (tag != LDAP_RES_INTERMEDIATE ))  #ifdef LDAP_RES_INTERMEDIATE_RESP
         {                  && (tag != LDAP_RES_INTERMEDIATE_RESP )
   #endif
           ) {
                 /* For a v3 search referral/reference, only come here if already chased it */                  /* For a v3 search referral/reference, only come here if already chased it */
                 if ( ld->ld_version >= LDAP_VERSION2 &&                  if ( ld->ld_version >= LDAP_VERSION2 &&
                         ( lr->lr_parent != NULL ||                          ( lr->lr_parent != NULL ||
Line 823  lr->lr_res_matched ? lr->lr_res_matched Line 808  lr->lr_res_matched ? lr->lr_res_matched
   
                         if ( lc != NULL ) {                          if ( lc != NULL ) {
                                 ldap_free_connection( ld, lc, 0, 1 );                                  ldap_free_connection( ld, lc, 0, 1 );
                                 *lcp = NULL;  
                         }                          }
                 }                  }
         }          }

Removed from v.1.84.2.8  
changed lines
  Added in v.1.85


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org