Diff for /libraries/liblutil/ntservice.c between versions 1.5 and 1.5.2.4

version 1.5, 1999/07/21 18:54:23 version 1.5.2.4, 2000/06/17 16:16:57
Line 1 Line 1
 /* ntservice.c */  /* $OpenLDAP$ */
   /*
    * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
    * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
    */
   
   /*
    * NT Service manager utilities for OpenLDAP services
    *      these should NOT be slapd specific, but are
    */
   
 #include "portable.h"  #include "portable.h"
   
   #ifdef HAVE_NT_SERVICE_MANAGER
   
 #include <ac/stdlib.h>  #include <ac/stdlib.h>
 #include <ac/string.h>  #include <ac/string.h>
   
Line 9 Line 21
 #include <windows.h>  #include <windows.h>
 #include <winsvc.h>  #include <winsvc.h>
   
 #include "ldap.h"  #include <ldap.h>
   
 #define ldap_debug slap_debug  #define ldap_debug slap_debug
 extern int slap_debug;  extern int slap_debug;
Line 36  ldap_pvt_thread_t  start_status_tid, sto Line 48  ldap_pvt_thread_t  start_status_tid, sto
   
 void (*stopfunc)(int);  void (*stopfunc)(int);
   
 /* in nt_err.c */  static char *GetLastErrorString( void );
 char *GetLastErrorString( void );  
   
 int srv_install(LPCTSTR lpszServiceName, LPCTSTR lpszBinaryPathName)  int srv_install(LPCTSTR lpszServiceName, LPCTSTR lpszDisplayName,
                   LPCTSTR lpszBinaryPathName, BOOL auto_start)
 {  {
         HKEY            hKey;          HKEY            hKey;
         DWORD           dwValue, dwDisposition;          DWORD           dwValue, dwDisposition;
Line 51  int srv_install(LPCTSTR lpszServiceName, Line 63  int srv_install(LPCTSTR lpszServiceName,
                 if ((schService = CreateService(                   if ((schService = CreateService( 
                                                         schSCManager,                                                           schSCManager, 
                                                         lpszServiceName,                                                           lpszServiceName, 
                                                         TEXT("OpenLDAP Directory Service"),                                                           lpszDisplayName, 
                                                         SC_MANAGER_CREATE_SERVICE,                                                           SERVICE_ALL_ACCESS, 
                                                         SERVICE_WIN32_OWN_PROCESS,                                                           SERVICE_WIN32_OWN_PROCESS, 
                                                         SERVICE_DEMAND_START,                                                           auto_start ? SERVICE_AUTO_START : SERVICE_DEMAND_START, 
                                                         SERVICE_ERROR_NORMAL,                                                           SERVICE_ERROR_NORMAL, 
                                                         lpszBinaryPathName,                                                           lpszBinaryPathName, 
                                                         NULL, NULL, NULL, NULL, NULL)) != NULL)                                                          NULL, NULL, NULL, NULL, NULL)) != NULL)
Line 71  int srv_install(LPCTSTR lpszServiceName, Line 83  int srv_install(LPCTSTR lpszServiceName,
                                 "REG_SZ", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey,                                   "REG_SZ", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, 
                                 &dwDisposition) != ERROR_SUCCESS)                                  &dwDisposition) != ERROR_SUCCESS)
                         {                          {
                                 fprintf( stderr, "RegCreateKeyEx() failed. GetLastError=%d (%s)\n", GetLastError(), GetLastErrorString() );                                  fprintf( stderr, "RegCreateKeyEx() failed. GetLastError=%lu (%s)\n", GetLastError(), GetLastErrorString() );
                                 RegCloseKey(hKey);                                  RegCloseKey(hKey);
                                 return(0);                                  return(0);
                         }                          }
                         if ( RegSetValueEx(hKey, "EventMessageFile", 0, REG_EXPAND_SZ, lpszBinaryPathName, strlen(lpszBinaryPathName) + 1) != ERROR_SUCCESS)                          if ( RegSetValueEx(hKey, "EventMessageFile", 0, REG_EXPAND_SZ, lpszBinaryPathName, strlen(lpszBinaryPathName) + 1) != ERROR_SUCCESS)
                         {                          {
                                 fprintf( stderr, "RegSetValueEx(EventMessageFile) failed. GetLastError=%d (%s)\n", GetLastError(), GetLastErrorString() );                                  fprintf( stderr, "RegSetValueEx(EventMessageFile) failed. GetLastError=%lu (%s)\n", GetLastError(), GetLastErrorString() );
                                 RegCloseKey(hKey);                                  RegCloseKey(hKey);
                                 return(0);                                  return(0);
                         }                          }
Line 85  int srv_install(LPCTSTR lpszServiceName, Line 97  int srv_install(LPCTSTR lpszServiceName,
                         dwValue = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE;                          dwValue = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE;
                         if ( RegSetValueEx(hKey, "TypesSupported", 0, REG_DWORD, (LPBYTE) &dwValue, sizeof(DWORD)) != ERROR_SUCCESS)                           if ( RegSetValueEx(hKey, "TypesSupported", 0, REG_DWORD, (LPBYTE) &dwValue, sizeof(DWORD)) != ERROR_SUCCESS) 
                         {                          {
                                 fprintf( stderr, "RegCreateKeyEx(TypesSupported) failed. GetLastError=%d (%s)\n", GetLastError(), GetLastErrorString() );                                  fprintf( stderr, "RegCreateKeyEx(TypesSupported) failed. GetLastError=%lu (%s)\n", GetLastError(), GetLastErrorString() );
                                 RegCloseKey(hKey);                                  RegCloseKey(hKey);
                                 return(0);                                  return(0);
                         }                          }
Line 94  int srv_install(LPCTSTR lpszServiceName, Line 106  int srv_install(LPCTSTR lpszServiceName,
                 }                  }
                 else                  else
                 {                  {
                         fprintf( stderr, "CreateService() failed. GetLastError=%d (%s)\n", GetLastError(), GetLastErrorString() );                          fprintf( stderr, "CreateService() failed. GetLastError=%lu (%s)\n", GetLastError(), GetLastErrorString() );
                         CloseServiceHandle(schSCManager);                          CloseServiceHandle(schSCManager);
                         return(0);                          return(0);
                 }                  }
         }          }
         else          else
                 fprintf( stderr, "OpenSCManager() failed. GetLastError=%d (%s)\n", GetLastError(), GetLastErrorString() );                  fprintf( stderr, "OpenSCManager() failed. GetLastError=%lu (%s)\n", GetLastError(), GetLastErrorString() );
         return(0);          return(0);
 }  }
   
Line 120  int srv_remove(LPCTSTR lpszServiceName, Line 132  int srv_remove(LPCTSTR lpszServiceName,
                                 CloseServiceHandle(schSCManager);                                  CloseServiceHandle(schSCManager);
                                 return(1);                                  return(1);
                         } else {                          } else {
                                 fprintf( stderr, "DeleteService() failed. GetLastError=%d (%s)\n", GetLastError(), GetLastErrorString() );                                  fprintf( stderr, "DeleteService() failed. GetLastError=%lu (%s)\n", GetLastError(), GetLastErrorString() );
                                 fprintf( stderr, "The %s service has not been removed.\n", lpszBinaryPathName);                                  fprintf( stderr, "The %s service has not been removed.\n", lpszBinaryPathName);
                                 CloseServiceHandle(schService);                                  CloseServiceHandle(schService);
                                 CloseServiceHandle(schSCManager);                                  CloseServiceHandle(schSCManager);
                                 return(0);                                  return(0);
                         }                          }
                 } else {                  } else {
                         fprintf( stderr, "OpenService() failed. GetLastError=%d (%s)\n", GetLastError(), GetLastErrorString() );                          fprintf( stderr, "OpenService() failed. GetLastError=%lu (%s)\n", GetLastError(), GetLastErrorString() );
                         CloseServiceHandle(schSCManager);                          CloseServiceHandle(schSCManager);
                         return(0);                          return(0);
                 }                  }
         }          }
         else          else
                 fprintf( stderr, "OpenSCManager() failed. GetLastError=%d (%s)\n", GetLastError(), GetLastErrorString() );                  fprintf( stderr, "OpenSCManager() failed. GetLastError=%lu (%s)\n", GetLastError(), GetLastErrorString() );
         return(0);          return(0);
 }  }
   
   
   DWORD
   svc_installed (LPTSTR lpszServiceName, LPTSTR lpszBinaryPathName)
   {
           char buf[256];
           HKEY key;
           DWORD rc;
           DWORD type;
           long len;
   
           strcpy(buf, TEXT("SYSTEM\\CurrentControlSet\\Services\\"));
           strcat(buf, lpszServiceName);
           if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, buf, 0, KEY_QUERY_VALUE, &key) != ERROR_SUCCESS)
                   return(-1);
   
           rc = 0;
           if (lpszBinaryPathName) {
                   len = sizeof(buf);
                   if (RegQueryValueEx(key, "ImagePath", NULL, &type, buf, &len) == ERROR_SUCCESS) {
                           if (strcmp(lpszBinaryPathName, buf))
                                   rc = -1;
                   }
           }
           RegCloseKey(key);
           return(rc);
   }
   
   
   DWORD
   svc_running (LPTSTR lpszServiceName)
   {
           SC_HANDLE service;
           SC_HANDLE scm;
           DWORD rc;
           SERVICE_STATUS ss;
   
           if (!(scm = OpenSCManager(NULL, NULL, GENERIC_READ)))
                   return(GetLastError());
   
           rc = 1;
           service = OpenService(scm, lpszServiceName, SERVICE_QUERY_STATUS);
           if (service) {
                   if (!QueryServiceStatus(service, &ss))
                           rc = GetLastError();
                   else if (ss.dwCurrentState != SERVICE_STOPPED)
                           rc = 0;
                   CloseServiceHandle(service);
           }
           CloseServiceHandle(scm);
           return(rc);
   }
   
   
 static void *start_status_routine( void *ptr )  static void *start_status_routine( void *ptr )
 {  {
Line 286  void *getRegParam( char *svc, char *valu Line 349  void *getRegParam( char *svc, char *valu
         DWORD valLen = sizeof( vValue );          DWORD valLen = sizeof( vValue );
   
         if ( svc != NULL )          if ( svc != NULL )
                 sprintf ( path, "SOFTWARE\\OpenLDAP\\%s\\Parameters", svc );                  sprintf ( path, "SOFTWARE\\%s", svc );
         else          else
                 strcpy (path, "SOFTWARE\\OpenLDAP\\Parameters" );                  strcpy (path, "SOFTWARE\\OpenLDAP\\Parameters" );
                   
Line 325  void LogSlapdStartedEvent( char *svc, in Line 388  void LogSlapdStartedEvent( char *svc, in
   
         Inserts[i] = (char *)malloc( 20 );          Inserts[i] = (char *)malloc( 20 );
         itoa( slap_debug, Inserts[i++], 10 );          itoa( slap_debug, Inserts[i++], 10 );
         Inserts[i++] = ldap_pvt_strdup( configfile );          Inserts[i++] = strdup( configfile );
         Inserts[i++] = ldap_pvt_strdup( urls );          Inserts[i++] = strdup( urls ? urls : "ldap:///" );
         Inserts[i++] = ldap_pvt_strdup( is_NT_Service ? "svc" : "cmd" );          Inserts[i++] = strdup( is_NT_Service ? "svc" : "cmd" );
   
         ReportEvent( hEventLog, EVENTLOG_INFORMATION_TYPE, 0,          ReportEvent( hEventLog, EVENTLOG_INFORMATION_TYPE, 0,
                 MSG_SLAPD_STARTED, NULL, i, 0, Inserts, NULL );                  MSG_SLAPD_STARTED, NULL, i, 0, (LPCSTR *) Inserts, NULL );
   
         for ( j = 0; j < i; j++ )          for ( j = 0; j < i; j++ )
                 ldap_memfree( Inserts[j] );                  ldap_memfree( Inserts[j] );
Line 420  void ReportSlapdShutdownComplete(  ) Line 483  void ReportSlapdShutdownComplete(  )
                 SetServiceStatus(hSLAPDServiceStatus, &SLAPDServiceStatus);                  SetServiceStatus(hSLAPDServiceStatus, &SLAPDServiceStatus);
         }          }
 }  }
   
   static char *GetErrorString( int err )
   {
           static char msgBuf[1024];
   
           FormatMessage(
                   FORMAT_MESSAGE_FROM_SYSTEM,
                   NULL,
                   err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                   msgBuf, 1024, NULL );
   
           return msgBuf;
   }
   
   static char *GetLastErrorString( void )
   {
           return GetErrorString( GetLastError() );
   }
   #endif

Removed from v.1.5  
changed lines
  Added in v.1.5.2.4


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org