[exim-conf] экспериментальная поддержка RFC 2231

Victor Ustugov victor на corvax.kiev.ua
Пт Ноя 2 09:53:17 EET 2007


приветствую

еще в начале года на bugs.exim.org была зарегистрирована бага, касающая 
отсутствия поддержки RFC 2231 в exim:
http://bugs.exim.org/show_bug.cgi?id=466

вопрос касается имен аттачей с 8-битными ситволами, кодированные не в 
quoted-printable и/или base64 по RFC 2047, а кодированные отдельным 
способом, который и описан в RFC 2231.

Кистнер что-то не особо спешил реализовать поддержку RFC 2231, хотя для 
него там реально было бы работы на два часа. т. к. имена аттачей, 
кодированные в RFC 2231, можно привести к кодированию в quoted-printable 
(для это есть и название набора символов и 16-ричные коды символов) и 
для декодирования использовать уже имеющиеся средства (${rfc2047d:s} или 
rfc2047_decode()).

нужно только учесть, что длинное имя файла будет разбито на несколько 
частей, название каждой будет начинаться с "filename*", потом будет идти 
порядкойвый номер части и еще одна звездочка. и декодировать части имени 
придется отдельно, сливая результаты декодирования воедино.

все это не позволит использовать схему обработки параметров Кистнера с 
mime_parameter_list, но не на столько, чтобы не вписаться в 5 килобайт 
патча.


итак, сам патч:
http://mta.org.ua/exim-4.67-conf/patches/exim-4.68-rfc2231/patch-src::rfc2231.patch


патч позволяет переменной $mime_filename присваивать значение 
декодированного имени прикрепленного файла, закодированных согласно RFC 
2231. если при раскодировании возникли ошибки, переменной $mime_filename 
будет присвоено недекодированное имя файла. если имя файла имеет 
достаточно большую длину и было разбито на несколько параметров 
filename* поля Content-Disposition, то тогда переменной $mime_filename 
будет присвоено значение, полученное в результате конкатенации всех 
частей имени файла.


для использования патча подправлены spec файл для RedHat/Fedora и 
механизм сборки порта на FreeBSD:
http://mta.org.ua/exim-4.67-conf/redhat/exim-4.68-1.corvax/
http://mta.org.ua/exim-4.67-conf/ports/exim-4.68/

для сборки exim с указанным патчем на RedHat/Fedora нужно в файл 
redhat/exim-4.68-1.corvax/Makefile.local добавить строку
RPMBUILD_OPTIONS+= --with experimental_rfc2231_support

для сборки exim с указанным патчем на FreeBSD нужно в файл 
ports/exim-4.68/Makefile.local добавить строку
WITH_EXPERIMENTAL_RFC2231_SUPPORT=YES

далее сборка exim под этими OS производится как обычно

-- 
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




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