#include "modules/crypto/serv_crypto.h" /* Needed for init_ssl, client_write_ssl, client_read_ssl, destruct_ssl */
#include "housekeeping.h"
#include "context.h"
+
/*
* Signal handler to shut down the server.
*/
volatile int restart_server = 0;
volatile int running_as_daemon = 0;
+
static RETSIGTYPE signal_cleanup(int signum) {
syslog(LOG_DEBUG, "sysdep: caught signal %d; shutting down.", signum);
exit_signal = signum;
server_shutting_down = 1;
}
+
static RETSIGTYPE signal_exit(int signum) {
exit(1);
}
-
/*
* Some initialization stuff...
*/
* session to which the calling thread is currently bound.
*/
if (pthread_key_create(&MyConKey, NULL) != 0) {
- syslog(LOG_CRIT, "sysdep: can't create TSD key: %s", strerror(errno));
+ syslog(LOG_CRIT, "sysdep: can't create TSD key: %m");
}
/*
{
ip_version = 6;
if (inet_pton(AF_INET6, ip_addr, &sin6.sin6_addr) <= 0) {
- snprintf(errormessage, SIZ,
- "Error binding to [%s] : %s", ip_addr, strerror(errno)
- );
+ snprintf(errormessage, SIZ, "Error binding to [%s] : %s", ip_addr, strerror(errno));
syslog(LOG_ALERT, "tcpserver: %s", errormessage);
return (-1);
}
i = unlink(sockpath);
if ((i != 0) && (errno != ENOENT)) {
snprintf(errormessage, SIZ, "can't unlink %s: %s", sockpath, strerror(errno));
- syslog(LOG_EMERG, "udsserver: %s", errormessage);
+ syslog(LOG_ERR, "udsserver: %s", errormessage);
return(-1);
}
s = socket(AF_UNIX, SOCK_STREAM, 0);
if (s < 0) {
snprintf(errormessage, SIZ, "can't create a socket: %s", strerror(errno));
- syslog(LOG_EMERG, "udsserver: %s", errormessage);
+ syslog(LOG_ERR, "udsserver: %s", errormessage);
return(-1);
}
if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
snprintf(errormessage, SIZ, "can't bind: %s", strerror(errno));
- syslog(LOG_EMERG, "udsserver: %s", errormessage);
+ syslog(LOG_ERR, "udsserver: %s", errormessage);
return(-1);
}
/* set to nonblock - we need this for some obscure situations */
if (fcntl(s, F_SETFL, O_NONBLOCK) < 0) {
snprintf(errormessage, SIZ, "can't set socket to non-blocking: %s", strerror(errno));
- syslog(LOG_EMERG, "udsserver: %s", errormessage);
+ syslog(LOG_ERR, "udsserver: %s", errormessage);
close(s);
return(-1);
}
if (listen(s, actual_queue_len) < 0) {
snprintf(errormessage, SIZ, "can't listen: %s", strerror(errno));
- syslog(LOG_EMERG, "udsserver: %s", errormessage);
+ syslog(LOG_ERR, "udsserver: %s", errormessage);
return(-1);
}
FlushStrBuf(CCC->ReadBuf);
CCC->RecvBuf->ReadWritePointer = NULL;
-
}
*/
fd = fopen(fn, "a+");
if (fd == NULL) {
- syslog(LOG_ERR, "%s: %s", fn, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", fn);
cit_backtrace();
exit(1);
}
continue;
}
} else {
- syslog(LOG_ERR,
- "sysdep: client_write(%d bytes) select failed: %s (%d)",
- nbytes - bytes_written,
- strerror(errno), errno
- );
+ syslog(LOG_ERR, "sysdep: client_write(%d bytes) select failed: %m", nbytes - bytes_written);
cit_backtrace();
client_close();
Ctx->kill_me = KILLME_SELECT_FAILED;
retval = write(Ctx->client_socket, &buf[bytes_written], nbytes - bytes_written);
if (retval < 1) {
- syslog(LOG_ERR,
- "sysdep: client_write(%d bytes) failed: %s (%d)",
- nbytes - bytes_written,
- strerror(errno), errno
- );
+ syslog(LOG_ERR, "sysdep: client_write(%d bytes) failed: %m", nbytes - bytes_written);
cit_backtrace();
client_close();
Ctx->kill_me = KILLME_WRITE_FAILED;
fd = fopen(fn, "a+");
if (fd == NULL) {
- syslog(LOG_ERR, "%s: %s", fn, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", fn);
cit_backtrace();
exit(1);
}
fd = fopen(fn, "a+");
if (fd == NULL) {
- syslog(LOG_ERR, "%s: %s", fn, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", fn);
cit_backtrace();
exit(1);
}
fd = fopen(fn, "a+");
if (fd == NULL) {
- syslog(LOG_ERR, "%s: %s", fn, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", fn);
cit_backtrace();
exit(1);
}
fd = fopen(fn, "a+");
if (fd == NULL) {
- syslog(LOG_ERR, "%s: %s", fn, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", fn);
cit_backtrace();
exit(1);
}
fd = fopen(fn, "a+");
if (fd == NULL) {
- syslog(LOG_ERR, "%s: %s", fn, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", fn);
cit_backtrace();
exit(1);
}
fd = fopen(fn, "a+");
if (fd == NULL) {
- syslog(LOG_ERR, "%s: %s", fn, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", fn);
cit_backtrace();
exit(1);
}
fd = fopen(fn, "a+");
if (fd == NULL) {
- syslog(LOG_ERR, "%s: %s", fn, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", fn);
cit_backtrace();
exit(1);
}
* to be reused for other files.
*/
if (chdir(ctdl_run_dir) != 0) {
- syslog(LOG_ERR, "%s: %s", ctdl_run_dir, strerror(errno));
+ syslog(LOG_ERR, "%s: %m", ctdl_run_dir);
}
child = fork();
(freopen("/dev/null", "w", stdout) != stdout) ||
(freopen("/dev/null", "w", stderr) != stderr)
) {
- syslog(LOG_ERR, "sysdep: unable to reopen stdio: %s", strerror(errno));
+ syslog(LOG_ERR, "sysdep: unable to reopen stdio: %m");
}
do {
struct timeval tv;
struct ServiceFunctionHook *serviceptr;
-
-
/* Next, add all of the client sockets. */
begin_critical_section(S_SESSION_TABLE);
for (ptr = ContextList; ptr != NULL; ptr = ptr->next) {
if ( (ptr->state == CON_IDLE)
&& (ptr->kill_me == 0)
&& (ptr->client_socket > 0)
- ) {
+ ) {
FD_SET(ptr->client_socket, &readfds);
if (ptr->client_socket > highest)
highest = ptr->client_socket;
- if ((select(highest + 1, &readfds, NULL, NULL, &tv) < 0) &&
- (errno == EBADF))
+ if ((select(highest + 1, &readfds, NULL, NULL, &tv) < 0) && (errno == EBADF))
{
/* Gotcha! */
syslog(LOG_ERR,
ptr->client_socket,
ptr->is_local_socket,
ptr->curr_user,
- ptr->cs_host,ptr->cs_addr);
-
+ ptr->cs_host,ptr->cs_addr
+ );
ptr->kill_me = 1;
ptr->client_socket = -1;
break;
}
}
-
}
end_critical_section(S_SESSION_TABLE);
-
/* First, add the various master sockets to the fdset. */
for (serviceptr = ServiceHookTable; serviceptr != NULL; serviceptr = serviceptr->next ) {
break;
}
}
-
-
}
-const char *WorkerLogStr = "W";
+
/*
* This loop just keeps going and going and going...
*/
while (!server_shutting_down) {
- /* make doubly sure we're not holding any stale db handles
- * which might cause a deadlock.
- */
+ /* make doubly sure we're not holding any stale db handles * which might cause a deadlock */
cdb_check_handles();
do_select: force_purge = 0;
bind_me = NULL; /* Which session shall we handle? */
*/
if (retval < 0) {
if (errno == EBADF) {
- syslog(LOG_ERR, "sysdep: select() failed: (%s)", strerror(errno));
+ syslog(LOG_ERR, "sysdep: select() failed: %m");
HuntBadSession();
goto do_select;
}
if (errno != EINTR) {
- syslog(LOG_ERR, "sysdep: exiting (%s)", strerror(errno));
+ syslog(LOG_ERR, "sysdep: exiting: %m");
server_shutting_down = 1;
continue;
} else {
}
}
- /* Next, check to see if it's a new client connecting * on a master socket. */
+ /* Next, check to see if it's a new client connecting on a master socket. */
else if ((retval > 0) && (!server_shutting_down)) for (serviceptr = ServiceHookTable; serviceptr != NULL; serviceptr = serviceptr->next) {
* operations barf on FreeBSD. Not a fatal error.
*/
if (fcntl(ssock, F_SETFL, 0) < 0) {
- syslog(LOG_ERR, "sysdep: Can't set socket to blocking: %s", strerror(errno));
+ syslog(LOG_ERR, "sysdep: Can't set socket to blocking: %m");
}
/* New context will be created already
CC->input_waiting = 0;
}
- /* If there are asynchronous messages waiting and the
- * client supports it, do those now */
- if ((CC->is_async) && (CC->async_waiting)
- && (CC->h_async_function != NULL)) {
+ /* If there are asynchronous messages waiting and the client supports it, do those now */
+ if ((CC->is_async) && (CC->async_waiting) && (CC->h_async_function != NULL)) {
CC->h_async_function();
CC->async_waiting = 0;
}
-
+
force_purge = CC->kill_me;
become_session(NULL);
bind_me->state = CON_IDLE;
}
-
/*
* SyslogFacility()
* Translate text facility name to syslog.h defined value.