projects
/
tinc
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Update documentation for Mac OS X.
[tinc]
/
src
/
process.c
diff --git
a/src/process.c
b/src/process.c
index
b76e81c
..
51c9e2a
100644
(file)
--- a/
src/process.c
+++ b/
src/process.c
@@
-1,7
+1,7
@@
/*
process.c -- process management functions
Copyright (C) 1999-2005 Ivo Timmermans,
/*
process.c -- process management functions
Copyright (C) 1999-2005 Ivo Timmermans,
- 2000-201
1
Guus Sliepen <guus@tinc-vpn.org>
+ 2000-201
3
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
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
@@
-47,8
+47,6
@@
extern bool use_logfile;
static sigset_t emptysigset;
#endif
static sigset_t emptysigset;
#endif
-static int saved_debug_level = -1;
-
static void memory_full(int size) {
logger(LOG_ERR, "Memory exhausted (couldn't allocate %d bytes), exitting.", size);
exit(1);
static void memory_full(int size) {
logger(LOG_ERR, "Memory exhausted (couldn't allocate %d bytes), exitting.", size);
exit(1);
@@
-167,7
+165,7
@@
DWORD WINAPI controlhandler(DWORD request, DWORD type, LPVOID boe, LPVOID bah) {
logger(LOG_NOTICE, "Got %s request", "SERVICE_CONTROL_SHUTDOWN");
break;
default:
logger(LOG_NOTICE, "Got %s request", "SERVICE_CONTROL_SHUTDOWN");
break;
default:
- logger(LOG_WARNING, "Got unexpected request %d", request);
+ logger(LOG_WARNING, "Got unexpected request %d",
(int)
request);
return ERROR_CALL_NOT_IMPLEMENTED;
}
return ERROR_CALL_NOT_IMPLEMENTED;
}
@@
-187,10
+185,8
@@
DWORD WINAPI controlhandler(DWORD request, DWORD type, LPVOID boe, LPVOID bah) {
}
VOID WINAPI run_service(DWORD argc, LPTSTR* argv) {
}
VOID WINAPI run_service(DWORD argc, LPTSTR* argv) {
- int err = 1;
extern int main2(int argc, char **argv);
extern int main2(int argc, char **argv);
-
status.dwServiceType = SERVICE_WIN32;
status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
status.dwWin32ExitCode = 0;
status.dwServiceType = SERVICE_WIN32;
status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
status.dwWin32ExitCode = 0;
@@
-201,7
+197,6
@@
VOID WINAPI run_service(DWORD argc, LPTSTR* argv) {
if (!statushandle) {
logger(LOG_ERR, "System call `%s' failed: %s", "RegisterServiceCtrlHandlerEx", winerror(GetLastError()));
if (!statushandle) {
logger(LOG_ERR, "System call `%s' failed: %s", "RegisterServiceCtrlHandlerEx", winerror(GetLastError()));
- err = 1;
} else {
status.dwWaitHint = 30000;
status.dwCurrentState = SERVICE_START_PENDING;
} else {
status.dwWaitHint = 30000;
status.dwCurrentState = SERVICE_START_PENDING;
@@
-211,11
+206,10
@@
VOID WINAPI run_service(DWORD argc, LPTSTR* argv) {
status.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(statushandle, &status);
status.dwCurrentState = SERVICE_RUNNING;
SetServiceStatus(statushandle, &status);
-
err =
main2(argc, argv);
+ main2(argc, argv);
status.dwWaitHint = 0;
status.dwCurrentState = SERVICE_STOPPED;
status.dwWaitHint = 0;
status.dwCurrentState = SERVICE_STOPPED;
- //status.dwWin32ExitCode = err;
SetServiceStatus(statushandle, &status);
}
SetServiceStatus(statushandle, &status);
}
@@
-260,7
+254,7
@@
static bool write_pidfile(void) {
/* if it's locked, write-protected, or whatever */
if(!write_pid(pidfilename)) {
/* if it's locked, write-protected, or whatever */
if(!write_pid(pidfilename)) {
- fprintf(stderr, "Could write pid file %s: %s\n", pidfilename, strerror(errno));
+ fprintf(stderr, "Could
n't
write pid file %s: %s\n", pidfilename, strerror(errno));
return false;
}
return false;
}
@@
-355,15
+349,19
@@
bool detach(void) {
bool execute_script(const char *name, char **envp) {
#ifdef HAVE_SYSTEM
bool execute_script(const char *name, char **envp) {
#ifdef HAVE_SYSTEM
- int status, len;
char *scriptname;
char *scriptname;
- int i;
char *interpreter = NULL;
char *interpreter = NULL;
+ config_t *cfg_interpreter;
+ int status, len, i;
+ cfg_interpreter = lookup_config(config_tree, "ScriptsInterpreter");
#ifndef HAVE_MINGW
len = xasprintf(&scriptname, "\"%s/%s\"", confbase, name);
#else
#ifndef HAVE_MINGW
len = xasprintf(&scriptname, "\"%s/%s\"", confbase, name);
#else
- len = xasprintf(&scriptname, "\"%s/%s.bat\"", confbase, name);
+ if(cfg_interpreter)
+ len = xasprintf(&scriptname, "\"%s/%s\"", confbase, name);
+ else
+ len = xasprintf(&scriptname, "\"%s/%s.bat\"", confbase, name);
#endif
if(len < 0)
return false;
#endif
if(len < 0)
return false;
@@
-371,14
+369,13
@@
bool execute_script(const char *name, char **envp) {
scriptname[len - 1] = '\0';
/* First check if there is a script */
scriptname[len - 1] = '\0';
/* First check if there is a script */
-
if(access(scriptname + 1, F_OK)) {
free(scriptname);
return true;
}
// Custom scripts interpreter
if(access(scriptname + 1, F_OK)) {
free(scriptname);
return true;
}
// Custom scripts interpreter
- if(get_config_string(
lookup_config(config_tree, "ScriptsInterpreter")
, &interpreter)) {
+ if(get_config_string(
cfg_interpreter
, &interpreter)) {
// Force custom scripts interpreter allowing execution of scripts on android without execution flag (such as on /sdcard)
free(scriptname);
len = xasprintf(&scriptname, "%s \"%s/%s\"", interpreter, confbase, name);
// Force custom scripts interpreter allowing execution of scripts on android without execution flag (such as on /sdcard)
free(scriptname);
len = xasprintf(&scriptname, "%s \"%s/%s\"", interpreter, confbase, name);
@@
-413,8
+410,8
@@
bool execute_script(const char *name, char **envp) {
}
}
}
}
-#ifdef WEXITSTATUS
if(status != -1) {
if(status != -1) {
+#ifdef WEXITSTATUS
if(WIFEXITED(status)) { /* Child exited by itself */
if(WEXITSTATUS(status)) {
logger(LOG_ERR, "Script %s exited with non-zero status %d",
if(WIFEXITED(status)) { /* Child exited by itself */
if(WEXITSTATUS(status)) {
logger(LOG_ERR, "Script %s exited with non-zero status %d",
@@
-429,11
+426,11
@@
bool execute_script(const char *name, char **envp) {
logger(LOG_ERR, "Script %s terminated abnormally", name);
return false;
}
logger(LOG_ERR, "Script %s terminated abnormally", name);
return false;
}
+#endif
} else {
logger(LOG_ERR, "System call `%s' failed: %s", "system", strerror(errno));
return false;
}
} else {
logger(LOG_ERR, "System call `%s' failed: %s", "system", strerror(errno));
return false;
}
-#endif
#endif
return true;
}
#endif
return true;
}
@@
-494,6
+491,8
@@
static RETSIGTYPE sighup_handler(int a) {
}
static RETSIGTYPE sigint_handler(int a) {
}
static RETSIGTYPE sigint_handler(int a) {
+ static int saved_debug_level = -1;
+
logger(LOG_NOTICE, "Got %s signal", "INT");
if(saved_debug_level != -1) {
logger(LOG_NOTICE, "Got %s signal", "INT");
if(saved_debug_level != -1) {