X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fprocess.c;h=a7d0f260ec448a07850c861e66b23fcb698afbca;hb=36623e15a1c8685e5d8730345c1a7f9c93710fef;hp=de9c71d6b8f68bb913ab003ae594c09800e6f0de;hpb=e452a933f9c53fd58db9d932afd15319129dd988;p=tinc diff --git a/src/process.c b/src/process.c index de9c71d6..a7d0f260 100644 --- a/src/process.c +++ b/src/process.c @@ -26,6 +26,7 @@ #include "device.h" #include "edge.h" #include "logger.h" +#include "net.h" #include "node.h" #include "process.h" #include "subnet.h" @@ -40,11 +41,6 @@ extern char *identname; extern char **g_argv; extern bool use_logfile; -static void memory_full(int size) { - logger(LOG_ERR, "Memory exhausted (couldn't allocate %d bytes), exitting.", size); - exit(1); -} - /* Some functions the less gifted operating systems might lack... */ #ifdef HAVE_MINGW @@ -57,7 +53,7 @@ static SC_HANDLE service = NULL; static SERVICE_STATUS status = {0}; static SERVICE_STATUS_HANDLE statushandle = 0; -bool install_service(void) { +static bool install_service(void) { char command[4096] = "\""; char **argp; bool space; @@ -117,35 +113,6 @@ bool install_service(void) { return true; } -bool remove_service(void) { - manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); - if(!manager) { - logger(LOG_ERR, "Could not open service manager: %s", winerror(GetLastError())); - return false; - } - - service = OpenService(manager, identname, SERVICE_ALL_ACCESS); - - if(!service) { - logger(LOG_ERR, "Could not open %s service: %s", identname, winerror(GetLastError())); - return false; - } - - if(!ControlService(service, SERVICE_CONTROL_STOP, &status)) - logger(LOG_ERR, "Could not stop %s service: %s", identname, winerror(GetLastError())); - else - logger(LOG_INFO, "%s service stopped", identname); - - if(!DeleteService(service)) { - logger(LOG_ERR, "Could not remove %s service: %s", identname, winerror(GetLastError())); - return false; - } - - logger(LOG_INFO, "%s service removed", identname); - - return true; -} - DWORD WINAPI controlhandler(DWORD request, DWORD type, LPVOID boe, LPVOID bah) { switch(request) { case SERVICE_CONTROL_INTERROGATE: @@ -227,9 +194,12 @@ bool init_service(void) { Detach from current terminal */ bool detach(void) { - setup_signals(); - #ifndef HAVE_MINGW + signal(SIGPIPE, SIG_IGN); + signal(SIGUSR1, SIG_IGN); + signal(SIGUSR2, SIG_IGN); + signal(SIGWINCH, SIG_IGN); + closelogger(); #endif @@ -251,8 +221,6 @@ bool detach(void) { logger(LOG_NOTICE, "tincd %s (%s %s) starting, debug level %d", VERSION, __DATE__, __TIME__, debug_level); - xalloc_fail_func = memory_full; - return true; } @@ -331,40 +299,3 @@ bool execute_script(const char *name, char **envp) { #endif return true; } - - -/* - Signal handlers. -*/ - -#ifndef HAVE_MINGW -static RETSIGTYPE ignore_signal_handler(int a) { - ifdebug(SCARY_THINGS) logger(LOG_DEBUG, "Ignored signal %d (%s)", a, strsignal(a)); -} - -static struct { - int signal; - void (*handler)(int); -} sighandlers[] = { - {SIGPIPE, ignore_signal_handler}, - {SIGCHLD, ignore_signal_handler}, - {0, NULL} -}; -#endif - -void setup_signals(void) { -#ifndef HAVE_MINGW - int i; - struct sigaction act = {NULL}; - - sigemptyset(&act.sa_mask); - - for(i = 0; sighandlers[i].signal; i++) { - act.sa_handler = sighandlers[i].handler; - if(sigaction(sighandlers[i].signal, &act, NULL) < 0) - fprintf(stderr, "Installing signal handler for signal %d (%s) failed: %s\n", - sighandlers[i].signal, strsignal(sighandlers[i].signal), - strerror(errno)); - } -#endif -}