From: Vsevolod Stakhov Date: Mon, 15 Jul 2019 19:40:38 +0000 (+0100) Subject: [Project] Allow to replace body in milter X-Git-Tag: 2.0~584 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1daef8f706368d90c91fab307bbaaec47dbf27bf;p=rspamd.git [Project] Allow to replace body in milter --- diff --git a/src/libserver/milter.c b/src/libserver/milter.c index c06ad7a99..2e00e4c46 100644 --- a/src/libserver/milter.c +++ b/src/libserver/milter.c @@ -1161,7 +1161,7 @@ rspamd_milter_send_action (struct rspamd_milter_session *session, rspamd_fstring_t *reply = NULL; gsize len; GString *name, *value; - const char *reason; + const char *reason, *body_str; struct rspamd_milter_outbuf *obuf; struct rspamd_milter_private *priv = session->priv; @@ -1220,6 +1220,14 @@ rspamd_milter_send_action (struct rspamd_milter_session *session, pos += name->len + 1; memcpy (pos, value->str, value->len + 1); break; + case RSPAMD_MILTER_REPLBODY: + len = va_arg (ap, gsize); + body_str = va_arg (ap, const char *); + msg_debug_milter ("want to change body; size = %uz", + len); + SET_COMMAND (cmd, len, reply, pos); + memcpy (pos, body_str, len + 1); + break; case RSPAMD_MILTER_REPLYCODE: case RSPAMD_MILTER_ADDRCPT: case RSPAMD_MILTER_DELRCPT: diff --git a/src/libserver/milter.h b/src/libserver/milter.h index 00fd38488..10d2c3c47 100644 --- a/src/libserver/milter.h +++ b/src/libserver/milter.h @@ -37,6 +37,7 @@ enum rspamd_milter_reply { RSPAMD_MILTER_ADDHEADER = 'h', RSPAMD_MILTER_CHGHEADER = 'm', RSPAMD_MILTER_INSHEADER = 'i', + RSPAMD_MILTER_REPLBODY = 'b', RSPAMD_MILTER_REJECT = 'r', RSPAMD_MILTER_TEMPFAIL = 't', RSPAMD_MILTER_REPLYCODE = 'y', diff --git a/src/libserver/milter_internal.h b/src/libserver/milter_internal.h index fff6de38f..ffca57101 100644 --- a/src/libserver/milter_internal.h +++ b/src/libserver/milter_internal.h @@ -139,7 +139,7 @@ enum rspamd_milter_io_cmd { #define RSPAMD_MILTER_ACTIONS_MASK \ (RSPAMD_MILTER_FLAG_ADDHDRS | RSPAMD_MILTER_FLAG_ADDRCPT | \ RSPAMD_MILTER_FLAG_DELRCPT | RSPAMD_MILTER_FLAG_CHGHDRS | \ - RSPAMD_MILTER_FLAG_QUARANTINE) + RSPAMD_MILTER_FLAG_CHGBODY | RSPAMD_MILTER_FLAG_QUARANTINE) enum rspamd_milter_connect_proto { RSPAMD_MILTER_CONN_UNKNOWN = 'U',