Vsevolod Stakhov wrote:
>>> Сейчас можно использовать dynamic rules:
>> это вариант. но на сколько я понимаю, для каждого символа придется
>> создавать отдельный файл. я предполагаю создание достаточно большого
>> количества правил. порядка нескольких сотен как минимум.
>
> Нет, как раз в файле описывается json массив из правил.
это я понял
я имею ввиду, что для каждого символа в json массиве нужно в поле rule
указать файл с кодом правила. или я неправильно понял синтаксис?
json массив у меня будет один. а вот таких правил - много.
>> компромиссным на мой взгляд вариантом была бы возможность при проверке
>> корректности синтаксиса выводить предупреждения о том, что есть
>> описанные символы без упоминания их в метриках, и наоборот, что в
>> описании метрики есть символы, для которых не сделаны описания. ну и,
>> естественно, такие символы нужно игнирировать.
>
> Да, я тоже думал об этом, возможно, при проверке конфигурации достаточно
> просто выводить варнинг, и не вываливаться с ошибкой.
для меня этого было бы достаточно. тогда я бы и динамические правила
пока не использовал бы. просто сложил бы свои правила в какой-нибудь
/usr/local/etc/rspamd/lua/regexp/headers.local.lua (по крайней мере в
этот файл я сложил бы правила по проверке полей заголовков) и включил бы
этот файл в /usr/local/etc/rspamd/lua/rspamd.lua сразу за
dofile('regexp/headers.lua')
>>> Кроме того, можно в lua добавить поддержку метрик в каком-то таком виде:
>>> conf['module']['symbol'] = 'rule'
>>> metrics['name']['symbol'] =<weight>
>>
>> т. е. по сути можно в rspamd.xml просто описать метрику, а привязку к
>> ней символов с опреденными весами делать в lua?
>
> Да, именно так. Вообще, xml предполагался для автоматического
> редактирования какими-нибудь скриптами или веб-мордой.
ясно
>>>> т. е. интересует что-то типа такого:
>>>>
>>>> local MAILMAN_MSGID =
>>>> 'From,Message-ID=/<([^\\@]+\\@[^>]+)>,<mailman\\.\\d+\\.\\d+\\.\\d+\\.\\1>$/'
>>>>
>>>
>>> Опять же сделать это функцией на lua должно быть весьма просто (функции
>>> могут писаться прямо в правилах).
>>
>> тогда этот вопрос мне придется отложить до изучения работы с регулярными
>> выражениями в lua. да и нужно будет разобраться с использованием
>
> В lua можно использовать регулярные выражения rspamd через библиотеку
> rspamd_regexp, при этом сохраняются все преимущества rspamd в виде кеша
> компилированных регулярок и кеша результатов для каждого сообщения.
это все будет описано в той документации по lua API, которая была
упомянута в предыдущем письме?
>> писать функциою (если таковой еще нет) для извлечения адреса(ов) из
>> header To (вернее из произвольного поля) и сравнивать адрес из RCPT TO с
>> этими извлеченными адресами. т. е. я имею ввиду аналог эксимовской
>> конструкции ${address:<string>}
>
> Хорошо, я посмотрю, как это сделано в exim.
ну, по сути нужно просто извлечь значение из угловых скобок и вернуть.
если угловых скобок в строке нет, вернуть всю строку.
в данном конкретном случае можно просто в check_forged_headers внутри
for _,mr in ipairs(mime_rcpt) do из mr извлекать адрес регулярным
выражением.
т. е. вместо
if string.find(mr, sr) then
или
if string.find(string.lower(mr), string.lower(sr), 1, true) then
можно использовать что-то типа этого:
local addr = string.match(mr, '<(.+?)>')
if addr then mr = addr end
if string.lower(mr) == string.lower(sr) then
я не нашел, как все это более компактно записать.
на perl'е две первых строки можно было бы записать без объявления
дополнительно переменной:
$mr = ($mr =~ /<(.+?)>/ ? $1 : $mr);
--
Best wishes Victor Ustugov mailto:[email protected]
public GnuPG/PGP key: http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 77186900, 371808614 nic-handle: CRV-UANIC
_______________________________________________
Exim-users mailing list
[email protected]
http://mailground.net/mailman/listinfo/exim-users