]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/main.c
fix substring_comp_candidates logic if intersection of candidates
[openldap] / servers / slapd / main.c
index 8850e54a2f0e0b83beb96ec03825a3f85c0af1f6..d3972ca0f1a0c0088d111bb97262a9d5c05c60c4 100644 (file)
@@ -49,6 +49,9 @@ void *getRegParam( char *svc, char *value );
 #endif
 
 short port = LDAP_PORT;
+#ifdef HAVE_TLS
+short tls_port = LDAP_TLS_PORT;
+#endif
 /*
  * when more than one slapd is running on one machine, each one might have
  * it's own LOCAL for syslogging and must have its own pid/args files
@@ -114,6 +117,10 @@ usage( char *name )
 time_t starttime;
 struct sockaddr_in     bind_addr;
 ber_int_t tcps;
+#ifdef HAVE_TLS
+struct sockaddr_in     tls_bind_addr;
+ber_int_t tls_tcps;
+#endif
 
 #ifdef HAVE_WINSOCK
 void WINAPI ServiceMain( DWORD argc, LPTSTR *argv )
@@ -141,11 +148,17 @@ int main( int argc, char **argv )
 #endif
        char        *serverName;
        int         serverMode = SLAP_SERVER_MODE;
+       int             use_tls_port = 0;
 
        (void) memset( (void*) &bind_addr, '\0', sizeof(bind_addr));
        bind_addr.sin_family = AF_INET;
        bind_addr.sin_addr.s_addr = htonl(INADDR_ANY);
        bind_addr.sin_port = htons(port);
+#ifdef HAVE_TLS
+       tls_bind_addr.sin_family = AF_INET;
+       tls_bind_addr.sin_addr.s_addr = htonl(INADDR_ANY);
+       tls_bind_addr.sin_port = htons(tls_port);
+#endif
 
        g_argc = argc;
        g_argv = argv;
@@ -195,6 +208,9 @@ int main( int argc, char **argv )
 #endif
 #ifdef HAVE_WINSOCK
                                 "n:"
+#endif
+#ifdef HAVE_TLS
+                            "P:T"
 #endif
                             )) != EOF ) {
                switch ( i ) {
@@ -207,6 +223,13 @@ int main( int argc, char **argv )
                        {
                                fprintf(stderr, "invalid address (%s) for -a option", optarg);
                        }
+#ifdef HAVE_TLS
+#ifdef HAVE_WINSOCK
+                       tls_bind_addr.sin_addr.S_un.S_addr = inet_addr(optarg);
+#else
+                       inet_aton(optarg, &tls_bind_addr.sin_addr);
+#endif
+#endif
             break;
 
 #ifdef LDAP_DEBUG
@@ -268,6 +291,17 @@ int main( int argc, char **argv )
                                }
                        } break;
 
+#ifdef HAVE_TLS
+               case 'P': {     /* port on which to listen for TLS */
+                               tls_port = (short)atoi( optarg );
+                               if(! tls_port ) {
+                                       fprintf(stderr, "-P %s must be numeric\n", optarg);
+                               } else {
+                                       tls_bind_addr.sin_port = htons(tls_port);
+                               }
+                       } break;
+#endif
+
                case 's':       /* set syslog level */
                        ldap_syslog = atoi( optarg );
                        break;
@@ -306,6 +340,11 @@ int main( int argc, char **argv )
                case 'n':  /* NT service name */
                        NTservice = ch_strdup( optarg );
                        break;
+#endif
+#ifdef HAVE_TLS
+               case 'T':  /* Bind on TLS port */
+                       use_tls_port = 1;
+                       break;
 #endif
                default:
                        usage( argv[0] );
@@ -350,9 +389,23 @@ int main( int argc, char **argv )
                goto destroy;
        }
 
+#ifdef HAVE_TLS
+       ldap_pvt_tls_init();
+       ldap_pvt_tls_init_def_ctx();
+#endif
+
        tcps = set_socket( inetd ? NULL : &bind_addr );
        if ( tcps == -1 )
                goto destroy;
+#ifdef HAVE_TLS
+       if ( use_tls_port ) {
+               tls_tcps = set_socket( inetd ? NULL : &tls_bind_addr );
+               if ( tls_tcps == -1 )
+                       goto destroy;
+       } else {
+               tls_tcps = -1;
+       }
+#endif
 
        (void) SIGNAL( LDAP_SIGUSR1, slap_do_nothing );
        (void) SIGNAL( LDAP_SIGUSR2, slap_set_shutdown );
@@ -392,6 +445,9 @@ int main( int argc, char **argv )
                FILE *fp;
 
                args.addr = &bind_addr;
+#ifdef HAVE_TLS
+               args.tls_addr = &tls_bind_addr;
+#endif
 
                Debug( LDAP_DEBUG_ANY, "slapd starting\n", 0, 0, 0 );
 
@@ -414,8 +470,14 @@ int main( int argc, char **argv )
 
        } else {
                args.addr = NULL;
+#ifdef HAVE_TLS
+               args.tls_addr = NULL;
+#endif
        }
        args.tcps = tcps;
+#ifdef HAVE_TLS
+       args.tls_tcps = tls_tcps;
+#endif
 
        time( &starttime );
 #ifdef HAVE_WINSOCK