|
www.lissyara.su
—> документация
—> EXIM
—> 4.70
—> часть 53
52. Формат файлов спула
Сообщение в очереди exim'a состоит из двух файлов, чьи имена - идентификатор сообщения, сопровождаемый “-D ” и “-H ”, соответственно. Часть данных сообщения сохранется отдельно в файле “-D ”. Конверт сообщения, статус и заголовки сохраняются в файле “-H ”, чей формат описан в этой части. Каждый из этих двух файлов содержит финальный компонент его собственного имени, как его первая строка. Это страховка от дисковых ошибок, когда директория потеряна, но сами файлы - восстановимы.
Некоторые люди соблазняются редактированием файлов “-D ” с целью модифицировать сообщения. Вы должны быть черезвычайно осторожными, если делаете это; это не рекомендуется, и вы делаете это на свой страх и риск. Вот, некоторые из ловушек:
Вы должны гарантировать, что exim не попытается доставить сообщение в тот момент когда вы играетесь с ним. Самый безопасный способ - заблокировать “-D ” файл, также как это делает exim - используя “fcntl() ”. Если вы обновите файл на месте, блокировка останется. Если вы запишете новый файл и переименуете его, блокировка будет потеряна в момент переименования.
Если вы измените число строк в файле, значение “$body_linecount ”, которое сохранено в файле “-H ”, будет некорректным. В настоящее время, это значение не используется exim'ом, но нет никаких гарантий, что так будет и дальше.
Если сообщение в формате MIME, вы должны позаботиться, чтобы не повредить его.
Если сообщение криптографически подписано, любое изменение делает подпись недействительной.
В общем, модификация файлов “-D ” - опасна.
Файлы, чьи имена заканчиваются на “-J ”, также могут быть замечены в директории “input ” (или в её субдиректориях, когда установлена “split_spool_directory ”). Это файлы журналов, используемые для записи адресов на которые сообщение было доставлено во время попытки доставки. Если в конце доставки присутствуют недоставленные получатели, файл “-H ” обновляется, и файл “-J ” - удаляется. Однако, если происходит сбой (например, отключение питания) до того как это произойдёт, файлы “-J ” остаются существтовать. При следующей обработке сообщения, exim, найдя файл “-J ”, использует его для обновления файла “-H ” до начала следующей попытки доставки.
53.1 Формат файла “-H ”
Вторая строка файла “-H ” содержит имя логина для uid процесса который вызвал exim для чтения сообщения, сопровождаемое цифровым uid и gid. Для локально сгенерённых сообщений, обычно это - пользователь пославший сообщение. Для сообщения полученного демоном через TCP/IP - обычно, это пользователь exim'a.
Третья строка файла содержит адрес отправителя сообщения как передано в конверте, содержащийся в угловых скобках. Для рикошетов - адрес отправителя пустой. Для входящей SMTP почты, отправитель даётся в команде MAIL. Для локально сгенерированных сообщений, адрес отправителя создаётся exim'ом из имени логина текущего пользователя и сконфигурированного “qualify_domain ”. Однако, это может быть перезадано путём опции “-f ” или начальной строки “From ”, если вызывающий - доверенный, или если предоставленный адрес - “<> ”, или адрес совпадает с “untrusted_set_senders ”.
Четвёртая строка содержит два числа. Первое - время когда сообщение было получено, в обычном формате UNIX - число секунд от начала эпохи. Второе число - счётчик посланных отправителю предупреждений о задержанной доставке получателю.
Далее следует множество строк, начинающихся с дефиса. Они могут появляться в любом порядке, и пропущены, если неуместны:
“-acl <number> <length> ” - Этот элемент является устаревшим, и не генерится начиная с релиза exim'a 4.61; вместо него используются “-aclc ” и “-aclm ”. Однако, “-acl ” всё ещё распознаётся, для обеспечения обратной совместимости. В старом формате, строки этой формы пристутствуют для каждой переменной ACL которая непуста. Число идентифицирует переменную; переменные “acl_cx ” нумеруются 0-9 и переменные “acl_mx ” нумеруются от 10 до 19. Длинна - длинна строки данных для переменной. Сама строка начинается со следующей строки, и сопровождается символом новой строки. Она может содержать внутренние новые строки.
“-aclc <rest-of-name> <length> ” - Строка этой формы представлена для каждой заданной переменной ACL соединения. Отметтьте, что между “-aclc ” и началом имени - пустое пространство. Длинна - длинна строки данных для переменной. Сама строка начинается со следующей строки, и сопровождается символом новой строки. Она может содержать внутренние новые строки.
“-aclm <rest-of-name> <length> ” - Строка этой формы представлена для каждой переменной ACL сообщения, которая не пуста. тметтьте, что между “-aclm ” и началом имени - пустое пространство. Длинна - длинна строки данных для переменной. Сама строка начинается со следующей строки, и сопровождается символом новой строки. Она может содержать внутренние новые строки.
“-active_hostname <hostname> ” - Она присутствует, если сообщение было передано через SMTP, и значение “$smtp_active_hostname ” отличается от значения “$primary_hostname ”.
“-allow_unqualified_recipient ” - Она представлена если в строках заголовков разрешён неквалифицированный адрес получателя (для предотвращения таких адресов от квалификации, если перезапись происходит в транспортное время). Локальные сообщения, которые были введены используя “-bnq ” и удалённые сообщеняи от хостов, которые совпадают с “recipient_unqualified_hosts ” устанавливают этот флаг.
“-allow_unqualified_sender ” - Она представлена если в строках заголовков разрешён неквалифицированный адрес отправителя (для предотвращения таких адресов от квалификации, если перезапись происходит в транспортное время). Локальные сообщения, которые были введены используя “-bnq ” и удалённые сообщеняи от хостов, которые совпадают с “sender_unqualified_hosts ” устанавливают этот флаг.
“-auth_id <text> ” - Идентификационная информация для сообщения, полученного в аутентифицированной сессии - значение переменной “$authenticated_id ”.
“-auth_sender <address> ” - Адрес аутентифицированного отправителя - значение переменной “$authenticated_sender ”.
“-body_linecount <number> ” - Тут записано число строк сообщения, и присутстсвует всегда.
“-body_zerocount <number> ” - Тут зписано число бинарных нулей в теле сообщения, и она представлена если число больше нуля.
“-deliver_firsttime ” - Она записывается когда новое сообщение первый раз добавляется в спул. Когда файл спула обновлятся после задержки, она опускается.
“-frozen <time> ” - Сообщение заморожено, и заморозка произошла в “<time> ”.
“-helo_name <text> ” - Она записывает имя хоста заданное удалённым хостом в команде HELO или EHLO.
“-host_address <address>.<port> ” - Она записывает IP-адрес хоста с которого передано сообщение и номер использованного удалённого порта. Она опускается для локально сгенерённых сообщений.
“-host_auth <text> ” - Если сообщение передано через аутентифицированное SMTP соединение, она записывает имя аутентификатора - значение переменной “$sender_host_authenticated ”.
“-host_lookup_failed ” - Она представлена если попытка поиска имени хоста отправителя по его IP-адресу была неудачной. Она соответствует переменной “$host_lookup_failed ”.
“-host_name <text> ” - Она записывает имя удалённого хоста с которого было передано сообщение, если имя хоста найдено из IP-адреса, когда сообщение было получено. Она отстутствует, если обратный поиск не был завершён.
“-ident <text> ” - Для локально переданных сообщений, эта запись - логин исходного пользователя, кроме случая когда пользователь доверенный и для задания значения ident использовалась опция “-oMt ”. Для сообщений переданных через TCP/IP, эта запись - строка ident, предоставленная удалённым хостом, если она была.
“-interface_address <address>.<port> ” - Это - запись IP-адреса локального интерфейса и имя порта через который сообщение было принято с удалённого хоста. Она опущена для локально сгенерированных сообщений.
“-local ” - Сообщение от локального отправителя.
“-localerror ” - Сообщение - локально сгенерированный рикошет.
“-local_scan <string> ” - Она записывает строку данных которую вернула функция “local_scan() ”, когда сообщение было получено - значение переменной “$local_scan_data ”. Она опущена, если данных возвращено не было.
“-manual_thaw ” - Сообщение было заморожено, но было оттаяно вручную, т.е. явной командой exim'a, а не процессом автооттаивания.
“-N ” - Процесс тестирования был начат используя опцию “-N ” для подавления любых актуальных доставок, но доставка задержана. Для любых последующих попыток доставки, “-N ” - присутствует.
“-received_protocol ” - Она записывает значение переменной “$received_protocol ”, которая содержит имя протокола, по которому было получено сообщение.
“-sender_set_untrusted ” - Отправитель конверта этого сообщения был установлен недоверенным локальным вызовом (используется для гарантии, что вызывающий показан в списках очереди).
“-spam_score_int <number> ” - Если сообщение было просканировано SpamAssassin, она присутствует Она записывает значение “$spam_score_int ”.
“-tls_certificate_verified ” - TLS сертификат был получен от клиента, который послал это сообщение, и сертификат был проверен сервером.
“-tls_cipher <cipher name> ” - Когад сообщение получено через шифрованное соединение, она записывает имя использовавшегося алгоритма шифрования.
“-tls_peerdn <peer DN> ” - Когда сообщение было получено по шифрованному соединению, и сертификат был передан с клиента, она записывает Distinguished Name (DN) этого сертификата.
После опций присутствует список тех адресов на которые сообщение не было доставлено. Этот набор адресов инициализируется из командной строки когда используется опция “-t ” и установлена “extract_addresses_remove_arguments ”; иначе она выпускается пустой. Каждый раз, когда произведена успешная доставка, адрес добавляется к этому набору. Адреса сохраняются внутренне, как балансированное бинарное дерево, и это - представление того деревакоторое пишется в файл спула. Если адрес раскрывается через файл альясов или форвардов, оригинальный адрес добавляется к дереву, когда завершается доставка всех дочерних адресов.
Если дерево пусто, присутствует единственная строка в файле спула, содержащая лишь текст “XX ”. Иначе, каждая строка содержит две буквы, являющиеся “Y ” или “N ”, сопровождаемые адресом. Адрес - значение для узла дерева, и буквы индицируют, имеет ли узел присоединенннёю левую ветвь и/или правую ветвь, соответственно. Если ветви существуют, они следуют немедленно. Вот пример дерева с тремя узлами:
YY darcy@austen.fict.example
NN alice@wonderland.fict.example
NN editor@thesaurus.ref.example
| После дерева неполучателей,есть список получателей сообщения. Это простой список, с предществующим счётчиком. Он включает оригинальных получателей сообщения, включая те, кому сообщение уже доставлено. В простом случае, список содержит один адрес на строку. Например:
4
editor@thesaurus.ref.example
darcy@austen.fict.example
rdo@foundation
alice@wonderland.fict.example
| Однако, когда дочерний адрес добавляется к списку вышестоящих адресов как результат использования опции “one_time ” в роутере “redirect ”, каждая строка имеет следующую форму:
<top-level address> <errors_to address> <length>,<parent number>#<flag bits>
| Флаг 01 указывает присутствие трёх других полей, которые сопровождают адрес высшего уровня. Иные биты могут использоваться в будущем, для поддержки дополнительных полей. Смещение “<parent number> ” в списке получателей оригинального родителя адресов “one time ” (нифига не понzл чё написал - прим. lissyara). Первые два поля - отправитель конверта, который ассоциирован с этим адресом и его длиной. если длинна - ноль, специальный отправитель конверта отстутствует (тогда в строке два символа пробела). Непустое поле может являться результатом роутера “redirect ” у котором установлена “errors_to ”.
Пустая строка отделяет конверт и статутсную информацию от следующих заголовков. Заголовок может занять несколько строк файла, и с целью экономии усилий при его чтении, каждому заголовку предшествует число и идентификационный символ. Число - чисто символов в заголовке, включая любые встроенные новые строки и завершающую новую строку. Символ - один из следующиж:
символ
|
значение
|
<blank>
|
заголовок который не интересует exim
|
B
|
заголовок Bcc:
|
C
|
заголовок Cc:
|
F
|
заголовок From:
|
I
|
заголовок Message-id:
|
P
|
заголовок Received: (P - означает почтовый штемпель)
|
R
|
заголовок Reply-To:
|
S
|
заголовок Sender:
|
T
|
заголовок To:
|
*
|
заменённый или удалённый заголовок
|
|
Удалённые или заменённые (перезаписанные) заголовки остаются в файле спула для отладки. Они не передаются при доставке сообщения. Вот - типичный набор заголовков:
111P Received: by hobbit.fict.example with local (Exim 4.00)
id 14y9EI-00026G-00; Fri, 11 May 2001 10:28:59 +0100
049 Message-Id: <E14y9EI-00026G-00@hobbit.fict.example>
038* X-rewrote-sender: bb@hobbit.fict.example
042* From: Bilbo Baggins <bb@hobbit.fict.example>
049F From: Bilbo Baggins <B.Baggins@hobbit.fict.example>
099* To: alice@wonderland.fict.example, rdo@foundation,
darcy@austen.fict.example, editor@thesaurus.ref.example
104T To: alice@wonderland.fict.example, rdo@foundation.example,
darcy@austen.fict.example, editor@thesaurus.ref.example
038 Date: Fri, 11 May 2001 10:28:59 +0100
| Заголовки помеченные звёздочкой индицируют, что отправитель конверта, заголовок “From: ”, и заголовок “To: ” были перезаписаны, последний потому что роутинг привёл к неквалифицированному домену “foundation ”.
=============
translated by lissyara
verifying by Gerk
|
|