]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/daemon.c
check consistency of referrals and result code (ITS#4861)
[openldap] / servers / slapd / daemon.c
index d9ea1fd04d935997cff9b807c36f4e6785c2aca4..9f86d3d13035d64fe8cf4aec1f7afd065ed3627e 100644 (file)
@@ -1,7 +1,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2006 The OpenLDAP Foundation.
+ * Copyright 1998-2007 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -494,6 +494,7 @@ static struct slap_daemon {
 
 # define SLAP_SOCK_INIT                        do { \
        SLAP_SELECT_CHK_SETSIZE; \
+       FD_ZERO(&slap_daemon.sd_actives); \
        FD_ZERO(&slap_daemon.sd_readers); \
        FD_ZERO(&slap_daemon.sd_writers); \
 } while (0)
@@ -582,28 +583,17 @@ slapd_slp_init( const char* urls )
        /* find and expand INADDR_ANY URLs */
        for ( i = 0; slapd_srvurls[i] != NULL; i++ ) {
                if ( strcmp( slapd_srvurls[i], "ldap:///" ) == 0 ) {
-                       char *host = ldap_pvt_get_fqdn( NULL );
-                       if ( host != NULL ) {
-                               slapd_srvurls[i] = (char *) ch_realloc( slapd_srvurls[i],
-                                       strlen( host ) +
-                                       sizeof( LDAP_SRVTYPE_PREFIX ) );
-                               strcpy( lutil_strcopy(slapd_srvurls[i],
-                                       LDAP_SRVTYPE_PREFIX ), host );
-
-                               ch_free( host );
-                       }
-
+                       slapd_srvurls[i] = (char *) ch_realloc( slapd_srvurls[i],
+                               strlen( global_host ) +
+                               sizeof( LDAP_SRVTYPE_PREFIX ) );
+                       strcpy( lutil_strcopy(slapd_srvurls[i],
+                               LDAP_SRVTYPE_PREFIX ), global_host );
                } else if ( strcmp( slapd_srvurls[i], "ldaps:///" ) == 0 ) {
-                       char *host = ldap_pvt_get_fqdn( NULL );
-                       if ( host != NULL ) {
-                               slapd_srvurls[i] = (char *) ch_realloc( slapd_srvurls[i],
-                                       strlen( host ) +
-                                       sizeof( LDAPS_SRVTYPE_PREFIX ) );
-                               strcpy( lutil_strcopy(slapd_srvurls[i],
-                                       LDAPS_SRVTYPE_PREFIX ), host );
-
-                               ch_free( host );
-                       }
+                       slapd_srvurls[i] = (char *) ch_realloc( slapd_srvurls[i],
+                               strlen( global_host ) +
+                               sizeof( LDAPS_SRVTYPE_PREFIX ) );
+                       strcpy( lutil_strcopy(slapd_srvurls[i],
+                               LDAPS_SRVTYPE_PREFIX ), global_host );
                }
        }
 
@@ -1387,9 +1377,9 @@ slap_open_listener(
                        inet_ntop( AF_INET6, &((struct sockaddr_in6 *)*sal)->sin6_addr,
                                addr, sizeof addr);
                        port = ntohs( ((struct sockaddr_in6 *)*sal)->sin6_port );
-                       l.sl_name.bv_len = strlen(addr) + sizeof("IP= 65535");
+                       l.sl_name.bv_len = strlen(addr) + sizeof("IP=[]:65535");
                        l.sl_name.bv_val = ber_memalloc( l.sl_name.bv_len );
-                       snprintf( l.sl_name.bv_val, l.sl_name.bv_len, "IP=%s %d", 
+                       snprintf( l.sl_name.bv_val, l.sl_name.bv_len, "IP=[%s]:%d", 
                                addr, port );
                        l.sl_name.bv_len = strlen( l.sl_name.bv_val );
                } break;
@@ -1594,13 +1584,13 @@ slap_listener(
 #ifdef LDAP_PF_LOCAL
        char peername[MAXPATHLEN + sizeof("PATH=")];
 #elif defined(LDAP_PF_INET6)
-       char peername[sizeof("IP=ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 65535")];
+       char peername[sizeof("IP=[ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]:65535")];
 #else /* ! LDAP_PF_LOCAL && ! LDAP_PF_INET6 */
        char peername[sizeof("IP=255.255.255.255:65336")];
 #endif /* LDAP_PF_LOCAL */
 
        Debug( LDAP_DEBUG_TRACE,
-               ">>> slap_listener(%s)",
+               ">>> slap_listener(%s)\n",
                sl->sl_url.bv_val, 0, 0 );
 
        peername[0] = '\0';
@@ -1758,7 +1748,7 @@ slap_listener(
                peeraddr = (char *) inet_ntop( AF_INET6,
                                      &from.sa_in6_addr.sin6_addr,
                                      addr, sizeof addr );
-               sprintf( peername, "IP=%s %d",
+               sprintf( peername, "IP=[%s]:%d",
                         peeraddr != NULL ? peeraddr : SLAP_STRING_UNKNOWN,
                         (unsigned) ntohs( from.sa_in6_addr.sin6_port ) );
        }
@@ -1766,10 +1756,10 @@ slap_listener(
 #  endif /* LDAP_PF_INET6 */
 
        case AF_INET:
-       peeraddr = inet_ntoa( from.sa_in_addr.sin_addr );
-       sprintf( peername, "IP=%s:%d",
-               peeraddr != NULL ? peeraddr : SLAP_STRING_UNKNOWN,
-               (unsigned) ntohs( from.sa_in_addr.sin_port ) );
+               peeraddr = inet_ntoa( from.sa_in_addr.sin_addr );
+               sprintf( peername, "IP=%s:%d",
+                       peeraddr != NULL ? peeraddr : SLAP_STRING_UNKNOWN,
+                       (unsigned) ntohs( from.sa_in_addr.sin_port ) );
                break;
 
        default: