diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-05-19 16:55:28 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2017-05-19 16:55:28 +0100 |
commit | b0274f052131b83aa326d1fae717d54dce8b7229 (patch) | |
tree | 7d89befe42a9f997653cd354e57add8695ad8f87 /src/rspamd_proxy.c | |
parent | e72ca2d97d5c96ee5b9589e9a07782f276bb74b0 (diff) | |
download | rspamd-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.c | 29 |
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"); } |