summaryrefslogtreecommitdiffstats
path: root/src/rspamd_proxy.c
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2020-10-09 12:31:03 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2020-10-09 12:31:03 +0100
commit4a75d59ccf077d08ea33695df586d81345ed2f4c (patch)
tree7ac2d2a12411461212a6bf0e1e3d8f05208a0434 /src/rspamd_proxy.c
parentdef2916b44a2c314d270378298b4e8b052417c97 (diff)
downloadrspamd-4a75d59ccf077d08ea33695df586d81345ed2f4c.tar.gz
rspamd-4a75d59ccf077d08ea33695df586d81345ed2f4c.zip
[Fix] Use dup fd in milter handler to avoid races with the proxy
Diffstat (limited to 'src/rspamd_proxy.c')
-rw-r--r--src/rspamd_proxy.c27
1 files changed, 19 insertions, 8 deletions
diff --git a/src/rspamd_proxy.c b/src/rspamd_proxy.c
index 4ed8cfab7..3fa5da390 100644
--- a/src/rspamd_proxy.c
+++ b/src/rspamd_proxy.c
@@ -2150,18 +2150,29 @@ proxy_milter_finish_handler (gint fd,
static void
proxy_milter_error_handler (gint fd,
- struct rspamd_milter_session *rms,
+ struct rspamd_milter_session *rms, /* unused */
void *ud, GError *err)
{
struct rspamd_proxy_session *session = ud;
- msg_info_session ("abnormally closing milter connection from: %s, "
- "error: %e",
- rspamd_inet_address_to_string_pretty (session->client_addr),
- err);
- /* Terminate session immediately */
- proxy_backend_close_connection (session->master_conn);
- REF_RELEASE (session);
+ if (err && err->code != 0) {
+ msg_info_session ("abnormally closing milter connection from: %s, "
+ "error: %e",
+ rspamd_inet_address_to_string_pretty (session->client_addr),
+ err);
+ /* Terminate session immediately */
+ proxy_backend_close_connection (session->master_conn);
+ REF_RELEASE (session);
+ }
+ else {
+ msg_info_session ("normally closing milter connection from: %s, "
+ "%e",
+ rspamd_inet_address_to_string_pretty (session->client_addr),
+ err);
+ /* Terminate session immediately */
+ proxy_backend_close_connection (session->master_conn);
+ REF_RELEASE (session);
+ }
}
static void