sizeof (RSPAMD_MILTER_XCODE_REJECT) - 1);
if (!reply) {
- reply = rspamd_fstring_new_init (RSPAMD_MILTER_REJECT_MESSAGE,
- sizeof (RSPAMD_MILTER_REJECT_MESSAGE) - 1);
+ if (milter_ctx->reject_message == NULL) {
+ reply = rspamd_fstring_new_init (
+ RSPAMD_MILTER_REJECT_MESSAGE,
+ sizeof (RSPAMD_MILTER_REJECT_MESSAGE) - 1);
+ }
+ else {
+ reply = rspamd_fstring_new_init (milter_ctx->reject_message,
+ strlen (milter_ctx->reject_message));
+ }
}
rspamd_milter_set_reply (session, rcode, xcode, reply);
struct rspamd_milter_context {
const gchar *spam_header;
const gchar *client_ca_name;
+ const gchar *reject_message;
void *sessions_cache;
gboolean discard_on_reject;
gboolean quarantine_on_reject;
gchar *spam_header;
/* CA name that can be used for client certificates */
gchar *client_ca_name;
+ /* Milter rejection message */
+ gchar *reject_message;
/* Sessions cache */
void *sessions_cache;
struct rspamd_milter_context milter_ctx;
G_STRUCT_OFFSET (struct rspamd_proxy_ctx, client_ca_name),
0,
"Allow certificates issued by this CA to be treated as client certificates");
+ rspamd_rcl_register_worker_option (cfg,
+ type,
+ "reject_message",
+ rspamd_rcl_parse_struct_string,
+ ctx,
+ G_STRUCT_OFFSET (struct rspamd_proxy_ctx, reject_message),
+ 0,
+ "Use custom rejection message");
return ctx;
}
ctx->milter_ctx.quarantine_on_reject = ctx->quarantine_on_reject;
ctx->milter_ctx.sessions_cache = ctx->sessions_cache;
ctx->milter_ctx.client_ca_name = ctx->client_ca_name;
+ ctx->milter_ctx.reject_message = ctx->reject_message;
rspamd_milter_init_library (&ctx->milter_ctx);
rspamd_lua_run_postloads (ctx->cfg->lua_state, ctx->cfg, ctx->ev_base,