|
|
www.lissyara.su
—> документация
—> EXIM
—> 4.62
—> часть 52
52. Формат файлов спула
Сообщение в очереди exim`a состоит из двух файлов, чьи имена - идентификатор сообщения, сопровождаемый “-D ” и “-H ”, соответственно. Часть данных сообщения сохранется отдельно в файле “-D ”. Конверт сообщения, статус и заголовки сохраняются в файле “-H ”, чей формат описан в этой части. Каждый из этих двух файлов содержит финальный компонент его собственного имени, как его первая строка. Это страховка от дисковых ошибок, когда директория потеряна, но сами файлы - восстановимы.
Некоторые люди соблазняются редактированием файлов “-D ” с целью модифицировать сообщения. Вы должны быть черезвычайно осторожными, если делаете это; это не рекомендуется, и вы делаете это на свой страх и риск. Вот, некоторые из ловушек:
Вы должны гарантировать, что exim не попытается доставить сообщение в тот момент когда вы играетесь с ним. Самый безопасный способ - заблокировать “-D ” файл, также как это делает exim - используя “fcntl() ”. Если вы обновите файл на месте, блокировка останется. Если вы запишете новый файл и переименуете его, блокировка будет потеряна в момент переименования.
Если вы измените число строк в файле, значение “$body_linecount ”, которое сохранено в файле “-H ”, будет некорректным. В настоящее время, это значение не используется exim`ом, но нет никаких гарантий, что так будет и дальше.
Если сообщение в формате MIME, вы должны позаботиться, чтобы не повредить его.
Если сообщение криптографически подписано, любое изменение делает подпись недействительной.
Файлы, чьи имена заканчиваются на “-J ”, также могут быть замечены в директории “input ” (или в её субдиректориях, когда установлена “split_spool_directory ”). Это файлы журналов, используемые для записи адресов на которые сообщение было доставлено во времяработы доставки. В конце доставки, файл “-H ” обновляется, и файл “-J ” - удаляется.
52.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 <number> <length> ” - Строка этой формы представлена для каждой переменной ACL соединения, которая не пуста. Число идентифицирует перемнную. Длинна - длинна строки данных для переменной. Сама строка начинается со следующей строки, и сопровождается символом новой строки. Она может содержать внутренние новые строки.
“-aclm <number> <length> ” - Строка этой формы представлена для каждой переменной ACL сообщения, которая не пуста. Число идентифицирует перемнную. Длинна - длинна строки данных для переменной. Сама строка начинается со следующей строки, и сопровождается символом новой строки. Она может содержать внутренние новые строки.
“-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
Ссылка на обсуждение: http://forum.lissyara.su/viewforum.php?f=20.
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
|