From: Gary Williams Date: Wed, 16 Jun 1999 19:14:29 +0000 (+0000) Subject: NT service code for slapd X-Git-Tag: OPENLDAP_REL_ENG_2_BP~292 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=17c9a5798aa10b5a38de9195b952bcc6f95067b2;p=openldap NT service code for slapd --- diff --git a/servers/slapd/nt_svc.c b/servers/slapd/nt_svc.c new file mode 100644 index 0000000000..6e1e869879 --- /dev/null +++ b/servers/slapd/nt_svc.c @@ -0,0 +1,100 @@ +// nt_main.c +#include "portable.h" +#include + +//#include +//#include +#include +//#include +//#include +//#include +//#include +//#include + +#include "ldapconfig.h" +#include "slap.h" + +#include "slapdmsg.h" + +#define SCM_NOTIFICATION_INTERVAL 5000 +#define THIRTY_SECONDS (30 * 1000) + +#define SERVICE_NAME "OpenLDAP" + +ldap_pvt_thread_cond_t started_event, stopped_event; +ldap_pvt_thread_t start_status_tid, stop_status_tid; + + +// in main.c +void WINAPI ServiceMain( DWORD argc, LPTSTR *argv ); + + +// in wsa_err.c +char *WSAGetLastErrorString( void ); + +// in nt_err.c +char *GetLastErrorString( void ); + +// in ntservice.c +int srv_install( char* service, char* filename ); +int srv_remove ( char* service, char* filename ); + +void main( DWORD argc, LPTSTR *argv ) +{ + int length; + char filename[MAX_PATH], *fname_start; + extern int is_NT_Service; + + SERVICE_TABLE_ENTRY DispatchTable[] = { + { SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION) ServiceMain }, + { NULL, NULL } + }; + + // set the service's current directory to being the installation directory for the service. + // this way we don't have to write absolute paths in the configuration files + GetModuleFileName( NULL, filename, sizeof( filename ) ); + fname_start = strrchr( filename, '\\' ); + *fname_start = '\0'; + SetCurrentDirectory( filename ); + + if ( argc > 1 ) { + if ( _stricmp( "install", argv[1] ) == 0 ) + { + if ( (length = GetModuleFileName(NULL, filename, sizeof( filename ))) == 0 ) + { + fputs( "unable to retrieve file name for the service.\n", stderr ); + return; + } + if ( !srv_install(SERVICE_NAME, filename) ) + { + fputs( "service failed installation ...\n", stderr ); + return; + } + fputs( "service has been installed ...\n", stderr ); + return; + } + + if ( _stricmp( "remove", argv[1] ) == 0 ) + { + if ( (length = GetModuleFileName(NULL, filename, sizeof( filename ))) == 0 ) + { + fputs( "unable to retrieve file name for the service.\n", stderr ); + return; + } + if ( !srv_remove(SERVICE_NAME, filename) ) + { + fputs( "failed to remove the service ...\n", stderr ); + return; + } + fputs( "service has been removed ...\n", stderr ); + return; + } + } + + puts( "starting slapd..." ); + if ( !StartServiceCtrlDispatcher(DispatchTable) ) + { + is_NT_Service = 0; + ServiceMain( argc, argv ); + } +}