UNIX signal numbers start at 1.
[tinc] / src / process.c
index 11e8b4f..d07ce7d 100644 (file)
@@ -1,7 +1,7 @@
 /*
     process.c -- process management functions
     Copyright (C) 1999-2005 Ivo Timmermans,
-                  2000-2006 Guus Sliepen <guus@tinc-vpn.org>
+                  2000-2007 Guus Sliepen <guus@tinc-vpn.org>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -154,6 +154,9 @@ bool remove_service(void) {
 
 DWORD WINAPI controlhandler(DWORD request, DWORD type, LPVOID boe, LPVOID bah) {
        switch(request) {
+               case SERVICE_CONTROL_INTERROGATE:
+                       SetServiceStatus(statushandle, &status);
+                       return NO_ERROR;
                case SERVICE_CONTROL_STOP:
                        logger(LOG_NOTICE, _("Got %s request"), "SERVICE_CONTROL_STOP");
                        break;
@@ -368,9 +371,9 @@ bool execute_script(const char *name, char **envp)
        cp();
 
 #ifndef HAVE_MINGW
-       len = asprintf(&scriptname, "\"%s/%s\"", confbase, name);
+       len = xasprintf(&scriptname, "\"%s/%s\"", confbase, name);
 #else
-       len = asprintf(&scriptname, "\"%s/%s.bat\"", confbase, name);
+       len = xasprintf(&scriptname, "\"%s/%s.bat\"", confbase, name);
 #endif
        if(len < 0)
                return false;
@@ -379,8 +382,10 @@ bool execute_script(const char *name, char **envp)
 
        /* First check if there is a script */
 
-       if(stat(scriptname + 1, &s))
+       if(stat(scriptname + 1, &s)) {
+               free(scriptname);
                return true;
+       }
 
        ifdebug(STATUS) logger(LOG_INFO, _("Executing script %s"), name);
 
@@ -582,7 +587,7 @@ void setup_signals(void)
 
        /* Set a default signal handler for every signal, errors will be
           ignored. */
-       for(i = 0; i < NSIG; i++) {
+       for(i = 1; i < NSIG; i++) {
                if(!do_detach)
                        act.sa_handler = SIG_DFL;
                else