]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/open.c
Sync with 2.x
[openldap] / libraries / libldap / open.c
index d67326333cc10e318d8674299428e5f758b024a6..904fb0af087478e275a370a040f07fe70ed5fdc3 100644 (file)
@@ -252,6 +252,7 @@ ldap_int_open_connection(
        char *sasl_host = NULL;
        int sasl_ssf = 0;
 #endif
+       char *host;
        int port;
        long addr;
 
@@ -262,11 +263,15 @@ ldap_int_open_connection(
                        port = htons( (short) srv->lud_port );
 
                        addr = 0;
-                       if ( srv->lud_host == NULL || *srv->lud_host == 0 )
+                       if ( srv->lud_host == NULL || *srv->lud_host == 0 ) {
+                               host = NULL;
                                addr = htonl( INADDR_LOOPBACK );
+                       } else {
+                               host = srv->lud_host;
+                       }
 
                        rc = ldap_connect_to_host( ld, conn->lconn_sb, 0,
-                               srv->lud_host, addr, port, async );
+                               host, addr, port, async );
 
                        if ( rc == -1 ) return rc;
 
@@ -324,9 +329,16 @@ ldap_int_open_connection(
        if (ld->ld_options.ldo_tls_mode == LDAP_OPT_X_TLS_HARD ||
                strcmp( srv->lud_scheme, "ldaps" ) == 0 )
        {
+               LDAPConn        *savedefconn = ld->ld_defconn;
+               ++conn->lconn_refcnt;   /* avoid premature free */
+               ld->ld_defconn = conn;
+
                rc = ldap_pvt_tls_start( ld, conn->lconn_sb,
                        ld->ld_options.ldo_tls_ctx );
 
+               ld->ld_defconn = savedefconn;
+               --conn->lconn_refcnt;
+
                if (rc != LDAP_SUCCESS) {
                        return -1;
                }