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:vic...@corvax.kiev.ua
public GnuPG/PGP key:        http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 77186900, 371808614 nic-handle: CRV-UANIC

_______________________________________________
Exim-users mailing list
Exim-users@mailground.net
http://mailground.net/mailman/listinfo/exim-users

Ответить