X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Frequest.c;h=82be383618644c4d185c0b019b555b9530e0961b;hb=e1b73eda9373ea3bddd532727a2987363dc3c108;hp=bb6c9df78dc71ceefec03e8f60cf6d531dfd9344;hpb=2e0912622bca412c0a1b1a3fdba30f65bf222ade;p=openldap diff --git a/libraries/libldap/request.c b/libraries/libldap/request.c index bb6c9df78d..82be383618 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 */ } @@ -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... @@ -277,7 +236,7 @@ ldap_new_connection( LDAP *ld, LDAPURLDesc *srvlist, int use_ldsb, { LDAPConn *lc; LDAPURLDesc *srv; - Sockbuf *sb; + Sockbuf *sb = NULL; Debug( LDAP_DEBUG_TRACE, "ldap_new_connection\n", 0, 0, 0 ); /* @@ -297,9 +256,7 @@ ldap_new_connection( LDAP *ld, LDAPURLDesc *srvlist, int use_ldsb, if ( connect ) { for ( srv = srvlist; srv != NULL; srv = srv->lud_next ) { - if ( open_ldap_connection( ld, lc->lconn_sb, - srv, &lc->lconn_krbinstance, 0 ) != -1 ) - { + if ( ldap_int_open_connection( ld, lc, srv, 0 ) != -1 ) { break; } } @@ -437,6 +394,8 @@ ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind ) ber_free( lc->lconn_ber, 1 ); } + ldap_int_sasl_close( ld, lc ); + prevlc = NULL; for ( tmplc = ld->ld_conns; tmplc != NULL; tmplc = tmplc->lconn_next ) { @@ -451,16 +410,18 @@ ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind ) prevlc = tmplc; } ldap_free_urllist( lc->lconn_server ); +#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND if ( lc->lconn_krbinstance != NULL ) { LDAP_FREE( lc->lconn_krbinstance ); } +#endif 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); } @@ -619,7 +580,7 @@ ldap_free_request( LDAP *ld, LDAPRequest *lr ) * * Return value - number of referrals followed */ -LIBLDAP_F(int) +int ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, char **errstrp, int *hadrefp ) { char *unfollowed; @@ -764,7 +725,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; @@ -788,7 +749,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 ); @@ -810,9 +771,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; @@ -861,9 +819,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'; @@ -874,21 +829,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 ); @@ -915,9 +862,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 ); @@ -925,6 +869,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 ); @@ -936,13 +887,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, @@ -1066,7 +1012,7 @@ re_encode_request( LDAP *ld, BerElement *origber, ber_int_t msgid, char **dnp, i if ( tag == LDAP_REQ_BIND ) { rc = ber_printf( ber, "{it{is" /*}}*/, msgid, tag, ver, *dnp ); } else if ( tag == LDAP_REQ_DELETE ) { - rc = ber_printf( ber, "{its}", msgid, tag, *dnp ); + rc = ber_printf( ber, "{itsN}", msgid, tag, *dnp ); } else { rc = ber_printf( ber, "{it{s" /*}}*/, msgid, tag, *dnp ); } @@ -1080,7 +1026,7 @@ re_encode_request( LDAP *ld, BerElement *origber, ber_int_t msgid, char **dnp, i if ( tag != LDAP_REQ_DELETE && ( ber_write(ber, tmpber.ber_ptr, ( tmpber.ber_end - tmpber.ber_ptr ), 0) != ( tmpber.ber_end - tmpber.ber_ptr ) || - ber_printf( ber, /*{{*/ "}}" ) == -1 ) ) + ber_printf( ber, /*{{*/ "N}N}" ) == -1 ) ) { ld->ld_errno = LDAP_ENCODING_ERROR; ber_free( ber, 1 ); @@ -1118,47 +1064,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 */