]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/open.c
ITS#4726 call ldap_pvt_tls_init() in init_ctx() to make sure initialization
[openldap] / libraries / libldap / open.c
index ddf37f9a75697237133fc16fa6bc80ffa36f099e..91368ec9786a80802a0988c4de638dad7312fd63 100644 (file)
 #include "ldap-int.h"
 #include "ldap_log.h"
 
+/* Caller should hold the req_mutex if simultaneous accesses are possible */
 int ldap_open_defconn( LDAP *ld )
 {
        ld->ld_defconn = ldap_new_connection( ld,
-               ld->ld_options.ldo_defludp, 1, 1, NULL );
+               &ld->ld_options.ldo_defludp, 1, 1, NULL );
 
        if( ld->ld_defconn == NULL ) {
                ld->ld_errno = LDAP_SERVER_DOWN;
@@ -136,6 +137,15 @@ ldap_create( LDAP **ldp )
                ? LDAP_STRDUP( gopts->ldo_def_sasl_authzid ) : NULL;
 #endif
 
+#ifdef HAVE_TLS
+       /* We explicitly inherit the SSL_CTX, don't need the names/paths. Leave
+        * them empty to allow new SSL_CTX's to be created from scratch.
+        */
+       memset( &ld->ld_options.ldo_tls_info, 0,
+               sizeof( ld->ld_options.ldo_tls_info ));
+       ld->ld_options.ldo_tls_ctx = NULL;
+#endif
+
        if ( gopts->ldo_tm_api &&
                ldap_int_timeval_dup( &ld->ld_options.ldo_tm_api, gopts->ldo_tm_api ))
                goto nomem;
@@ -377,7 +387,8 @@ ldap_int_open_connection(
 }
 
 
-int ldap_open_internal_connection( LDAP **ldp, ber_socket_t *fdp )
+int
+ldap_open_internal_connection( LDAP **ldp, ber_socket_t *fdp )
 {
        int rc;
        LDAPConn *c;
@@ -392,7 +403,7 @@ int ldap_open_internal_connection( LDAP **ldp, ber_socket_t *fdp )
        /* Make it appear that a search request, msgid 0, was sent */
        lr = (LDAPRequest *)LDAP_CALLOC( 1, sizeof( LDAPRequest ));
        if( lr == NULL ) {
-               ldap_unbind( *ldp );
+               ldap_unbind_ext( *ldp, NULL, NULL );
                *ldp = NULL;
                return( LDAP_NO_MEMORY );
        }
@@ -406,7 +417,7 @@ int ldap_open_internal_connection( LDAP **ldp, ber_socket_t *fdp )
        /* Attach the passed socket as the *LDAP's connection */
        c = ldap_new_connection( *ldp, NULL, 1, 0, NULL);
        if( c == NULL ) {
-               ldap_unbind( *ldp );
+               ldap_unbind_ext( *ldp, NULL, NULL );
                *ldp = NULL;
                return( LDAP_NO_MEMORY );
        }