]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/request.c
Minor adjustments based upon initial read of draft-ietf-ldapext-ldap-c-api-04.txt.
[openldap] / libraries / libldap / request.c
index 07da8e9bcec79d63a8c3a8c9dc862afc6082c72f..aeb32ef92ba1ca8a34859841659024baeff56b7c 100644 (file)
@@ -78,36 +78,19 @@ ldap_send_initial_request(
        const char *dn,
        BerElement *ber )
 {
-       LDAPServer      *servers, *srv;
+       LDAPServer      *servers;
 
        Debug( LDAP_DEBUG_TRACE, "ldap_send_initial_request\n", 0, 0, 0 );
 
        if ( ! ber_pvt_sb_in_use(&ld->ld_sb ) ) {
                /* not connected yet */
+               int rc = ldap_open_defconn( ld );
 
-               if (( srv = (LDAPServer *)LDAP_CALLOC( 1, sizeof( LDAPServer ))) ==
-                   NULL || ( ld->ld_defhost != NULL && ( srv->lsrv_host =
-                   LDAP_STRDUP( ld->ld_defhost )) == NULL ))
-               {
-                       if (srv != NULL) LDAP_FREE( srv );
+               if( rc < 0 ) {
                        ber_free( ber, 1 );
-                       ld->ld_errno = LDAP_NO_MEMORY;
                        return( -1 );
                }
 
-               srv->lsrv_port = ld->ld_defport;
-
-               if (( ld->ld_defconn = ldap_new_connection( ld, &srv, 1,1,0 ))
-                       == NULL )
-               {
-                       if ( ld->ld_defhost != NULL ) LDAP_FREE( srv->lsrv_host );
-                       LDAP_FREE( (char *)srv );
-                       ber_free( ber, 1 );
-                       ld->ld_errno = LDAP_SERVER_DOWN;
-                       return( -1 );
-               }
-               ++ld->ld_defconn->lconn_refcnt; /* so it never gets closed/freed */
-
                Debug( LDAP_DEBUG_TRACE,
                        "ldap_delayed_open successful, ld_host is %s\n",
                        ( ld->ld_host == NULL ) ? "(null)" : ld->ld_host, 0, 0 );
@@ -427,12 +410,16 @@ ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind )
                        if ( unbind ) {
                                ldap_send_unbind( ld, lc->lconn_sb, NULL, NULL );
                        }
-                       ldap_close_connection( lc->lconn_sb );
-                       ber_pvt_sb_destroy( lc->lconn_sb );
-                       if( lc->lconn_ber != NULL ) {
-                               ber_free( lc->lconn_ber, 1 );
-                       }
                }
+
+               /* force closure */
+               ldap_close_connection( lc->lconn_sb );
+               ber_pvt_sb_destroy( lc->lconn_sb );
+
+               if( lc->lconn_ber != NULL ) {
+                       ber_free( lc->lconn_ber, 1 );
+               }
+
                prevlc = NULL;
                for ( tmplc = ld->ld_conns; tmplc != NULL;
                    tmplc = tmplc->lconn_next ) {