X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fopen.c;h=d8b1aaeb55dcc0ccce14a7bd1650f13eaf1ebf98;hb=7573a81efea63bc0e07d88ba4c9b6973d51d857d;hp=29a9dded377239a73eb2237ea82fd988ab23dac6;hpb=7a586d4e4958d0ae871039301828dddb6587f935;p=openldap diff --git a/libraries/libldap/open.c b/libraries/libldap/open.c index 29a9dded37..d8b1aaeb55 100644 --- a/libraries/libldap/open.c +++ b/libraries/libldap/open.c @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* Portions @@ -13,6 +13,7 @@ #include "portable.h" #include +#include #include @@ -25,7 +26,7 @@ int ldap_open_defconn( LDAP *ld ) { - if (( ld->ld_defconn = ldap_new_connection( ld, ld->ld_options.ldo_defludp, 1,1,0 )) == NULL ) + if (( ld->ld_defconn = ldap_new_connection( ld, ld->ld_options.ldo_defludp, 1,1,NULL )) == NULL ) { ld->ld_errno = LDAP_SERVER_DOWN; return -1; @@ -80,7 +81,7 @@ ldap_create( LDAP **ldp ) *ldp = NULL; if( ldap_int_global_options.ldo_valid != LDAP_INITIALIZED ) { - ldap_int_initialize(); + ldap_int_initialize(NULL); } Debug( LDAP_DEBUG_TRACE, "ldap_init\n", 0, 0, 0 ); @@ -154,14 +155,13 @@ ldap_create( LDAP **ldp ) ld->ld_lberoptions = LBER_USE_DER; -#if defined( STR_TRANSLATION ) && defined( LDAP_DEFAULT_CHARSET ) - ld->ld_lberoptions |= LBER_TRANSLATE_STRINGS; -#if LDAP_CHARSET_8859 == LDAP_DEFAULT_CHARSET - ldap_set_string_translators( ld, ldap_8859_to_t61, ldap_t61_to_8859 ); -#endif /* LDAP_CHARSET_8859 == LDAP_DEFAULT_CHARSET */ -#endif /* STR_TRANSLATION && LDAP_DEFAULT_CHARSET */ - - ber_pvt_sb_init( &(ld->ld_sb) ); + ld->ld_sb = ber_sockbuf_alloc( ); + if ( ld->ld_sb == NULL ) { + ldap_free_urllist( ld->ld_options.ldo_defludp ); + LDAP_FREE( (char*) ld ); + WSACleanup( ); + return LDAP_NO_MEMORY; + } *ldp = ld; return LDAP_SUCCESS; @@ -268,9 +268,6 @@ open_ldap_connection( LDAP *ld, Sockbuf *sb, LDAPURLDesc *srv, { int rc = -1; int port; -#ifdef HAVE_TLS - int tls; -#endif long addr; Debug( LDAP_DEBUG_TRACE, "open_ldap_connection\n", 0, 0, 0 ); @@ -286,29 +283,45 @@ open_ldap_connection( LDAP *ld, Sockbuf *sb, LDAPURLDesc *srv, switch ( srv->lud_protocol ) { case LDAP_PROTO_TCP: + rc = ldap_connect_to_host( ld, sb, srv->lud_host, + addr, port, async ); + if ( rc == -1 ) + return rc; + ber_sockbuf_add_io( sb, &ber_sockbuf_io_tcp, + LBER_SBIOD_LEVEL_PROVIDER, NULL ); + break; case LDAP_PROTO_UDP: - rc = ldap_connect_to_host( ld, sb, srv->lud_host, addr, port, async ); + rc = ldap_connect_to_host( ld, sb, srv->lud_host, + addr, port, async ); + if ( rc == -1 ) + return rc; + ber_sockbuf_add_io( sb, &ber_sockbuf_io_udp, + LBER_SBIOD_LEVEL_PROVIDER, NULL ); break; #ifdef LDAP_PF_LOCAL case LDAP_PROTO_LOCAL: - rc = ldap_connect_to_path( ld, sb, srv->lud_host, async ); + rc = ldap_connect_to_path( ld, sb, srv->lud_host, + async ); + if ( rc == -1 ) + return rc; + ber_sockbuf_add_io( sb, &ber_sockbuf_io_fd, + LBER_SBIOD_LEVEL_PROVIDER, NULL ); break; #endif /* LDAP_PF_LOCAL */ default: - rc = -1; + return -1; break; } - if ( rc == -1 ) { - return( rc ); - } - - ber_pvt_sb_set_io( sb, &ber_pvt_sb_io_tcp, NULL ); + ber_sockbuf_add_io( sb, &ber_sockbuf_io_readahead, + LBER_SBIOD_LEVEL_PROVIDER, NULL ); +#ifdef LDAP_DEBUG + ber_sockbuf_add_io( sb, &ber_sockbuf_io_debug, INT_MAX, NULL ); +#endif #ifdef HAVE_TLS - tls = (srv->lud_properties & LDAP_URL_USE_SSL); - - if ( tls != 0 ) { + if (ld->ld_options.ldo_tls_mode == LDAP_OPT_X_TLS_HARD || + (srv->lud_properties & LDAP_URL_USE_SSL)) { rc = ldap_pvt_tls_start( ld, sb, ld->ld_options.ldo_tls_ctx ); if (rc != LDAP_SUCCESS) return rc;