]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/nt_svc.c
Add a safety check to bvcasechr
[openldap] / servers / slapd / nt_svc.c
index 5bd46f9636430d6679947360b556faa312c8b417..9be80c9e409dd34d222957872626591979fc0b99 100644 (file)
@@ -1,6 +1,6 @@
 /* $OpenLDAP$ */
 /*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 
@@ -8,6 +8,7 @@
 #include <stdio.h>
 #include <ac/string.h>
 #include "slap.h"
+#include "lutil.h"
 
 #ifdef HAVE_NT_SERVICE_MANAGER
 
@@ -18,12 +19,13 @@ void WINAPI ServiceMain( DWORD argc, LPTSTR *argv );
 int srv_install( char* service, char * displayName, char* filename,
                 BOOL auto_start );
 int srv_remove ( char* service, char* filename );
+DWORD svc_installed (LPTSTR lpszServiceName, LPTSTR lpszBinaryPathName);
+DWORD svc_running (LPTSTR lpszServiceName);
 
 int main( int argc, LPTSTR *argv )
 {
        int             length;
        char    filename[MAX_PATH], *fname_start;
-       extern int is_NT_Service;
 
        /*
         * Because the service was registered as SERVICE_WIN32_OWN_PROCESS,
@@ -99,7 +101,9 @@ int main( int argc, LPTSTR *argv )
        }
 
        puts( "starting slapd..." );
-       if ( !StartServiceCtrlDispatcher(DispatchTable) )
+       if (svc_installed(SERVICE_NAME, NULL) != 0
+               || svc_running(SERVICE_NAME) == 1
+               || StartServiceCtrlDispatcher(DispatchTable) == 0 )
        {
                is_NT_Service = 0;
                ServiceMain( argc, argv );