CHECK_FUNCTION_EXISTS(wait4 HAVE_WAIT4)
CHECK_FUNCTION_EXISTS(waitpid HAVE_WAITPID)
CHECK_FUNCTION_EXISTS(flock HAVE_FLOCK)
+CHECK_FUNCTION_EXISTS(tanhl HAVE_TANHL)
CHECK_SYMBOL_EXISTS(PATH_MAX limits.h HAVE_PATH_MAX)
CHECK_SYMBOL_EXISTS(MAXPATHLEN sys/param.h HAVE_MAXPATHLEN)
#cmakedefine HAVE_FLOCK 1
+#cmakedefine HAVE_TANHL 1
+
#cmakedefine HAVE_SA_SIGINFO 1
#cmakedefine DEBUG_MODE 1
return score;
}
else {
+#ifdef HAVE_TANHL
return max * tanhl (score / max);
+#else
+ /*
+ * As some implementations of libm does not support tanhl, try to use
+ * tanh
+ */
+ return max * tanh ((double) (score / max));
+#endif
}
return score;
lua_file = basename (tmp2);
if (lua_dir && lua_file) {
cur_dir = g_malloc (PATH_MAX);
- getcwd (cur_dir, PATH_MAX);
- if (chdir (lua_dir) != -1) {
+ if (getcwd (cur_dir, PATH_MAX) != NULL && chdir (lua_dir) != -1) {
if (luaL_dofile (L, lua_file) != 0) {
msg_err ("cannot load lua file %s: %s", val, lua_tostring (L, -1));
- chdir (cur_dir);
+ if (chdir (cur_dir) == -1) {
+ msg_err ("cannot chdir to %s: %s", cur_dir, strerror (errno));;
+ }
g_free (cur_dir);
g_free (tmp1);
g_free (tmp2);
}
else {
msg_err ("cannot chdir to %s: %s", lua_dir, strerror (errno));;
- chdir (cur_dir);
+ if (chdir (cur_dir) == -1) {
+ msg_err ("cannot chdir to %s: %s", cur_dir, strerror (errno));;
+ }
g_free (cur_dir);
g_free (tmp1);
g_free (tmp2);
return FALSE;
}
- chdir (cur_dir);
+ if (chdir (cur_dir) == -1) {
+ msg_err ("cannot chdir to %s: %s", cur_dir, strerror (errno));;
+ }
g_free (cur_dir);
g_free (tmp1);
g_free (tmp2);
cfg->script_modules = g_list_prepend (cfg->script_modules, cur);
}
globfree (&globbuf);
+ g_free (pattern);
}
else {
msg_err ("glob failed: %s", strerror (errno));
+ g_free (pattern);
return FALSE;
}
}
char *value;
int nodes, minnodes, iterations = 0;
struct statfile *st;
- stat_file_t *sel;
+ stat_file_t *sel = NULL;
long double res = 0., max = 0.;
GList *cur;
SET(EVDNSSRC evdns.c)
ADD_LIBRARY(rspamd_evdns STATIC ${EVDNSSRC})
-SET_TARGET_PROPERTIES(rspamd_evdns PROPERTIES COMPILE_FLAGS "-DRSPAMD_LIB")
+SET_TARGET_PROPERTIES(rspamd_evdns PROPERTIES COMPILE_FLAGS "-fno-strict-aliasing -DRSPAMD_LIB")
return FALSE;
}
#ifdef GMIME24
+ num = internet_address_list_length ((InternetAddressList *)ia);
cur = ia;
for (i = 0; i < num; i ++) {
- addr = internet_address_list_get_address (cur, i);
+ addr = internet_address_list_get_address ((InternetAddressList *)cur, i);
current.addr = (char *)internet_address_get_name (addr);
if (previous.addr != NULL) {
if (g_ascii_strcasecmp (current.addr, previous.addr) < 0) {
accept_socket (int fd, short what, void *arg)
{
struct rspamd_worker *worker = (struct rspamd_worker *)arg;
- struct sockaddr_storage ss;
- struct sockaddr_in *sin;
+ union sa_union su;
struct worker_task *new_task;
struct rspamd_lmtp_proto *lmtp;
- socklen_t addrlen = sizeof (ss);
+ socklen_t addrlen = sizeof (su.ss);
int nfd;
- if ((nfd = accept_from_socket (fd, (struct sockaddr *)&ss, &addrlen)) == -1) {
+ if ((nfd = accept_from_socket (fd, (struct sockaddr *)&su.ss, &addrlen)) == -1) {
msg_warn ("accept failed: %s", strerror (errno));
return;
}
new_task = construct_task (worker);
- if (ss.ss_family == AF_UNIX) {
+ if (su.ss.ss_family == AF_UNIX) {
msg_info ("accepted connection from unix socket");
new_task->client_addr.s_addr = INADDR_NONE;
}
- else if (ss.ss_family == AF_INET) {
- sin = (struct sockaddr_in *)&ss;
- msg_info ("accepted connection from %s port %d", inet_ntoa (sin->sin_addr), ntohs (sin->sin_port));
- memcpy (&new_task->client_addr, &sin->sin_addr, sizeof (struct in_addr));
+ else if (su.ss.ss_family == AF_INET) {
+ msg_info ("accepted connection from %s port %d", inet_ntoa (su.s4.sin_addr), ntohs (su.s4.sin_port));
+ memcpy (&new_task->client_addr, &su.s4.sin_addr, sizeof (struct in_addr));
}
new_task->sock = nfd;
}
else if (errno == EFAULT || errno == EINVAL || errno == EFBIG || errno == ENOSPC) {
/* Rare case */
- (void)write (rspamd_log->fd, errmsg, r);
+ if (write (rspamd_log->fd, errmsg, r) == -1) {
+ /* Don't know what to do */
+ exit (EXIT_FAILURE);
+ }
}
else if (errno == EPIPE) {
/* We write to some pipe and it disappears, disable logging */
};
+/**
+ * Union that would be used for storing sockaddrs
+ */
+union sa_union {
+ struct sockaddr_storage ss;
+ struct sockaddr_in s4;
+ struct sockaddr_in6 s6;
+};
/**
* Control session object
iov[1].iov_len = ctx->param->bufsize - ctx->param->bufpos;
iov[2].iov_base = CRLF;
iov[2].iov_len = sizeof (CRLF) - 1;
- writev (ctx->sock, iov, 3);
+ if (writev (ctx->sock, iov, 3) == -1) {
+ memc_log (ctx, __LINE__, "memc_write: writev failed: %s", strerror (errno));
+ }
}
event_del (&ctx->mem_ev);
event_set (&ctx->mem_ev, ctx->sock, EV_READ | EV_PERSIST | EV_TIMEOUT, socket_callback, (void *)ctx);
FILE *f;
char buf[BUFSIZ];
struct in_addr ina;
- int mask, value;
+ int mask = 0, value = 0;
f = fopen (filename, "r");
if (f != NULL) {
char *c = ip_buf, *err_str;
struct in_addr ina;
int state = 0, next_state = 0, dots = 0;
- int16_t value;
+ int16_t value = 0;
uint32_t mask;
- enum ipmark_command cmd;
+ enum ipmark_command cmd = COMMAND_ADD;
/* Parse input line */
p = line;
gboolean
check_metric_settings (struct worker_task * task, struct metric * metric, double *score, double *rscore)
{
- struct rspamd_settings *us, *ds;
+ struct rspamd_settings *us = NULL, *ds = NULL;
double *sc, *rs;
*rscore = DEFAULT_REJECT_SCORE;
gboolean
check_factor_settings (struct worker_task * task, const char *symbol, double *factor)
{
- struct rspamd_settings *us, *ds;
+ struct rspamd_settings *us = NULL, *ds = NULL;
double *fc;
if (check_setting (task, &us, &ds)) {
gboolean
check_want_spam (struct worker_task * task)
{
- struct rspamd_settings *us, *ds;
+ struct rspamd_settings *us = NULL, *ds = NULL;
if (check_setting (task, &us, &ds)) {
if (us != NULL) {
accept_socket (int fd, short what, void *arg)
{
struct rspamd_worker *worker = (struct rspamd_worker *)arg;
- struct sockaddr_storage ss;
- struct sockaddr_in *sin;
+ union sa_union su;
struct smtp_session *session;
- socklen_t addrlen = sizeof (ss);
+ socklen_t addrlen = sizeof (su.ss);
int nfd;
- if ((nfd = accept_from_socket (fd, (struct sockaddr *)&ss, &addrlen)) == -1) {
+ if ((nfd = accept_from_socket (fd, (struct sockaddr *)&su.ss, &addrlen)) == -1) {
msg_warn ("accept failed: %s", strerror (errno));
return;
}
session = g_malloc (sizeof (struct smtp_session));
session->pool = memory_pool_new (memory_pool_get_size ());
- if (ss.ss_family == AF_UNIX) {
+ if (su.ss.ss_family == AF_UNIX) {
msg_info ("accepted connection from unix socket");
session->client_addr.s_addr = INADDR_NONE;
}
- else if (ss.ss_family == AF_INET) {
- sin = (struct sockaddr_in *)&ss;
- msg_info ("accepted connection from %s port %d", inet_ntoa (sin->sin_addr), ntohs (sin->sin_port));
- memcpy (&session->client_addr, &sin->sin_addr, sizeof (struct in_addr));
+ else if (su.ss.ss_family == AF_INET) {
+ msg_info ("accepted connection from %s port %d", inet_ntoa (su.s4.sin_addr), ntohs (su.s4.sin_port));
+ memcpy (&session->client_addr, &su.s4.sin_addr, sizeof (struct in_addr));
}
session->sock = nfd;
parse_smtp_banner (struct smtp_worker_ctx *ctx, const char *line)
{
int hostmax, banner_len = sizeof ("220 ") - 1;
- char *p, *t, *hostbuf;
+ char *p, *t, *hostbuf = NULL;
gboolean has_crlf = FALSE;
p = (char *)line;
};
struct stat_file_block block = { 0, 0, 0 };
int fd;
- unsigned int buflen, nblocks;
+ unsigned int buflen = 0, nblocks;
char *buf = NULL;
if (statfile_pool_is_open (pool, filename) != NULL) {
{
struct timespec ts1, ts2;
uint64_t diff;
- struct cache_item *item;
+ struct cache_item *item = NULL;
struct symbol_callback_data *s = *save;
if (s == NULL) {
accept_socket (int fd, short what, void *arg)
{
struct rspamd_worker *worker = (struct rspamd_worker *)arg;
- struct sockaddr_storage ss;
- struct sockaddr_in *sin;
+ union sa_union su;
struct worker_task *new_task;
GList *cur;
struct custom_filter *filt;
- socklen_t addrlen = sizeof (ss);
+ socklen_t addrlen = sizeof (su.ss);
int nfd;
- if ((nfd = accept_from_socket (fd, (struct sockaddr *)&ss, &addrlen)) == -1) {
+ if ((nfd = accept_from_socket (fd, (struct sockaddr *)&su.ss, &addrlen)) == -1) {
msg_warn ("accept failed: %s", strerror (errno));
return;
}
new_task = construct_task (worker);
- if (ss.ss_family == AF_UNIX) {
+ if (su.ss.ss_family == AF_UNIX) {
msg_info ("accepted connection from unix socket");
new_task->client_addr.s_addr = INADDR_NONE;
}
- else if (ss.ss_family == AF_INET) {
- sin = (struct sockaddr_in *)&ss;
- msg_info ("accepted connection from %s port %d", inet_ntoa (sin->sin_addr), ntohs (sin->sin_port));
- memcpy (&new_task->client_addr, &sin->sin_addr, sizeof (struct in_addr));
+ else if (su.ss.ss_family == AF_INET) {
+ msg_info ("accepted connection from %s port %d", inet_ntoa (su.s4.sin_addr), ntohs (su.s4.sin_port));
+ memcpy (&new_task->client_addr, &su.s4.sin_addr, sizeof (struct in_addr));
}
new_task->sock = nfd;