]> source.dussan.org Git - rspamd.git/commitdiff
[Project] Allow to replace body in milter
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 15 Jul 2019 19:40:38 +0000 (20:40 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 15 Jul 2019 19:40:38 +0000 (20:40 +0100)
src/libserver/milter.c
src/libserver/milter.h
src/libserver/milter_internal.h

index c06ad7a99f3dc1d736111d99b7fd012d9fe4c1c3..2e00e4c46f9165500b8aa95af771f68f9a6f797a 100644 (file)
@@ -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:
index 00fd38488d58850710444d8e2e21f95b3bef93bd..10d2c3c47477ca977dff370a856babf0c07125b8 100644 (file)
@@ -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',
index fff6de38fe35d626aa65d3c44857a465c2397220..ffca57101905a880ecced3a38f2cee4f9436fd5d 100644 (file)
@@ -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',