X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libraries%2Flibldap%2Fopen.c;h=244dde7317c1008b69688591543c6c012d070444;hb=e4f2c9425afc0f594212aa1697bad779733b96b9;hp=2010e83026bdb944ef3b666a69930162aef6a37c;hpb=d397f6aa2fcc639356f105720b2d68c108097112;p=openldap diff --git a/libraries/libldap/open.c b/libraries/libldap/open.c index 2010e83026..244dde7317 100644 --- a/libraries/libldap/open.c +++ b/libraries/libldap/open.c @@ -1,6 +1,6 @@ /* $OpenLDAP$ */ /* - * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved. + * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved. * COPYING RESTRICTIONS APPLY, see COPYRIGHT file */ /* Portions @@ -92,47 +92,13 @@ ldap_create( LDAP **ldp ) /* Initialize the global options, if not already done. */ if( gopts->ldo_valid != LDAP_INITIALIZED ) { ldap_int_initialize(gopts, NULL); + if ( gopts->ldo_valid != LDAP_INITIALIZED ) + return LDAP_LOCAL_ERROR; } Debug( LDAP_DEBUG_TRACE, "ldap_create\n", 0, 0, 0 ); -#ifdef HAVE_WINSOCK2 -{ WORD wVersionRequested; - WSADATA wsaData; - - wVersionRequested = MAKEWORD( 2, 0 ); - if ( WSAStartup( wVersionRequested, &wsaData ) != 0 ) { - /* Tell the user that we couldn't find a usable */ - /* WinSock DLL. */ - return LDAP_LOCAL_ERROR; - } - - /* Confirm that the WinSock DLL supports 2.0.*/ - /* Note that if the DLL supports versions greater */ - /* than 2.0 in addition to 2.0, it will still return */ - /* 2.0 in wVersion since that is the version we */ - /* requested. */ - - if ( LOBYTE( wsaData.wVersion ) != 2 || - HIBYTE( wsaData.wVersion ) != 0 ) - { - /* Tell the user that we couldn't find a usable */ - /* WinSock DLL. */ - WSACleanup( ); - return LDAP_LOCAL_ERROR; - } -} /* The WinSock DLL is acceptable. Proceed. */ - -#elif HAVE_WINSOCK -{ WSADATA wsaData; - if ( WSAStartup( 0x0101, &wsaData ) != 0 ) { - return LDAP_LOCAL_ERROR; - } -} -#endif - if ( (ld = (LDAP *) LDAP_CALLOC( 1, sizeof(LDAP) )) == NULL ) { - WSACleanup( ); return( LDAP_NO_MEMORY ); } @@ -160,14 +126,12 @@ ldap_create( LDAP **ldp ) if ( ld->ld_options.ldo_defludp == NULL ) { LDAP_FREE( (char*)ld ); - WSACleanup( ); return LDAP_NO_MEMORY; } if (( ld->ld_selectinfo = ldap_new_select_info()) == NULL ) { ldap_free_urllist( ld->ld_options.ldo_defludp ); LDAP_FREE( (char*) ld ); - WSACleanup( ); return LDAP_NO_MEMORY; } @@ -177,7 +141,6 @@ ldap_create( LDAP **ldp ) if ( ld->ld_sb == NULL ) { ldap_free_urllist( ld->ld_options.ldo_defludp ); LDAP_FREE( (char*) ld ); - WSACleanup( ); return LDAP_NO_MEMORY; } @@ -238,7 +201,7 @@ ldap_initialize( LDAP **ldp, LDAP_CONST char *url ) } #ifdef LDAP_CONNECTIONLESS if (ldap_is_ldapc_url(url)) - ld->ld_options.ldo_valid |= LDAP_UDP_SESSION; + LDAP_IS_UDP(ld) = 1; #endif } @@ -266,7 +229,7 @@ ldap_int_open_connection( switch ( proto = ldap_pvt_url_scheme2proto( srv->lud_scheme ) ) { case LDAP_PROTO_TCP: - port = htons( (short) srv->lud_port ); + port = srv->lud_port; addr = 0; if ( srv->lud_host == NULL || *srv->lud_host == 0 ) { @@ -276,6 +239,14 @@ ldap_int_open_connection( host = srv->lud_host; } + if( !port ) { + if( strcmp(srv->lud_scheme, "ldaps") == 0 ) { + port = LDAPS_PORT; + } else { + port = LDAP_PORT; + } + } + rc = ldap_connect_to_host( ld, conn->lconn_sb, proto, host, addr, port, async ); @@ -293,8 +264,9 @@ ldap_int_open_connection( #endif break; #ifdef LDAP_CONNECTIONLESS + case LDAP_PROTO_UDP: - port = htons( (short) srv->lud_port ); + port = srv->lud_port; addr = 0; if ( srv->lud_host == NULL || *srv->lud_host == 0 ) { @@ -303,7 +275,10 @@ ldap_int_open_connection( } else { host = srv->lud_host; } - ld->ld_options.ldo_valid |= LDAP_UDP_SESSION; + + if( !port ) port = LDAP_PORT; + + LDAP_IS_UDP(ld) = 1; rc = ldap_connect_to_host( ld, conn->lconn_sb, proto, host, addr, port, async ); @@ -358,6 +333,7 @@ ldap_int_open_connection( that SASL EXTERNAL might be used */ if( sasl_host != NULL ) { ldap_int_sasl_open( ld, conn, sasl_host, sasl_ssf ); + LDAP_FREE( sasl_host ); } #endif