X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Frequest.c;h=cb645b18a7dc9a3ab4529ace7461a31e74ac09df;hb=8da110a9e726dbc612b302feafe0109271e6bc59;hp=87d6c84bfac115832d66c01372a85cbf99bb7e60;hpb=81d2747247eebd40b08692426ef5a85d8c5b670d;p=openldap diff --git a/libraries/libldap/request.c b/libraries/libldap/request.c index 87d6c84bfa..cb645b18a7 100644 --- a/libraries/libldap/request.c +++ b/libraries/libldap/request.c @@ -45,9 +45,6 @@ static LDAPConn *find_connection LDAP_P(( LDAP *ld, LDAPURLDesc *srv, int any )); static void use_connection LDAP_P(( LDAP *ld, LDAPConn *lc )); -#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS -static LDAPURLDesc *dn2servers LDAP_P(( LDAP *ld, const char *dn )); -#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */ static BerElement *re_encode_request LDAP_P(( LDAP *ld, @@ -64,10 +61,6 @@ ldap_alloc_ber_with_options( LDAP *ld ) if (( ber = ber_alloc_t( ld->ld_lberoptions )) == NULL ) { ld->ld_errno = LDAP_NO_MEMORY; -#ifdef STR_TRANSLATION - } else { - ldap_set_ber_options( ld, ber ); -#endif /* STR_TRANSLATION */ } return( ber ); @@ -78,13 +71,6 @@ void ldap_set_ber_options( LDAP *ld, BerElement *ber ) { ber->ber_options = ld->ld_lberoptions; -#ifdef STR_TRANSLATION - if (( ld->ld_lberoptions & LBER_TRANSLATE_STRINGS ) != 0 ) { - ber_set_string_translators( ber, - ld->ld_lber_encode_translate_proc, - ld->ld_lber_decode_translate_proc ); - } -#endif /* STR_TRANSLATION */ } @@ -100,7 +86,7 @@ ldap_send_initial_request( Debug( LDAP_DEBUG_TRACE, "ldap_send_initial_request\n", 0, 0, 0 ); - if ( ! ber_pvt_sb_in_use(&ld->ld_sb ) ) { + if ( ber_sockbuf_ctrl( ld->ld_sb, LBER_SB_OPT_GET_FD, NULL ) == -1 ) { /* not connected yet */ int rc = ldap_open_defconn( ld ); @@ -114,33 +100,6 @@ ldap_send_initial_request( ( ld->ld_host == NULL ) ? "(null)" : ld->ld_host, 0, 0 ); } -#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS - if ( LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_DNS ) - && ldap_is_dns_dn( dn ) ) - { - if (( servers = dn2servers( ld, dn )) == NULL ) { - ber_free( ber, 1 ); - return( -1 ); - } - -#ifdef LDAP_DEBUG - if ( ldap_debug & LDAP_DEBUG_TRACE ) { - LDAPURLDesc *srv; - - for ( srv = servers; - srv != NULL; - srv = srv->lud_next ) - { - fprintf( stderr, - "LDAP server %s: dn %s, port %d\n", - srv->lud_host, ( srv->lud_dn == NULL ) ? - "(default)" : srv->lud_dn, - srv->lud_port ); - } - } -#endif /* LDAP_DEBUG */ - } else -#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */ { /* * use of DNS is turned off or this is an X.500 DN... @@ -293,7 +252,7 @@ ldap_new_connection( LDAP *ld, LDAPURLDesc *srvlist, int use_ldsb, return( NULL ); } - lc->lconn_sb = ( use_ldsb ) ? &ld->ld_sb : sb; + lc->lconn_sb = ( use_ldsb ) ? ld->ld_sb : sb; if ( connect ) { for ( srv = srvlist; srv != NULL; srv = srv->lud_next ) { @@ -433,10 +392,6 @@ ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind ) } } - /* force closure */ - ldap_close_connection( lc->lconn_sb ); - ber_pvt_sb_destroy( lc->lconn_sb ); - if( lc->lconn_ber != NULL ) { ber_free( lc->lconn_ber, 1 ); } @@ -458,13 +413,13 @@ ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind ) if ( lc->lconn_krbinstance != NULL ) { LDAP_FREE( lc->lconn_krbinstance ); } - if ( lc->lconn_sb != &ld->ld_sb ) { + if ( lc->lconn_sb != ld->ld_sb ) { ber_sockbuf_free( lc->lconn_sb ); } if( lc->lconn_rebind_queue != NULL) { int i; for( i = 0; lc->lconn_rebind_queue[i] != NULL; i++) { - free_strarray(lc->lconn_rebind_queue[i]); + LDAP_VFREE(lc->lconn_rebind_queue[i]); } LDAP_FREE( lc->lconn_rebind_queue); } @@ -493,7 +448,7 @@ ldap_dump_connection( LDAP *ld, LDAPConn *lconns, int all ) ( lc->lconn_server->lud_host == NULL ) ? "(null)" : lc->lconn_server->lud_host, lc->lconn_server->lud_port, ( lc->lconn_sb == - &ld->ld_sb ) ? " (default)" : "" ); + ld->ld_sb ) ? " (default)" : "" ); } fprintf( stderr, " refcnt: %d status: %s\n", lc->lconn_refcnt, ( lc->lconn_status == LDAP_CONNST_NEEDSOCKET ) ? @@ -768,7 +723,7 @@ ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, char **errstrp, if( lc->lconn_rebind_queue != NULL) { /* Release resources of previous list */ - free_strarray(refarray); + LDAP_VFREE(refarray); refarray = NULL; ldap_free_urllist(srv); srv = NULL; @@ -792,7 +747,7 @@ ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, char **errstrp, } } /* end for loop */ done: - free_strarray(refarray); + LDAP_VFREE(refarray); ldap_free_urllist(srv); LDAP_FREE( *errstrp ); @@ -814,9 +769,6 @@ int ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp ) { int rc, count, len, newdn; -#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS - int ldapref; -#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */ char *p, *ports, *ref, *tmpref, *refdn, *unfollowed; LDAPRequest *origreq; LDAPURLDesc *srv; @@ -865,9 +817,6 @@ ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp ) /* parse out & follow referrals */ for ( ref = p; rc == 0 && ref != NULL; ref = p ) { -#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS - ldapref = 0; -#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */ if (( p = strchr( ref, '\n' )) != NULL ) { *p++ = '\0'; @@ -878,21 +827,13 @@ ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp ) ldap_pvt_hex_unescape( ref ); len = strlen( ref ); + /* FIXME: we should use the URL Parser */ + if ( len > LDAP_LDAP_REF_STR_LEN && strncasecmp( ref, LDAP_LDAP_REF_STR, LDAP_LDAP_REF_STR_LEN ) == 0 ) { Debug( LDAP_DEBUG_TRACE, "chasing LDAP referral: <%s>\n", ref, 0, 0 ); -#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS - ldapref = 1; -#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */ tmpref = ref + LDAP_LDAP_REF_STR_LEN; -#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS - } else if ( len > LDAP_DX_REF_STR_LEN && strncasecmp( ref, - LDAP_DX_REF_STR, LDAP_DX_REF_STR_LEN ) == 0 ) { - Debug( LDAP_DEBUG_TRACE, - "chasing DX referral: <%s>\n", ref, 0, 0 ); - tmpref = ref + LDAP_DX_REF_STR_LEN; -#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */ } else { Debug( LDAP_DEBUG_TRACE, "ignoring unknown referral <%s>\n", ref, 0, 0 ); @@ -919,9 +860,6 @@ ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp ) return( -1 ); } -#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS - if ( ldapref ) { -#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */ if (( srv = (LDAPURLDesc *)LDAP_CALLOC( 1, sizeof( LDAPURLDesc ))) == NULL ) { ber_free( ber, 1 ); @@ -929,6 +867,13 @@ ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp ) return( -1 ); } + if (( srv->lud_scheme = LDAP_STRDUP("ldap")) == NULL ) { + LDAP_FREE( (char *)srv ); + ber_free( ber, 1 ); + ld->ld_errno = LDAP_NO_MEMORY; + return( -1 ); + } + if (( srv->lud_host = LDAP_STRDUP( tmpref )) == NULL ) { LDAP_FREE( (char *)srv ); ber_free( ber, 1 ); @@ -940,13 +885,8 @@ ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp ) *ports++ = '\0'; srv->lud_port = atoi( ports ); } else { - srv->lud_port = ldap_int_global_options.ldo_defport; + srv->lud_port = (LDAP_INT_GLOBAL_OPT())->ldo_defport; } -#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS - } else { - srv = dn2servers( ld, tmpref ); - } -#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */ rinfo.ri_msgid = origreq->lr_origid; if ( srv != NULL && ldap_send_server_request( ld, ber, ld->ld_msgid, @@ -1122,47 +1062,3 @@ ldap_find_request_by_msgid( LDAP *ld, ber_int_t msgid ) } -#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS -static LDAPURLDesc * -dn2servers( LDAP *ld, const char *dn ) /* dn can also be a domain.... */ -{ - char *p, *host, *server_dn, **dxs; - const char *domain; - int i, port; - LDAPURLDesc *srvlist, *prevsrv, *srv; - - if (( domain = strrchr( dn, '@' )) != NULL ) { - ++domain; - } else { - domain = dn; - } - - if (( dxs = ldap_getdxbyname( domain )) == NULL ) { - ld->ld_errno = LDAP_NO_MEMORY; - return( NULL ); - } - - srvlist = NULL; - for ( i = 0; dxs[ i ] != NULL; ++i ) { - if (ldap_url_parselist(&srv, dxs[i]) == LDAP_SUCCESS - || ldap_url_parsehosts(&srv, dxs[i]) == LDAP_SUCCESS) - { - /* add to end of list of servers */ - if ( srvlist == NULL ) { - srvlist = srv; - } else { - prevsrv->lud_next = srv; - } - prevsrv = srv; - } - } - - ldap_value_free( dxs ); - - if ( srvlist == NULL ) { - ld->ld_errno = LDAP_SERVER_DOWN; - } - - return( srvlist ); -} -#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */