/*
process.c -- process management functions
Copyright (C) 1999-2005 Ivo Timmermans,
/*
process.c -- process management functions
Copyright (C) 1999-2005 Ivo Timmermans,
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
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
- $Id$
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- logger(LOG_ERR, _("Memory exhausted (couldn't allocate %d bytes), exitting."), size);
- cp_trace();
+ logger(LOG_ERR, "Memory exhausted (couldn't allocate %d bytes), exitting.", size);
command, NULL, NULL, NULL, NULL, NULL);
if(!service) {
command, NULL, NULL, NULL, NULL, NULL);
if(!service) {
- logger(LOG_ERR, _("Could not create %s service: %s"), identname, winerror(GetLastError()));
- return false;
+ DWORD lasterror = GetLastError();
+ logger(LOG_ERR, "Could not create %s service: %s", identname, winerror(lasterror));
+ if(lasterror != ERROR_SERVICE_EXISTS)
+ return false;
- ChangeServiceConfig2(service, SERVICE_CONFIG_DESCRIPTION, &description);
-
- logger(LOG_INFO, _("%s service installed"), identname);
+ if(service) {
+ ChangeServiceConfig2(service, SERVICE_CONFIG_DESCRIPTION, &description);
+ logger(LOG_INFO, "%s service installed", identname);
+ } else {
+ service = OpenService(manager, identname, SERVICE_ALL_ACCESS);
+ }
- logger(LOG_WARNING, _("Could not start %s service: %s"), identname, winerror(GetLastError()));
+ logger(LOG_WARNING, "Could not start %s service: %s", identname, winerror(GetLastError()));
bool remove_service(void) {
manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(!manager) {
bool remove_service(void) {
manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if(!manager) {
- logger(LOG_ERR, _("Could not open %s service: %s"), identname, winerror(GetLastError()));
+ logger(LOG_ERR, "Could not open %s service: %s", identname, winerror(GetLastError()));
- logger(LOG_ERR, _("Could not stop %s service: %s"), identname, winerror(GetLastError()));
+ logger(LOG_ERR, "Could not stop %s service: %s", identname, winerror(GetLastError()));
- logger(LOG_ERR, _("Could not remove %s service: %s"), identname, winerror(GetLastError()));
+ logger(LOG_ERR, "Could not remove %s service: %s", identname, winerror(GetLastError()));
SetServiceStatus(statushandle, &status);
return NO_ERROR;
case SERVICE_CONTROL_STOP:
SetServiceStatus(statushandle, &status);
return NO_ERROR;
case SERVICE_CONTROL_STOP:
status.dwWaitHint = 30000;
status.dwCurrentState = SERVICE_STOP_PENDING;
SetServiceStatus(statushandle, &status);
status.dwWaitHint = 30000;
status.dwCurrentState = SERVICE_STOP_PENDING;
SetServiceStatus(statushandle, &status);
- logger(LOG_ERR, _("System call `%s' failed: %s"), "RegisterServiceCtrlHandlerEx", winerror(GetLastError()));
+ logger(LOG_ERR, "System call `%s' failed: %s", "RegisterServiceCtrlHandlerEx", winerror(GetLastError()));
- logger(LOG_ERR, _("System call `%s' failed: %s"), "StartServiceCtrlDispatcher", winerror(GetLastError()));
+ logger(LOG_ERR, "System call `%s' failed: %s", "StartServiceCtrlDispatcher", winerror(GetLastError()));
- logger(LOG_NOTICE, _("tincd %s (%s %s) starting, debug level %d"),
+ logger(LOG_NOTICE, "tincd %s (%s %s) starting, debug level %d",
VERSION, __DATE__, __TIME__, debug_level);
xalloc_fail_func = memory_full;
VERSION, __DATE__, __TIME__, debug_level);
xalloc_fail_func = memory_full;
- len = asprintf(&scriptname, "\"%s/%s\"", confbase, name);
+ len = xasprintf(&scriptname, "\"%s/%s\"", confbase, name);
- len = asprintf(&scriptname, "\"%s/%s.bat\"", confbase, name);
+ len = xasprintf(&scriptname, "\"%s/%s.bat\"", confbase, name);
for(i = 0; envp[i]; i++) {
char *e = strchr(envp[i], '=');
if(e) {
for(i = 0; envp[i]; i++) {
char *e = strchr(envp[i], '=');
if(e) {
name, WEXITSTATUS(status));
return false;
}
} else if(WIFSIGNALED(status)) { /* Child was killed by a signal */
name, WEXITSTATUS(status));
return false;
}
} else if(WIFSIGNALED(status)) { /* Child was killed by a signal */
name, WTERMSIG(status), strsignal(WTERMSIG(status)));
return false;
} else { /* Something strange happened */
name, WTERMSIG(status), strsignal(WTERMSIG(status)));
return false;
} else { /* Something strange happened */
- logger(LOG_ERR, _("System call `%s' failed: %s"), "system", strerror(errno));
+ logger(LOG_ERR, "System call `%s' failed: %s", "system", strerror(errno));
- logger(LOG_ERR, _("Got another fatal signal %d (%s): not restarting."), a,
+ logger(LOG_ERR, "Got another fatal signal %d (%s): not restarting.", a,
- logger(LOG_ERR, _("Got fatal signal %d (%s)"), a, strsignal(a));
- cp_trace();
+ logger(LOG_ERR, "Got fatal signal %d (%s)", a, strsignal(a));
- logger(LOG_WARNING, _("Got unexpected signal %d (%s)"), a, strsignal(a));
- cp_trace();
+ logger(LOG_WARNING, "Got unexpected signal %d (%s)", a, strsignal(a));
- ifdebug(SCARY_THINGS) logger(LOG_DEBUG, _("Ignored signal %d (%s)"), a, strsignal(a));
+ ifdebug(SCARY_THINGS) logger(LOG_DEBUG, "Ignored signal %d (%s)", a, strsignal(a));
+ {SIGTERM, sigterm_handler},
+ {SIGQUIT, sigterm_handler},
+ {SIGINT, sigterm_handler},
{SIGSEGV, fatal_signal_handler},
{SIGBUS, fatal_signal_handler},
{SIGILL, fatal_signal_handler},
{SIGPIPE, ignore_signal_handler},
{SIGCHLD, ignore_signal_handler},
{SIGSEGV, fatal_signal_handler},
{SIGBUS, fatal_signal_handler},
{SIGILL, fatal_signal_handler},
{SIGPIPE, ignore_signal_handler},
{SIGCHLD, ignore_signal_handler},
for(i = 0; sighandlers[i].signal; i++) {
act.sa_handler = sighandlers[i].handler;
if(sigaction(sighandlers[i].signal, &act, NULL) < 0)
for(i = 0; sighandlers[i].signal; i++) {
act.sa_handler = sighandlers[i].handler;
if(sigaction(sighandlers[i].signal, &act, NULL) < 0)