aboutsummaryrefslogtreecommitdiffstats
path: root/src/rspamd_proxy.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2017-05-19 16:55:28 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2017-05-19 16:55:28 +0100
commitb0274f052131b83aa326d1fae717d54dce8b7229 (patch)
tree7d89befe42a9f997653cd354e57add8695ad8f87 /src/rspamd_proxy.c
parente72ca2d97d5c96ee5b9589e9a07782f276bb74b0 (diff)
downloadrspamd-b0274f052131b83aa326d1fae717d54dce8b7229.tar.gz
rspamd-b0274f052131b83aa326d1fae717d54dce8b7229.zip
[Fix] Fix spamc support in rspamd proxy
Diffstat (limited to 'src/rspamd_proxy.c')
-rw-r--r--src/rspamd_proxy.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/rspamd_proxy.c b/src/rspamd_proxy.c
index e9858b0ba..2365eb9b6 100644
--- a/src/rspamd_proxy.c
+++ b/src/rspamd_proxy.c
@@ -156,6 +156,12 @@ struct rspamd_proxy_backend_connection {
struct rspamd_task *task;
};
+enum rspamd_proxy_legacy_support {
+ LEGACY_SUPPORT_NO = 0,
+ LEGACY_SUPPORT_RSPAMC,
+ LEGACY_SUPPORT_SPAMC
+};
+
struct rspamd_proxy_session {
struct rspamd_worker *worker;
rspamd_mempool_t *pool;
@@ -171,7 +177,7 @@ struct rspamd_proxy_session {
GPtrArray *mirror_conns;
gsize map_len;
gint client_sock;
- gboolean is_spamc;
+ enum rspamd_proxy_legacy_support legacy_support;
gint retries;
ref_entry_t ref;
};
@@ -1387,11 +1393,19 @@ proxy_backend_master_finish_handler (struct rspamd_http_connection *conn,
}
- if (session->is_spamc) {
+ if (session->legacy_support > LEGACY_SUPPORT_NO) {
/* We need to reformat ucl to fit with legacy spamc protocol */
if (bk_conn->results) {
reply = rspamd_fstring_new ();
- rspamd_ucl_torspamc_output (bk_conn->results, &reply);
+
+ if (session->legacy_support == LEGACY_SUPPORT_SPAMC) {
+ rspamd_ucl_tospamc_output (bk_conn->results, &reply);
+ msg->flags |= RSPAMD_HTTP_FLAG_SPAMC;
+ }
+ else {
+ rspamd_ucl_torspamc_output (bk_conn->results, &reply);
+ }
+
rspamd_http_message_set_body_from_fstring_steal (msg, reply);
msg->method = HTTP_SYMBOLS;
}
@@ -1736,7 +1750,14 @@ proxy_client_finish_handler (struct rspamd_http_connection *conn,
/* Reset spamc legacy */
if (msg->method >= HTTP_SYMBOLS) {
msg->method = HTTP_GET;
- session->is_spamc = TRUE;
+
+ if (msg->flags & RSPAMD_HTTP_FLAG_SPAMC) {
+ session->legacy_support = LEGACY_SUPPORT_SPAMC;
+ }
+ else {
+ session->legacy_support = LEGACY_SUPPORT_SPAMC;
+ }
+
msg_info_session ("enabling legacy rspamc mode for session");
}