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