From fe854d75c6f3f6d0f324b832a5b9f5a47df0f5c7 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Tue, 5 Jul 2016 13:37:09 +0100 Subject: [PATCH] [Fix] Fix files fallback for shmem transfer --- src/libserver/task.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/libserver/task.c b/src/libserver/task.c index 1bf086cce..6e0493771 100644 --- a/src/libserver/task.c +++ b/src/libserver/task.c @@ -287,6 +287,13 @@ rspamd_task_load_message (struct rspamd_task *task, gpointer map; struct stat st; struct rspamd_task_map *m; + const gchar *ft; + +#ifdef HAVE_SANE_SHMEM + ft = "shm"; +#else + ft = "file"; +#endif if (msg) { rspamd_protocol_handle_headers (task, msg); @@ -312,18 +319,20 @@ rspamd_task_load_message (struct rspamd_task *task, else { fp = &filepath[0]; } - +#ifdef HAVE_SANE_SHMEM fd = shm_open (fp, O_RDONLY, 00600); - +#else + fd = open (fp, O_RDONLY, 00600); +#endif if (fd == -1) { g_set_error (&task->err, rspamd_task_quark(), RSPAMD_PROTOCOL_ERROR, - "Cannot open shm segment (%s): %s", fp, strerror (errno)); + "Cannot open %s segment (%s): %s", ft, fp, strerror (errno)); return FALSE; } if (fstat (fd, &st) == -1) { g_set_error (&task->err, rspamd_task_quark(), RSPAMD_PROTOCOL_ERROR, - "Cannot stat shm segment (%s): %s", fp, strerror (errno)); + "Cannot stat %s segment (%s): %s", ft, fp, strerror (errno)); close (fd); return FALSE; @@ -334,7 +343,7 @@ rspamd_task_load_message (struct rspamd_task *task, if (map == MAP_FAILED) { close (fd); g_set_error (&task->err, rspamd_task_quark(), RSPAMD_PROTOCOL_ERROR, - "Cannot mmap file (%s): %s", fp, strerror (errno)); + "Cannot mmap %s (%s): %s", ft, fp, strerror (errno)); return FALSE; } @@ -365,8 +374,8 @@ rspamd_task_load_message (struct rspamd_task *task, rspamd_strtoul (tok->begin, tok->len, &shmem_size); if (shmem_size > (gulong)st.st_size) { - msg_err_task ("invalid length %ul (%ul available) for shm " - "segment %s", shmem_size, st.st_size, fp); + msg_err_task ("invalid length %ul (%ul available) for %s " + "segment %s", shmem_size, st.st_size, ft, fp); munmap (map, st.st_size); return FALSE; -- 2.39.5