diff --git a/plugins/rspamd.js b/plugins/rspamd.js index de3e25afd..70e77ddfb 100644 --- a/plugins/rspamd.js +++ b/plugins/rspamd.js @@ -174,9 +174,8 @@ exports.hook_data_post = function (next, connection) { } if (cfg.soft_reject.enabled && r.data.default.action === 'soft reject') { return callNext(DENYSOFT, DSN.sec_unauthorized(cfg.soft_reject.message, 451)); - } else if (cfg.main.add_headers !== 'never' && ( - cfg.main.add_headers === 'always' || - (r.data.default.action === 'add header' && cfg.main.add_headers === 'sometimes'))) { + } + if (plugin.wants_headers_added(r.data)) { plugin.add_headers(connection, r.data); } return callNext(); @@ -198,6 +197,17 @@ exports.hook_data_post = function (next, connection) { }); }; +exports.wants_headers_added = function (rspamd_data) { + var plugin = this; + + if (plugin.cfg.main.add_headers === 'never') return false; + if (plugin.cfg.main.add_headers === 'always') return true; + + // implicit add_headers=sometimes, based on rspamd response + if (rspamd_data.default.action === 'add header') return true; + return false; +}; + exports.parse_response = function (rawData, connection) { var plugin = this; diff --git a/tests/plugins/rspamd.js b/tests/plugins/rspamd.js index 1cb9ff9f1..62c95ebe4 100644 --- a/tests/plugins/rspamd.js +++ b/tests/plugins/rspamd.js @@ -87,3 +87,38 @@ exports.add_headers = { test.done(); } }; + +exports.wants_headers_added = { + setUp : _set_up, + 'wants no headers when add_headers=never': function (test) { + test.expect(1); + this.plugin.cfg.main.add_headers='never'; + test.equal( + this.plugin.wants_headers_added({ default: { action: 'add header' }}), + false + ); + test.done(); + }, + 'always wants no headers when add_headers=always': function (test) { + test.expect(1); + this.plugin.cfg.main.add_headers='always'; + test.equal( + this.plugin.wants_headers_added({ default: { action: 'beat it' }}), + true + ); + test.done(); + }, + 'wants headers when rspamd response indicates, add_headers=sometimes': function (test) { + test.expect(2); + this.plugin.cfg.main.add_headers='sometimes'; + test.equal( + this.plugin.wants_headers_added({ default: { action: 'add header' }}), + true + ); + test.equal( + this.plugin.wants_headers_added({ default: { action: 'brownlist' }}), + false + ); + test.done(); + } +} \ No newline at end of file