From 38cf55d84f0080c8c91fc1758081c216defc8beb Mon Sep 17 00:00:00 2001 From: Andrew Lewis Date: Tue, 19 Sep 2023 15:45:10 +0200 Subject: [PATCH] [Minor] Revisit numeric_urls --- src/plugins/lua/rbl.lua | 29 ++- .../functional/cases/001_merged/300_rbl.robot | 15 ++ test/functional/configs/merged-local.conf | 15 ++ test/functional/configs/merged-override.conf | 16 ++ test/functional/messages/numeric_urls.eml | 227 +++++++++++++++++- 5 files changed, 296 insertions(+), 6 deletions(-) diff --git a/src/plugins/lua/rbl.lua b/src/plugins/lua/rbl.lua index c5cdbef1c..837707b3f 100644 --- a/src/plugins/lua/rbl.lua +++ b/src/plugins/lua/rbl.lua @@ -563,7 +563,31 @@ local function gen_rbl_callback(rule) no_cache = true, } - if not rule.urls then + if rule.numeric_urls then + if rule.content_urls then + if not rule.images then + ex_params.flags_mode = 'explicit' + ex_params.flags = {'numeric'} + ex_params.filter = function(url) + return (bit.band(url:get_flags_num(), url_flag_bits.image) == 0) + end + else + ex_params.filter = function(url) + return (bit.band(url:get_flags_num(), url_flag_bits.numeric) ~= 0) + end + end + elseif rule.images then + ex_params.filter = function(url) + return (bit.band(url:get_flags_num(), url_flag_bits.numeric) ~= 0) + end + else + ex_params.flags_mode = 'explicit' + ex_params.flags = {'numeric'} + ex_params.filter = function(url) + return (bit.band(url:get_flags_num(), url_flag_bits.content) == 0) + end + end + elseif not rule.urls and (rule.content_urls or rule.images) then ex_params.flags_mode = 'explicit' ex_params.flags = {} if rule.content_urls then @@ -572,9 +596,6 @@ local function gen_rbl_callback(rule) if rule.images then table.insert(ex_params.flags, 'image') end - if rule.numeric_urls then - table.insert(ex_params.flags, 'numeric') - end end local urls = lua_util.extract_specific_urls(ex_params) diff --git a/test/functional/cases/001_merged/300_rbl.robot b/test/functional/cases/001_merged/300_rbl.robot index c0e7fde95..61c02c26b 100644 --- a/test/functional/cases/001_merged/300_rbl.robot +++ b/test/functional/cases/001_merged/300_rbl.robot @@ -80,3 +80,18 @@ NUMERIC URLS Scan File ${RSPAMD_TESTDIR}/messages/numeric_urls.eml ... Settings={symbols_enabled = [URIBL_NUMERIC]} Expect Symbol With Exact Options URIBL_NUMERIC 4.3.2.1:url + +NUMERIC URLS WITH IMAGES + Scan File ${RSPAMD_TESTDIR}/messages/numeric_urls.eml + ... Settings={symbols_enabled = [URIBL_NUMERIC_IMAGES]} + Expect Symbol With Exact Options URIBL_NUMERIC_IMAGES 4.3.2.1:url 12.11.10.9:url + +NUMERIC URLS WITH CONTENT + Scan File ${RSPAMD_TESTDIR}/messages/numeric_urls.eml + ... Settings={symbols_enabled = [URIBL_NUMERIC_CONTENT]} + Expect Symbol With Exact Options URIBL_NUMERIC_CONTENT 4.3.2.1:url 8.7.6.5:url + +NUMERIC URLS WITH EVERYTHING + Scan File ${RSPAMD_TESTDIR}/messages/numeric_urls.eml + ... Settings={symbols_enabled = [URIBL_NUMERIC_EVERYTHING]} + Expect Symbol With Exact Options URIBL_NUMERIC_EVERYTHING 12.11.10.9:url 4.3.2.1:url 8.7.6.5:url diff --git a/test/functional/configs/merged-local.conf b/test/functional/configs/merged-local.conf index 82d609730..0708e3c0b 100644 --- a/test/functional/configs/merged-local.conf +++ b/test/functional/configs/merged-local.conf @@ -880,6 +880,21 @@ options = { type = a; replies = ["127.0.0.2"]; }, + { + name = "judo.za.org.test9.uribl"; + type = a; + replies = ["127.0.0.2"]; + }, + { + name = "12.11.10.9.test9.uribl"; + type = a; + replies = ["127.0.0.2"]; + }, + { + name = "8.7.6.5.test9.uribl"; + type = a; + replies = ["127.0.0.2"]; + }, { name = "8.8.8.8.test9.uribl"; type = a; diff --git a/test/functional/configs/merged-override.conf b/test/functional/configs/merged-override.conf index 04b879db6..28d554b83 100644 --- a/test/functional/configs/merged-override.conf +++ b/test/functional/configs/merged-override.conf @@ -302,6 +302,22 @@ rbl { checks = ["numeric_urls"]; rbl = "test9.uribl"; } + URIBL_NUMERIC_IMAGES { + checks = ["numeric_urls"]; + images = true; + rbl = "test9.uribl"; + } + URIBL_NUMERIC_CONTENT { + checks = ["numeric_urls"]; + content_urls = true; + rbl = "test9.uribl"; + } + URIBL_NUMERIC_EVERYTHING { + checks = ["numeric_urls"]; + images = true; + content_urls = true; + rbl = "test9.uribl"; + } URIBL_NOCONTENT { rbl = "test9.uribl"; ignore_defaults = true; diff --git a/test/functional/messages/numeric_urls.eml b/test/functional/messages/numeric_urls.eml index 139a52c66..0c19d30b7 100644 --- a/test/functional/messages/numeric_urls.eml +++ b/test/functional/messages/numeric_urls.eml @@ -1,3 +1,226 @@ -Content-type: text/plain +Message-ID: +Subject: behold I am you, lame content etc +From: Andrew Lewis +To: nerf@judo.za.org +Date: Thu, 14 Sep 2023 16:33:56 +0200 +Content-Type: multipart/mixed; boundary="=-Px1ozcNocF27wUUNNZPj" +User-Agent: Evolution 3.46.4-2 +MIME-Version: 1.0 +X-Evolution-Source: aae8aac68f6b9ca5aed2a266fd87af0026cd80f5 + +--=-Px1ozcNocF27wUUNNZPj +Content-Type: text/html +Content-Transfer-Encoding: 8bit + + +look these URLs: +1 AND +2 thx + + + +--=-Px1ozcNocF27wUUNNZPj +Content-Type: application/pdf; name="lamecontent.pdf" +Content-Disposition: attachment; filename="lamecontent.pdf" +Content-Transfer-Encoding: base64 + +JVBERi0xLjYKJcOkw7zDtsOfCjIgMCBvYmoKPDwvTGVuZ3RoIDMgMCBSL0ZpbHRlci9GbGF0ZURl +Y29kZT4+CnN0cmVhbQp4nJ1RTUtDMRC851fsWXhxJ58bCIFWW8Fb9YGH4smvixXspX/f5L1KfbSF +ImGXTTLJzM6yBu3UNzGxZiPkk9cmehIHLQG0fVNPV/Q1Iurafqh5r3zQQjFanSRR/0rXSxAM9e/r +zChBMpviM1t27EtXq1CQORaTWUoXcj1PDTDj+bC9KTXdluf+Xi16tfpl056RAkdxdkIcWOOYeMHL +RtASuP5WeYG2GZKBhavha4S/TBi4QJOvXzaKdaTdsY6HO8XUodq2oQAdxvqTHg+y91oB0f6cWDdY +gghhd0HfaOP4V+Oj4UiHEVTMOBRpCixm7cKOVxge709sxZ0waqrlMqeAoNN5q4yX8+25k3pW9AO2 +GJL3CmVuZHN0cmVhbQplbmRvYmoKCjMgMCBvYmoKMjc0CmVuZG9iagoKNyAwIG9iago8PC9MZW5n +dGggOCAwIFIvRmlsdGVyL0ZsYXRlRGVjb2RlL0xlbmd0aDEgMTM0NjQ+PgpzdHJlYW0KeJzlemt4 +W9WV6F7n6C3b0pElWbJi6SiKnTh+W3aI8/KJY8vO03JsByuBWIolP4htCUtJGmgaAwlQQ0oIzwC3 +eNoMl9LcQSZpJ6UMuAXa2+mlhCm0pZQhU8KFO4XBUEr7AZZn7a0jWwmUfne+++8e+5yz9nrttdda +e++1j50Y2xchOWSc8ETqGwnFRrvb9xBC/hchYOrbnxDXtltWI3yBEO5f+mMDIw/841UfEaI4S4j6 +7MDwwf6W5f+6iJCcQUIK3h2MhMKN1XdWELKkC3WsGEREKHVQje3bsb1kcCTxlRbVc30IJrE9PBzt +C92467NNhBSjDrJyJPSV2HJFB4dtKi+OhkYif/nms2FsJwjRx2PReCJMbp0jpPodSo+NRWJbHtjz +PCE1GkL444gD/KFXDoIq2uZ4hVKl1mh1+pzcPINRMOWbLdYCm72Q/P9xKY8RC2lTriUGEmPPSy7+ +NLGTk4TMvUtbC8/UlrlP/l9aoUm/7iePkLPkGHmVXC0TfMRPhsg+xGRfPyIvIZZefrKTPEYm/ora +0+Qc0tN8QXIHHckXXn5yHzlDfnpJL34yQq5HW75HXoUa8jNMlSj5EDTkBvI8av0QcVu/SBWXh49+ +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 +jh7S780VfE9BO2wha9GH287wc67H11tgKw7LgE8X3lV4t+MdxfsOvPHMg+wuvKtgi7SS770H9Ccc +J8pOXH/ithPK2M3jNx+/mR8/evwo9/j+Z/ZzcX+pKzpa5hptXe6ye23dai/frcJu6KeBjXuKl/mC +vZKrF5l27ax27WwtdeV7Td1KHLACGQ28i2/k2/kofwf/DK/WbPc7XR14X/DP+DnJr83xGdpd7VXt +/Lm5C1Jksxu1bYptGt/Eb/SVutpaV7oMra7WqtYXW99ofb9V1dsKD+Ov73HfMz5e8pVW+SSf0+1b +1Obotnot3QIYuo1eQzcHGGgv6a4yzBk4g6HXcNjAG0gj4catoIRzcHyqq7OsbPM59dz2zUmNf1cS +bk0Wd9Kn1LEzqbo1Sbp37uqZAvhG4OixY6SpaHOytrMnGSwKbE6GEZAoMI6AsWjKSpoC8XiijF1Q +VobwPnySsn1liNwdT2PJPJ2UxSGOS1ScCUEZZUi3AZ9llIYIKgcovTtO6IMSy9JCVDouq2PC6QcD +bLv/E/0U414KZW5kc3RyZWFtCmVuZG9iagoKOCAwIG9iago4MTY1CmVuZG9iagoKOSAwIG9iago8 +PC9UeXBlL0ZvbnREZXNjcmlwdG9yL0ZvbnROYW1lL0JBQUFBQStMaWJlcmF0aW9uU2VyaWYKL0Zs +YWdzIDQKL0ZvbnRCQm94Wy01NDMgLTMwMyAxMjc3IDk4MV0vSXRhbGljQW5nbGUgMAovQXNjZW50 +IDAKL0Rlc2NlbnQgMAovQ2FwSGVpZ2h0IDk4MQovU3RlbVYgODAKL0ZvbnRGaWxlMiA3IDAgUgo+ +PgplbmRvYmoKCjEwIDAgb2JqCjw8L0xlbmd0aCAzNDEvRmlsdGVyL0ZsYXRlRGVjb2RlPj4Kc3Ry +ZWFtCnicXZLNboMwDIDvPEWO3aGCJC1sEkLqaJE47EdjewBKTIc0QhTogbdfbHebtAPoM7Gdjzhx +WR9rOyzxq5+6BhbRD9Z4mKer70Cc4TLYSCphhm65RfTuxtZFcaht1nmBsbb9lOdR/BbW5sWvYnMw +0xnuovjFG/CDvYjNR9mEuLk69wUj2EUkUVEIA33o89S653aEmKq2tQnLw7JuQ8lfwvvqQCiKJat0 +k4HZtR341l4gypOkEHlVFRFY829NpVxy7rvP1odUGVKTZL8rAiviLEPWxGmFvCNWCfKev5fIKbNE +zpiPyPfMe+QH7k98YFbIj8Q76lPyvhr5SKwPyCfuc49ccQ56yoQZfST7K/SU7K9xL8n+6oTM/jpF +Zn+N/yjZX2N/efOn/Js/7cX+GeWwf6rpYG8niEeMd+BndKK7eh/GRheF5oWTGiz83iU3Oayi5xsJ +U6gUCmVuZHN0cmVhbQplbmRvYmoKCjExIDAgb2JqCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVU +eXBlL0Jhc2VGb250L0JBQUFBQStMaWJlcmF0aW9uU2VyaWYKL0ZpcnN0Q2hhciAwCi9MYXN0Q2hh +ciAyNgovV2lkdGhzWzAgNjEwIDcyMiA1MDAgMjUwIDI3NyA0NDMgNzc3IDQ0MyA3MjIgNjY2IDYx +MCAzODkgMjc3IDUwMCAyNzcKNTAwIDI3NyA1MDAgMjUwIDUwMCA1MDAgNTAwIDUwMCA1MDAgNTAw +IDQ0MyBdCi9Gb250RGVzY3JpcHRvciA5IDAgUgovVG9Vbmljb2RlIDEwIDAgUgo+PgplbmRvYmoK +CjEyIDAgb2JqCjw8L0YxIDExIDAgUgo+PgplbmRvYmoKCjEzIDAgb2JqCjw8L0ZvbnQgMTIgMCBS +Ci9Qcm9jU2V0Wy9QREYvVGV4dF0KPj4KZW5kb2JqCgoxIDAgb2JqCjw8L1R5cGUvUGFnZS9QYXJl +bnQgNiAwIFIvUmVzb3VyY2VzIDEzIDAgUi9NZWRpYUJveFswIDAgNTk1LjMwMzkzNzAwNzg3NCA4 +NDEuODg5NzYzNzc5NTI4XS9Bbm5vdHNbCjQgMCBSIDUgMCBSIF0KL1RhYnMoUykKL0NvbnRlbnRz +IDIgMCBSPj4KZW5kb2JqCgo2IDAgb2JqCjw8L1R5cGUvUGFnZXMKL1Jlc291cmNlcyAxMyAwIFIK +L01lZGlhQm94WyAwIDAgNTk1LjMwMzkzNzAwNzg3NCA4NDEuODg5NzYzNzc5NTI4IF0KL0tpZHNb +IDEgMCBSIF0KL0NvdW50IDE+PgplbmRvYmoKCjQgMCBvYmoKPDwvVHlwZS9Bbm5vdC9TdWJ0eXBl +L0xpbmsvQm9yZGVyWzAgMCAwXS9SZWN0WzU2LjY5MyA3NTcuNTg5IDExOC40MDcgNzcxLjM4OV0v +Q29udGVudHM8RkVGRjAwNjgwMDc0MDA3NDAwNzAwMDNBMDAyRjAwMkYwMDM1MDAyRTAwMzYwMDJF +MDAzNzAwMkUwMDM4Pi9BPDwvVHlwZS9BY3Rpb24vUy9VUkkvVVJJKGh0dHA6Ly81LjYuNy44Lyk+ +Pgo+PgplbmRvYmoKCjUgMCBvYmoKPDwvVHlwZS9Bbm5vdC9TdWJ0eXBlL0xpbmsvQm9yZGVyWzAg +MCAwXS9SZWN0WzE0MS42OTMgNzU3LjU4OSAyNTguNzA3IDc3MS4zODldL0NvbnRlbnRzPEZFRkYw +MDY4MDA3NDAwNzQwMDcwMDAzQTAwMkYwMDJGMDA2NTAwNzgwMDYxMDA2RDAwNzAwMDZDMDA2NTAw +MkUwMDYzMDA2RjAwNkQwMDJGMDA2MzAwNkYwMDZGMDA2Qz4vQTw8L1R5cGUvQWN0aW9uL1MvVVJJ +L1VSSShodHRwOi8vZXhhbXBsZS5jb20vY29vbCk+Pgo+PgplbmRvYmoKCjE0IDAgb2JqCjw8L1R5 +cGUvQ2F0YWxvZy9QYWdlcyA2IDAgUgovT3BlbkFjdGlvblsxIDAgUiAvWFlaIG51bGwgbnVsbCAw +XQovTGFuZyhlbi1aQSkKPj4KZW5kb2JqCgoxNSAwIG9iago8PC9DcmVhdG9yPEZFRkYwMDU3MDA3 +MjAwNjkwMDc0MDA2NTAwNzI+Ci9Qcm9kdWNlcjxGRUZGMDA0QzAwNjkwMDYyMDA3MjAwNjUwMDRG +MDA2NjAwNjYwMDY5MDA2MzAwNjUwMDIwMDAzNzAwMkUwMDM0PgovQ3JlYXRpb25EYXRlKEQ6MjAy +MzA5MTQxNjMxNTgrMDInMDAnKT4+CmVuZG9iagoKeHJlZgowIDE2CjAwMDAwMDAwMDAgNjU1MzUg +ZiAKMDAwMDAwOTYwOCAwMDAwMCBuIAowMDAwMDAwMDE5IDAwMDAwIG4gCjAwMDAwMDAzNjQgMDAw +MDAgbiAKMDAwMDAwOTg4OSAwMDAwMCBuIAowMDAwMDEwMTAyIDAwMDAwIG4gCjAwMDAwMDk3NjQg +MDAwMDAgbiAKMDAwMDAwMDM4NCAwMDAwMCBuIAowMDAwMDA4NjM0IDAwMDAwIG4gCjAwMDAwMDg2 +NTUgMDAwMDAgbiAKMDAwMDAwODg0NSAwMDAwMCBuIAowMDAwMDA5MjU2IDAwMDAwIG4gCjAwMDAw +MDk1MjAgMDAwMDAgbiAKMDAwMDAwOTU1MyAwMDAwMCBuIAowMDAwMDEwMzYwIDAwMDAwIG4gCjAw +MDAwMTA0NTcgMDAwMDAgbiAKdHJhaWxlcgo8PC9TaXplIDE2L1Jvb3QgMTQgMCBSCi9JbmZvIDE1 +IDAgUgovSUQgWyA8NjJEQzZBMUZGNjdGMDM3NzdENTRBQzA5QTdCRjZCN0M+Cjw2MkRDNkExRkY2 +N0YwMzc3N0Q1NEFDMDlBN0JGNkI3Qz4gXQovRG9jQ2hlY2tzdW0gLzI4MjNGODg2OUFCRDZFMzU4 +NEVCMjg3QURDRkVEQ0RGCj4+CnN0YXJ0eHJlZgoxMDYzMgolJUVPRgo= + + +--=-Px1ozcNocF27wUUNNZPj-- -numeric http://1.2.3.4 and not http://example.org ok -- 2.39.5