]> git.sur5r.net Git - openldap/blobdiff - libraries/libldap/request.c
cleanup
[openldap] / libraries / libldap / request.c
index bb6c9df78dc71ceefec03e8f60cf6d531dfd9344..82be383618644c4d185c0b019b555b9530e0961b 100644 (file)
@@ -45,9 +45,6 @@
 static LDAPConn *find_connection LDAP_P(( LDAP *ld, LDAPURLDesc *srv, int any ));
 static void use_connection LDAP_P(( LDAP *ld, LDAPConn *lc ));
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
-static LDAPURLDesc *dn2servers LDAP_P(( LDAP *ld, const char *dn ));
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
 
 static BerElement *re_encode_request LDAP_P((
        LDAP *ld,
@@ -64,10 +61,6 @@ ldap_alloc_ber_with_options( LDAP *ld )
 
     if (( ber = ber_alloc_t( ld->ld_lberoptions )) == NULL ) {
                ld->ld_errno = LDAP_NO_MEMORY;
-#ifdef STR_TRANSLATION
-       } else {
-               ldap_set_ber_options( ld, ber );
-#endif /* STR_TRANSLATION */
        }
 
        return( ber );
@@ -78,13 +71,6 @@ void
 ldap_set_ber_options( LDAP *ld, BerElement *ber )
 {
        ber->ber_options = ld->ld_lberoptions;
-#ifdef STR_TRANSLATION
-       if (( ld->ld_lberoptions & LBER_TRANSLATE_STRINGS ) != 0 ) {
-               ber_set_string_translators( ber,
-                   ld->ld_lber_encode_translate_proc,
-                   ld->ld_lber_decode_translate_proc );
-       }
-#endif /* STR_TRANSLATION */
 }
 
 
@@ -114,33 +100,6 @@ ldap_send_initial_request(
                        ( ld->ld_host == NULL ) ? "(null)" : ld->ld_host, 0, 0 );
        }
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
-       if ( LDAP_BOOL_GET(&ld->ld_options, LDAP_BOOL_DNS )
-               && ldap_is_dns_dn( dn ) )
-       {
-               if (( servers = dn2servers( ld, dn )) == NULL ) {
-                       ber_free( ber, 1 );
-                       return( -1 );
-               }
-
-#ifdef LDAP_DEBUG
-               if ( ldap_debug & LDAP_DEBUG_TRACE ) {
-                       LDAPURLDesc     *srv;
-
-                       for (   srv = servers;
-                                       srv != NULL;
-                               srv = srv->lud_next )
-                       {
-                               fprintf( stderr,
-                                   "LDAP server %s:  dn %s, port %d\n",
-                                   srv->lud_host, ( srv->lud_dn == NULL ) ?
-                                   "(default)" : srv->lud_dn,
-                                   srv->lud_port );
-                       }
-               }
-#endif /* LDAP_DEBUG */
-       } else
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
        {
                /*
                 * use of DNS is turned off or this is an X.500 DN...
@@ -277,7 +236,7 @@ ldap_new_connection( LDAP *ld, LDAPURLDesc *srvlist, int use_ldsb,
 {
        LDAPConn        *lc;
        LDAPURLDesc     *srv;
-       Sockbuf         *sb;
+       Sockbuf         *sb = NULL;
 
        Debug( LDAP_DEBUG_TRACE, "ldap_new_connection\n", 0, 0, 0 );
        /*
@@ -297,9 +256,7 @@ ldap_new_connection( LDAP *ld, LDAPURLDesc *srvlist, int use_ldsb,
 
        if ( connect ) {
                for ( srv = srvlist; srv != NULL; srv = srv->lud_next ) {
-                       if ( open_ldap_connection( ld, lc->lconn_sb,
-                                       srv, &lc->lconn_krbinstance, 0 ) != -1 )
-                       {
+                       if ( ldap_int_open_connection( ld, lc, srv, 0 ) != -1 ) {
                                break;
                        }
                }
@@ -437,6 +394,8 @@ ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind )
                        ber_free( lc->lconn_ber, 1 );
                }
 
+               ldap_int_sasl_close( ld, lc );
+
                prevlc = NULL;
                for ( tmplc = ld->ld_conns; tmplc != NULL;
                    tmplc = tmplc->lconn_next ) {
@@ -451,16 +410,18 @@ ldap_free_connection( LDAP *ld, LDAPConn *lc, int force, int unbind )
                        prevlc = tmplc;
                }
                ldap_free_urllist( lc->lconn_server );
+#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_KBIND
                if ( lc->lconn_krbinstance != NULL ) {
                        LDAP_FREE( lc->lconn_krbinstance );
                }
+#endif
                if ( lc->lconn_sb != ld->ld_sb ) {
                        ber_sockbuf_free( lc->lconn_sb );
                }
                if( lc->lconn_rebind_queue != NULL) {
                        int i;
                        for( i = 0; lc->lconn_rebind_queue[i] != NULL; i++) {
-                               free_strarray(lc->lconn_rebind_queue[i]);
+                               LDAP_VFREE(lc->lconn_rebind_queue[i]);
                        }
                        LDAP_FREE( lc->lconn_rebind_queue);
                }
@@ -619,7 +580,7 @@ ldap_free_request( LDAP *ld, LDAPRequest *lr )
  *
  * Return value - number of referrals followed
  */
-LIBLDAP_F(int)
+int
 ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, char **errstrp, int *hadrefp )
 {
        char            *unfollowed;
@@ -764,7 +725,7 @@ ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, char **errstrp,
 
                        if( lc->lconn_rebind_queue != NULL) {
                                /* Release resources of previous list */
-                               free_strarray(refarray);
+                               LDAP_VFREE(refarray);
                                refarray = NULL;
                                ldap_free_urllist(srv);
                                srv = NULL;
@@ -788,7 +749,7 @@ ldap_chase_v3referrals( LDAP *ld, LDAPRequest *lr, char **refs, char **errstrp,
                }
        } /* end for loop */
 done:
-       free_strarray(refarray);
+       LDAP_VFREE(refarray);
        ldap_free_urllist(srv);
        LDAP_FREE( *errstrp );
        
@@ -810,9 +771,6 @@ int
 ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp )
 {
        int             rc, count, len, newdn;
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
-       int             ldapref;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
        char            *p, *ports, *ref, *tmpref, *refdn, *unfollowed;
        LDAPRequest     *origreq;
        LDAPURLDesc     *srv;
@@ -861,9 +819,6 @@ ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp )
 
        /* parse out & follow referrals */
        for ( ref = p; rc == 0 && ref != NULL; ref = p ) {
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
-               ldapref = 0;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
 
                if (( p = strchr( ref, '\n' )) != NULL ) {
                        *p++ = '\0';
@@ -874,21 +829,13 @@ ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp )
                ldap_pvt_hex_unescape( ref );
                len = strlen( ref );
 
+               /* FIXME: we should use the URL Parser */
+
                if ( len > LDAP_LDAP_REF_STR_LEN && strncasecmp( ref,
                    LDAP_LDAP_REF_STR, LDAP_LDAP_REF_STR_LEN ) == 0 ) {
                        Debug( LDAP_DEBUG_TRACE,
                            "chasing LDAP referral: <%s>\n", ref, 0, 0 );
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
-                       ldapref = 1;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
                        tmpref = ref + LDAP_LDAP_REF_STR_LEN;
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
-               } else if ( len > LDAP_DX_REF_STR_LEN && strncasecmp( ref,
-                   LDAP_DX_REF_STR, LDAP_DX_REF_STR_LEN ) == 0 ) {
-                       Debug( LDAP_DEBUG_TRACE,
-                           "chasing DX referral: <%s>\n", ref, 0, 0 );
-                       tmpref = ref + LDAP_DX_REF_STR_LEN;
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
                } else {
                        Debug( LDAP_DEBUG_TRACE,
                            "ignoring unknown referral <%s>\n", ref, 0, 0 );
@@ -915,9 +862,6 @@ ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp )
                        return( -1 );
                }
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
-               if ( ldapref ) {
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
                        if (( srv = (LDAPURLDesc *)LDAP_CALLOC( 1,
                            sizeof( LDAPURLDesc ))) == NULL ) {
                                ber_free( ber, 1 );
@@ -925,6 +869,13 @@ ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp )
                                return( -1 );
                        }
 
+                       if (( srv->lud_scheme = LDAP_STRDUP("ldap")) == NULL ) {
+                               LDAP_FREE( (char *)srv );
+                               ber_free( ber, 1 );
+                               ld->ld_errno = LDAP_NO_MEMORY;
+                               return( -1 );
+                       }
+
                        if (( srv->lud_host = LDAP_STRDUP( tmpref )) == NULL ) {
                                LDAP_FREE( (char *)srv );
                                ber_free( ber, 1 );
@@ -936,13 +887,8 @@ ldap_chase_referrals( LDAP *ld, LDAPRequest *lr, char **errstrp, int *hadrefp )
                                *ports++ = '\0';
                                srv->lud_port = atoi( ports );
                        } else {
-                               srv->lud_port = ldap_int_global_options.ldo_defport;
+                               srv->lud_port = (LDAP_INT_GLOBAL_OPT())->ldo_defport;
                        }
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
-               } else {
-                       srv = dn2servers( ld, tmpref );
-               }
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */
 
                rinfo.ri_msgid = origreq->lr_origid;
                if ( srv != NULL && ldap_send_server_request( ld, ber, ld->ld_msgid,
@@ -1066,7 +1012,7 @@ re_encode_request( LDAP *ld, BerElement *origber, ber_int_t msgid, char **dnp, i
        if ( tag == LDAP_REQ_BIND ) {
                rc = ber_printf( ber, "{it{is" /*}}*/, msgid, tag, ver, *dnp );
        } else if ( tag == LDAP_REQ_DELETE ) {
-               rc = ber_printf( ber, "{its}", msgid, tag, *dnp );
+               rc = ber_printf( ber, "{itsN}", msgid, tag, *dnp );
        } else {
                rc = ber_printf( ber, "{it{s" /*}}*/, msgid, tag, *dnp );
        }
@@ -1080,7 +1026,7 @@ re_encode_request( LDAP *ld, BerElement *origber, ber_int_t msgid, char **dnp, i
        if ( tag != LDAP_REQ_DELETE && (
                ber_write(ber, tmpber.ber_ptr, ( tmpber.ber_end - tmpber.ber_ptr ), 0)
                != ( tmpber.ber_end - tmpber.ber_ptr ) ||
-           ber_printf( ber, /*{{*/ "}}" ) == -1 ) )
+           ber_printf( ber, /*{{*/ "N}N}" ) == -1 ) )
        {
                ld->ld_errno = LDAP_ENCODING_ERROR;
                ber_free( ber, 1 );
@@ -1118,47 +1064,3 @@ ldap_find_request_by_msgid( LDAP *ld, ber_int_t msgid )
 }
 
 
-#ifdef LDAP_API_FEATURE_X_OPENLDAP_V2_DNS
-static LDAPURLDesc *
-dn2servers( LDAP *ld, const char *dn ) /* dn can also be a domain.... */
-{
-       char            *p, *host, *server_dn, **dxs;
-       const char *domain;
-       int             i, port;
-       LDAPURLDesc     *srvlist, *prevsrv, *srv;
-
-       if (( domain = strrchr( dn, '@' )) != NULL ) {
-               ++domain;
-       } else {
-               domain = dn;
-       }
-
-       if (( dxs = ldap_getdxbyname( domain )) == NULL ) {
-               ld->ld_errno = LDAP_NO_MEMORY;
-               return( NULL );
-       }
-
-       srvlist = NULL;
-       for ( i = 0; dxs[ i ] != NULL; ++i ) {
-               if (ldap_url_parselist(&srv, dxs[i]) == LDAP_SUCCESS
-                       || ldap_url_parsehosts(&srv, dxs[i]) == LDAP_SUCCESS)
-               {
-                       /* add to end of list of servers */
-                       if ( srvlist == NULL ) {
-                               srvlist = srv;
-                       } else {
-                               prevsrv->lud_next = srv;
-                       }
-                       prevsrv = srv;
-               }
-       }
-
-       ldap_value_free( dxs );
-
-       if ( srvlist == NULL ) {
-               ld->ld_errno = LDAP_SERVER_DOWN;
-       }
-
-       return( srvlist );
-}
-#endif /* LDAP_API_FEATURE_X_OPENLDAP_V2_DNS */