[sa-conf] spamassassin patches and bugs

Victor Ustugov victor на corvax.kiev.ua
Ср Дек 28 18:37:06 EET 2005


asm, пишу в лист, а не тебе личечно, т. к. тут еще Лещинский прочтет 
письмо и может тоже Джустина дернет

итак, патчи:


1. расширение набора кириллических чарсетов
http://www.mta.org.ua/spamassassin-3.0/patches/3.0.3/patch-src::Charsets-3.0.3.patch

список чарсетов для языков ru и ua пополнен значениями IBM866, 866, 
XMACCYRILLIC, MACCYRILLIC.
без этого письмо в маковой кодировке считается "Message written in an 
undesired language"


2. сравнение на соответствие регулярным выражениям комбинаций полей
http://www.mta.org.ua/spamassassin-3.1.0/patches/3.1.0/patch-src::MultiCaseSensHeadersCheck-3.1.0.patch

имена сравниваемых полей разделяются символом "|" (pipe), значения полей 
также будут сцеплены и разделены символом "|" (pipe)

пример проверки совпадения значения адреса без real name из поля From со 
значением поля Return-Path:
header Env_From_eq_From Return-Path|From =~ /^([^\|]+)\|".+" \1$/i

патч также позволяет проводить сравнение полей с учетом регистра имен 
полей. для этого необходимо после имени поля указать суффик :case
header Env_From_eq_From Return-Path:case|From =~ /^([^\|]+)\|".+" \1$/i


3. автообучение байесового фильтра при срабатывании правил
http://www.mta.org.ua/spamassassin-3.1.0/patches/3.1.0/patch-src::MandatoryLearn-3.1.0.patch

для включения автообучения байесового фильтра при срабатывании 
определенных правил нужно в список значений tflags этих правил добавить 
значение mandatory_learn

пример:
header __CTE_7 Content-Transfer-Encoding =~ /^7bit$/i
header __CT8_CTE7 Content-Type =~ 
/text\/plain;[\r\n\s]*format=flowed;[\r\n\s]*charset="?win
dows-1251"?;[\r\n\s]*reply-type=original/
meta CT8_CTE7   __CTE_7 && __CT8_CTE7
describe CT8_CTE7 8-bit header Content-Type found with 7-bit header 
Content-Transfer-Encoding
tflags CT8_CTE7 mandatory_learn

строки перенеслись, но смысл, я думаю, понятен


осталось два патча:
http://www.mta.org.ua/spamassassin-3.1.0/patches/3.1.0/patch-src::EvalTests-3.1.0.patch
http://www.mta.org.ua/spamassassin-3.1.0/patches/3.1.0/patch-src::RealName-3.1.0.patch

из них ничего отсылать дяденькам авторам не нужно, ибо:

patch-src::EvalTests-3.1.0.patch устарел и в правилах для следующей 
версии spamassassin'а использоваться не будет. функции 
check_underscored_From, check_dotted_From и check_minus_From из этого 
патча будут заменены функцией check_real_name_mailbox из патча 
patch-src::RealName-3.1.0.patch, который в свою очередь создает плагин 
RealName.pm, не требующий поддержки со стороны разработчиков.


теперь о багах:

1. в описании правил нельзя использовать символ диеза "#", вся строка 
после диеза и сам диез считаются комментарием. если диез заэкранировать 
слешем, то в поле X-Spam-Report попадает и сам диез и экранирующий его слеш.

я тут поборю лень и сам напишу патч, но пока руки не дошли


2. совершенно невменяемая работа правила SUBJ_ALL_CAPS (функция 
subject_is_all_caps из EvalTests.pm).

работает он следующим образом:
функция получает значение поля Subject
удаляет из него лидирующие и концевые пробельные символы
проверяет, не состоит ли тема из одного слова или из нескольких слов, 
общей длиной менее 10 символов
после этого из значения поля удаляются все символы, кроме букв 
латинского алфавита
правило считается сработавшим, если длина полученного значения поля 
больше 1 и если все буквы заглавные

исключение сделано для чарсетов, перечисленных в 
${CHARSETS_LIKELY_TO_FP_AS_CAPS}
в этой переменной присутствует "koi" и "cp1251"

при таком странном алгоритме получаем:
если в koi8-r закодирован сабж:

THIS SUBJECT CONTAINS ONLY CAPS! ВОТ!

то правило не сработает, т. к. в названии чарсета koi8-r входит 
подстрока koi, входящая в ${CHARSETS_LIKELY_TO_FP_AS_CAPS}

если тот же сабж закодирован в windows-1251, то правило срабатывает.

но! оно срабатывает даже на такой сабж:

У меня вопрос по A и MX записям доменов

т. е. все латинские буквы из этого сабжа являются заглавными


так вот, с этим надо что-то делать. или учитывать чарсет сабжа и 
проводить анализ всех символов или учитывать соотношение латинских букв 
к остальным символам. и в зависимости от этого корректировать решение о 
наличии в сабже только заглавных букв.


конечно, можно все это описать на http://bugzilla.spamassassin.org/, но 
самому исправить будет даже наверное быстрее и проще. а так, может 
Лещинский по старой памяти дернет Justin'а Mason'а ;-)

-- 
Best wishes Victor Ustugov   mailto:victor на corvax.kiev.ua
public GnuPG/PGP key:        http://victor.corvax.kiev.ua/corvax.asc
ICQ: 77186900, 32418694      CRV2-RIPE, CRV-UANIC




Подробная информация о списке рассылки sa-conf