#include <time.h>
#include "genstamp.h"
-
static char *months[] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
-
/*
* Supplied with a unix timestamp, generate an RFC822-compliant textual
* time and date stamp.
int illegal_non_rfc2047_encoding = 0;
/* Sometimes, badly formed messages contain strings which were simply
- * written out directly in some foreign character set instead of
- * using RFC2047 encoding. This is illegal but we will attempt to
- * handle it anyway by converting from a user-specified default
- * charset to UTF-8 if we see any nonprintable characters.
+ * written out directly in some foreign character set instead of
+ * using RFC2047 encoding. This is illegal but we will attempt to
+ * handle it anyway by converting from a user-specified default
+ * charset to UTF-8 if we see any nonprintable characters.
*/
len = strlen(buf);
for (i=0; i<len; ++i) {
/*
* Functions which handle hostname/address lookups and resolution
*
- * Copyright (c) 1987-2011 by the citadel.org team
+ * Copyright (c) 1987-2017 by the citadel.org team
*
* This program is open source software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 3.
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
-
#include <libcitadel.h>
-
#include "context.h"
#ifdef HAVE_RESOLV_H
#include <arpa/nameser.h>
return(0);
}
- if( len > PACKETSZ )
+ if (len > PACKETSZ)
{
answer = malloc(len);
need_to_free_answer = 1;
len = res_query(domain, C_IN, T_A, answer, len);
if( len == -1 ) {
if (txtbuf != NULL) {
- snprintf(txtbuf, txtbufsize,
- "Message rejected due to known spammer source IP address");
+ snprintf(txtbuf, txtbufsize, "Message rejected due to known spammer source IP address");
}
if (need_to_free_answer) free(answer);
return(1);
}
if (server_shutting_down)
{
- if (txtbuf != NULL)
+ if (txtbuf != NULL) {
snprintf(txtbuf, txtbufsize, "System shutting down");
+ }
if (need_to_free_answer) free(answer);
return (1);
}
result = (char *) malloc(RESULT_SIZE);
- result[ 0 ] = '\0';
-
+ result[0] = '\0';
/* Make another DNS query for textual data; this shouldn't
* be a performance hit, since it'll now be cached at the
if (len ==(-1))
{
if (txtbuf != NULL) {
- snprintf(txtbuf, txtbufsize,
- "Message rejected due to known spammer source IP address");
+ snprintf(txtbuf, txtbufsize, "Message rejected due to known spammer source IP address");
}
if (need_to_free_answer) free(answer);
free(result);
for (i=0; i<8; ++i) {
char tokbuf[5];
extract_token(tokbuf, workbuf, i, ':', sizeof tokbuf);
-
memcpy(&tbuf[ (i*4) + (4-strlen(tokbuf)) ], tokbuf, strlen(tokbuf) );
}
- if (strlen(tbuf) != 32)
+ if (strlen(tbuf) != 32) {
goto finish_rbl;
+ }
/* now reverse it and add dots */
strcpy(workbuf, tbuf);
#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...
*/
FlushStrBuf(CCC->ReadBuf);
CCC->RecvBuf->ReadWritePointer = NULL;
-
}
*/
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? */
}
}
- /* 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) {
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.