commit 1daef8f: [Project] Allow to replace body in milter

Vsevolod Stakhov vsevolod at highsecure.ru
Mon Jul 15 19:42:03 UTC 2019


Author: Vsevolod Stakhov
Date: 2019-07-15 20:40:38 +0100
URL: https://github.com/rspamd/rspamd/commit/1daef8f706368d90c91fab307bbaaec47dbf27bf (HEAD -> master)

[Project] Allow to replace body in milter

---
 src/libserver/milter.c          | 10 +++++++++-
 src/libserver/milter.h          |  1 +
 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',


More information about the Commits mailing list