]> git.sur5r.net Git - openldap/commitdiff
find_connections fix (ITS#3280) from HEAD
authorKurt Zeilenga <kurt@openldap.org>
Mon, 30 Aug 2004 02:59:22 +0000 (02:59 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Mon, 30 Aug 2004 02:59:22 +0000 (02:59 +0000)
Add ldap_pvt_url_scheme_port()

include/ldap_pvt.h
libraries/libldap/request.c
libraries/libldap/url.c

index 8785f9ac1751a1c553927d38c9d3111fc17976ff..f218223acf8412280b08030362f66e741dd119ef 100644 (file)
@@ -35,6 +35,10 @@ LDAP_F ( int )
 ldap_pvt_url_scheme2tls LDAP_P((
        const char * ));
 
+LDAP_F ( int )
+ldap_pvt_url_scheme_port LDAP_P((
+       const char *, int ));
+
 struct ldap_url_desc; /* avoid pulling in <ldap.h> */
 
 LDAP_F( int )
index deb583eeb71cc4b54183d4fbba41bf592b0eb069..bf5cb8edce5d14ebe527c0ff009dca274371735b 100644 (file)
@@ -448,20 +448,28 @@ find_connection( LDAP *ld, LDAPURLDesc *srv, int any )
  */
 {
        LDAPConn        *lc;
-       LDAPURLDesc     *ls;
+       LDAPURLDesc     *lcu, *lsu;
+       int lcu_port, lsu_port;
 
        for ( lc = ld->ld_conns; lc != NULL; lc = lc->lconn_next ) {
-               for ( ls = srv; ls != NULL; ls = ls->lud_next ) {
-                       if ( lc->lconn_server->lud_host != NULL &&
-                               *lc->lconn_server->lud_host != '\0' &&
-                           ls->lud_host != NULL && *ls->lud_host != '\0' &&
-                               strcasecmp( ls->lud_host, lc->lconn_server->lud_host ) == 0
-                           && ls->lud_port == lc->lconn_server->lud_port ) {
+               lcu = lc->lconn_server;
+               lcu_port = ldap_pvt_url_scheme_port( lcu->lud_scheme,
+                       lcu->lud_port );
+
+               for ( lsu = srv; lsu != NULL; lsu = lsu->lud_next ) {
+                       lsu_port = ldap_pvt_url_scheme_port( lsu->lud_scheme,
+                               lsu->lud_port );
+
+                       if ( strcmp( lcu->lud_scheme, lsu->lud_scheme ) == 0
+                               && lcu->lud_host != NULL && *lcu->lud_host != '\0'
+                           && lsu->lud_host != NULL && *lsu->lud_host != '\0'
+                               && strcasecmp( lsu->lud_host, lcu->lud_host ) == 0
+                           && lsu_port == lcu_port )
+                       {
                                return lc;
                        }
-                       if ( !any ) {
-                               break;
-                       }
+
+                       if ( !any ) break;
                }
        }
 
index 206f16aafb3384ca418c4d8abce8413f66ca8ca9..1615a77ae5784f2d56c30c745ae70a80ed40f03a 100644 (file)
@@ -78,6 +78,34 @@ int ldap_pvt_url_scheme2proto( const char *scheme )
        return -1;
 }
 
+int ldap_pvt_url_scheme_port( const char *scheme, int port )
+{
+       assert( scheme );
+
+       if( port ) return port;
+       if( scheme == NULL ) return port;
+
+       if( strcmp("ldap", scheme) == 0 ) {
+               return LDAP_PORT;
+       }
+
+       if( strcmp("ldapi", scheme) == 0 ) {
+               return -1;
+       }
+
+       if( strcmp("ldaps", scheme) == 0 ) {
+               return LDAPS_PORT;
+       }
+
+#ifdef LDAP_CONNECTIONLESS
+       if( strcmp("cldap", scheme) == 0 ) {
+               return LDAP_PORT;
+       }
+#endif
+
+       return -1;
+}
+
 int
 ldap_pvt_url_scheme2tls( const char *scheme )
 {