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