aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryaworsky <yaworsky>2005-12-02 09:09:37 +0000
committeryaworsky <yaworsky>2005-12-02 09:09:37 +0000
commite459f29dff80f46b7a725e77bb82d9f4df186868 (patch)
treee9ec560da839a4d500ec98a5b5fc174e34ec8fae
parent26439bd634d99da300bef9e1df100cfd3d3cde50 (diff)
downloadsyslog-win32-e459f29dff80f46b7a725e77bb82d9f4df186868.tar.gz
syslog-win32-e459f29dff80f46b7a725e77bb82d9f4df186868.tar.xz
syslog-win32-e459f29dff80f46b7a725e77bb82d9f4df186868.zip
Fixed winNT service control from command line.
Fixed service installation: added instance name. Service name and event name is made more distinguished.
-rw-r--r--daemon/main.c32
1 files changed, 25 insertions, 7 deletions
diff --git a/daemon/main.c b/daemon/main.c
index 9b5aa29..1a691ab 100644
--- a/daemon/main.c
+++ b/daemon/main.c
@@ -35,15 +35,19 @@ struct string *line_feed;
int verbosity_level = 0;
-static char *service_name = "syslogd";
+static char *service_name = "syslogd-win32";
static char *service_display_name = "syslogd";
-static char *service_stop_event_name = "syslogd-stop";
+static char *service_stop_event_name = "syslogd-win32-stop";
static OSVERSIONINFO vi;
static SERVICE_STATUS_HANDLE hss;
static SERVICE_STATUS sstatus;
+/* options */
+static char *instance_name = NULL;
+static char *priority = NULL;
+
/******************************************************************************
* display message
*/
@@ -119,12 +123,23 @@ static void WINAPI ServiceControlHandler( DWORD Control )
*/
static void WINAPI winnt_ServiceMain( DWORD Argc, LPTSTR* Argv )
{
+ char security_descriptor[ SECURITY_DESCRIPTOR_MIN_LENGTH ];
+ SECURITY_ATTRIBUTES security_attributes;
+
+ InitializeSecurityDescriptor( (PSECURITY_DESCRIPTOR) security_descriptor,
+ SECURITY_DESCRIPTOR_REVISION );
+ SetSecurityDescriptorDacl( (PSECURITY_DESCRIPTOR) security_descriptor,
+ TRUE, (PACL) NULL, FALSE );
+ security_attributes.nLength = sizeof(SECURITY_ATTRIBUTES);
+ security_attributes.lpSecurityDescriptor = (PSECURITY_DESCRIPTOR) security_descriptor;
+ security_attributes.bInheritHandle = FALSE;
+
hss = RegisterServiceCtrlHandler( PACKAGE_NAME,
(LPHANDLER_FUNCTION)ServiceControlHandler );
if( !hss )
return;
- service_stop_event = CreateEvent( NULL, TRUE, FALSE, NULL );
+ service_stop_event = CreateEvent( &security_attributes, TRUE, FALSE, service_stop_event_name );
if( !service_stop_event )
return;
@@ -337,10 +352,10 @@ static BOOL winnt_InstallService( char* command_line )
return ret;
}
-static BOOL install_service( char* priority )
+static BOOL install_service()
{
BOOL ret;
- char command_line[ MAX_PATH + 64 ];
+ char command_line[ MAX_PATH ];
TRACE_ENTER( "\n" );
if( __argv[0][1] == ':' )
@@ -358,6 +373,11 @@ static BOOL install_service( char* priority )
strcat( command_line, " --priority " );
strcat( command_line, priority );
}
+ if( instance_name )
+ {
+ strcat( command_line, " --instance " );
+ strcat( command_line, instance_name );
+ }
if( VER_PLATFORM_WIN32_NT == vi.dwPlatformId )
ret = winnt_InstallService( command_line );
@@ -545,8 +565,6 @@ int main( int argc, char* argv[] )
static int start_flag = 0;
static int shutdown_flag = 0;
static int restart_flag = 0;
- char *instance_name = NULL;
- char *priority = NULL;
int getopt_failure = 0;
WSADATA wsd;
char name_buf[ MAX_COMPUTERNAME_LENGTH + 1 ];