]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/main.c
silence warning
[openldap] / servers / slapd / main.c
index 41d66907d9108d8f66d91b5a13a7b1c71e1fde50..a70698f2f449dee3663350ad2dc8a321858e4074 100644 (file)
@@ -369,6 +369,9 @@ int main( int argc, char **argv )
        int syslogUser = SLAP_DEFAULT_SYSLOG_USER;
 #endif
        
+#ifndef HAVE_WINSOCK
+       int pid, waitfds[2];
+#endif
        int g_argc = argc;
        char **g_argv = argv;
 
@@ -444,13 +447,13 @@ int main( int argc, char **argv )
 
                newConfigFile = (char*)lutil_getRegParam( regService, "ConfigFile" );
                if ( newConfigFile != NULL ) {
-                       configfile = newConfigFile;
+                       configfile = ch_strdup(newConfigFile);
                        Debug ( LDAP_DEBUG_ANY, "new config file from registry is: %s\n", configfile, 0, 0 );
                }
 
                newConfigDir = (char*)lutil_getRegParam( regService, "ConfigDir" );
                if ( newConfigDir != NULL ) {
-                       configdir = newConfigDir;
+                       configdir = ch_strdup(newConfigDir);
                        Debug ( LDAP_DEBUG_ANY, "new config dir from registry is: %s\n", configdir, 0, 0 );
                }
        }
@@ -849,7 +852,7 @@ unhandled_option:;
        if( rc != 0) {
                Debug( LDAP_DEBUG_ANY,
                    "main: TLS init failed: %d\n",
-                   0, 0, 0 );
+                   rc, 0, 0 );
                rc = 1;
                SERVICE_EXIT( ERROR_SERVICE_SPECIFIC_ERROR, 20 );
                goto destroy;
@@ -904,7 +907,26 @@ unhandled_option:;
 #endif
 
 #ifndef HAVE_WINSOCK
-       lutil_detach( no_detach, 0 );
+       if ( !no_detach ) {
+               if ( lutil_pair( waitfds ) < 0 ) {
+                       Debug( LDAP_DEBUG_ANY,
+                               "main: lutil_pair failed: %d\n",
+                               0, 0, 0 );
+                       rc = 1;
+                       goto destroy;
+               }
+               pid = lutil_detach( no_detach, 0 );
+               if ( pid ) {
+                       char buf[4];
+                       rc = EXIT_SUCCESS;
+                       close( waitfds[1] );
+                       if ( read( waitfds[0], buf, 1 ) != 1 )
+                               rc = EXIT_FAILURE;
+                       _exit( rc );
+               } else {
+                       close( waitfds[0] );
+               }
+       }
 #endif /* HAVE_WINSOCK */
 
 #ifdef CSRIMALLOC
@@ -975,6 +997,13 @@ unhandled_option:;
 
        Debug( LDAP_DEBUG_ANY, "slapd starting\n", 0, 0, 0 );
 
+#ifndef HAVE_WINSOCK
+       if ( !no_detach ) {
+               write( waitfds[1], "1", 1 );
+               close( waitfds[1] );
+       }
+#endif
+
 #ifdef HAVE_NT_EVENT_LOG
        if (is_NT_Service)
        lutil_LogStartedEvent( serverName, slap_debug, configfile ?