From: Vsevolod Stakhov Date: Mon, 5 Oct 2009 13:58:04 +0000 (+0400) Subject: * Add once_received plugin (by dmx) X-Git-Tag: 0.3.0~164 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=876e5f104227f855269daa0c2812f26a45b38cc7;p=thirdparty%2Frspamd.git * Add once_received plugin (by dmx) * Fix read_callback to avoid double freeing of task object --- diff --git a/src/plugins/lua/once_received.lua b/src/plugins/lua/once_received.lua new file mode 100644 index 0000000000..409ec4aff5 --- /dev/null +++ b/src/plugins/lua/once_received.lua @@ -0,0 +1,15 @@ +-- 0 or 1 received: = spam + +local metric = 'default' +local symbol = 'ONCE_RECEIVED' + +function check_quantity_received (task) + local recvh = task:get_received_headers() + if table.maxn(recvh) <= 1 then + task:insert_result(metric, symbol, 1) + end +end + +-- Register symbol's callback +local m = rspamd_config:get_metric(metric) +m:register_symbol(symbol, 1.0, 'check_quantity_received') diff --git a/src/worker.c b/src/worker.c index 880da71ab2..e246f32137 100644 --- a/src/worker.c +++ b/src/worker.c @@ -174,7 +174,7 @@ read_socket (f_str_t * in, void *arg) task->state = WRITE_ERROR; } if (task->state == WRITE_REPLY || task->state == WRITE_ERROR) { - write_socket (task); + return write_socket (task); } break; case READ_MESSAGE: @@ -188,20 +188,19 @@ read_socket (f_str_t * in, void *arg) task->last_error = "MIME processing error"; task->error_code = RSPAMD_FILTER_ERROR; task->state = WRITE_ERROR; - write_socket (task); + return write_socket (task); } if (task->cmd == CMD_OTHER) { /* Skip filters */ task->state = WRITE_REPLY; - write_socket (task); - return TRUE; + return write_socket (task); } r = process_filters (task); if (r == -1) { task->last_error = "Filter processing error"; task->error_code = RSPAMD_FILTER_ERROR; task->state = WRITE_ERROR; - write_socket (task); + return write_socket (task); } else if (r == 0) { task->state = WAIT_FILTER; @@ -209,7 +208,7 @@ read_socket (f_str_t * in, void *arg) } else { process_statfiles (task); - write_socket (task); + return write_socket (task); } break; default: