diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-07-15 20:40:38 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2019-07-15 20:40:38 +0100 |
commit | 1daef8f706368d90c91fab307bbaaec47dbf27bf (patch) | |
tree | 85142e30e05a53635fdfaadf82078e1255d5b9c9 /src | |
parent | d61bd5017d8899defac876df4da2cfaacd0f3272 (diff) | |
download | rspamd-1daef8f706368d90c91fab307bbaaec47dbf27bf.tar.gz rspamd-1daef8f706368d90c91fab307bbaaec47dbf27bf.zip |
[Project] Allow to replace body in milter
Diffstat (limited to 'src')
-rw-r--r-- | src/libserver/milter.c | 10 | ||||
-rw-r--r-- | src/libserver/milter.h | 1 | ||||
-rw-r--r-- | src/libserver/milter_internal.h | 2 |
3 files changed, 11 insertions, 2 deletions
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', |