Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
|||||||||||||||||||||||||||||||||||||||
www.lissyara.su
—> документация
—> EXIM
|
|
может привети к такому выводу
|
который показывает, что перезапись была установлена для этого адреса, когда он используется в любых исходных полях, но не когда он появляется как адрес получателя. В настоящее время, нет никакого альтернативного способа протестировать правила перезаписи установленные для специфического транспорта.
31.4 Правила перезаписи
Секция перезаписи, в конфигурационном файле, содержит строки правил перезаписи, в форме:
“
<source pattern> <replacement> <flags>
”
“
Правила перезаписи, которые заданы для общей транспортной опции headers_rewrite
”, даны в в виде списка, разделённого двоеточиями. Каждый элемент в списке принимает такую же форму, как строка в главной конфигурации перезаписи (исключая, разумеется, что любые двоеточия должны быть удвоены).
“
Формат исходных шаблонов, и строк замены описаны ниже. Каждый - завершается пустым пространством (пробелом), если он не находится в двойных кавычках, в этом случае, применяются обычные соглашения о квотировании (помещении в двойные кавычки, экранировке - прим. lissyara). Флаги - единственные символы, которые могут появляться в любом порядке. Пробелы и символы табуляции, между ними, игнорируются.
Для каждого адреса, который, потенциально, может быть перезаписан, правила сканируются по порядку, и замены для адресов из ранних правил, могут быть самостоятельно заменены более поздними правилами (но, смотрите флаги q
” и
“R
”).
“
Порядок в котором перезаписываются адреса - не задан, может измениться между релизами, и на него нельзя положиться, с одним исключением: когда сообщение получено, отправитель конверта всегда перезаписан первым, до перезаписи любых строк заголовков. например, строка замены, для перезаписи адреса в To:
”, не должна предполагать, что адрес сообщения в
“From:
” был (или небыл) уже перезаписан. Однако, перезапись
“From:
” может предположить, что отправитель конверта уже был перезаписан.
“
Переменные $local_part
” и
“$domain
” могут быть использованы в строке замены, для ссылки на перезаписываемый адрес. Отметтьте, что управляемая поиском перезапись не может быть сделана правилом в форме
|
где ключ поиска использует
“$1
” и
“$2
”, или
“$local_part
” и
“$domain
” для ссылки на перезаписываемый адрес.
31.5 Шаблоны перезаписи
Исходные шаблоны в правилах перезаписи - это любой элемент, который может появиться в списке адресов (смотрите раздел 10.18). Фактически, он обрабатывается как одноэлементный список адресов, что означает, что он раскрывается до проверки адресов. Как всегда, если в шаблоне вы используете регулярное выражение, вы должны позаботиться о экранировке символов доллара и обратного слэша, или использовать средство
“\N
”, для подавления раскрытия строки в пределах регулярного выражения.
“
Домены, в паттернах (шаблонах, или образцах - прим. lissyara), должны быть даны в строчных (маленьких) буквах. Локальные части, в паттернах, чувствительны к регистру. Если вы хотите сделать регистронезависисимое сравнение локальных частей, вы должны использовать регулярное выражение начинающееся с ^(?i)
”.
“
После совпадения, числовые переменные $1
”,
“$2
” и т.д., могут быть установлены, в зависимости от произошедшего типа соответствия. Это может использоваться в строках замены, для вставления части входящего адреса.
“$0
” - всегда совпадает с полным входящим адресом. Когда используется регулярное выражение, числовые переменные установлены из его подвыражений. Для других типов шаблонов, они устанавливаются следующим образом:
Если локальная часть, или домен, начинаются со звёздочки, числовые переменные ссылаются на строки символов, совпадающие со звёздочками, с
“$1
” - ассоциированной с первой звёздочкой,
“$2
” - со второй, если она представлена. Например, паттерн
|
сравнивается с адресом
“hearts-queen@wonderland.fict.example
”, тогда
|
Отметтьте, чт если локальная часть не начинается со звёздочки, но домен начинается, тогда
“$1
” будет содержать совпавшую часть домена.
Если доменная часть паттерна - частичный поиск, совпавшие и фиксированные части домена помещаются в следующие доступные числовые переменные. Предположим, например, что адрес
“foo@bar.baz.example
” - обрабатывается по правилу перезаписи в форме
|
и ключ в файле, соответствует домену в форме
“*.baz.example
”. Тогда
|
Если адрес
“foo@bar.baz.example
” находится, он совпадает с тем же вхождением подстановочного знака, и в случае
“$2
” - устанавливается в пустую строку, но
“$3
” всё ещё совпадает с
“baz.example
”. Если неподстановчный ключ совпадает с частичным поиском,
“$2
” снова устанавливается в пустую строку, и
“$3
” устанавливается в весь домен. Для нечастичных поисков поисков домена, никакие числовые переменные незаданы.
31.6 Перезапись замен
Если строка замены для правила - единственная звёздочка, адрес, который совпадает с паттерном, и флаги не перезаписываются, и никакие последующие правила перезаписи не просматриваются. Например,
|
определяет, что
“hatta@lookingglass.fict.example
” - никогда не будет перезаписан в в заголовках
“From:
”.
“
Если заменяющая строка - не единственная звёздочка, она раскрывается, и должна привести к полностю квалифицированному адресу (с доменной частью - прим. lissyara). В пределах раскрытия, переменные $local_part
” и
“$domain
” ссылаются на перезаписываемый адрес. Любые буквы, которые они содержат, сохраняют их оригинальный регистр, - они не преобразуются в нижний регистр. Числовые переменные установлены согласно типу паттерна, совпадающего с адресом, как описано выше. Если раскрытие принудительно неудачно, путём присутствия
“fail
” в условном элементе, или элементе поиска, перезапись путём текущего правила оставлена, но последующие правила могут вступить в силу. Любые другие ошибки раскрытия вызывают пропуск всей операции перезаписи, и вход пишется в лог паники.
31.7 Флаги перезаписи
Есть три различных вида флагов, которые могут появляться в правилах перезаписи:
Флаги, которые определяют, какой заголовок и адрес конверта перезаписывать:
“E
”,
“F
”,
“T
”,
“b
”,
“c
”,
“f
”,
“h
”,
“r
”,
“s
”,
“t
”.
Флаг, который определяет перезапись во время SMTP:
“S
”.
Флаги, которые контролируют процесс перезаписи:
“Q
”,
“q
”,
“R
”,
“w
”.
Для правил являющихся частью общей транспортной опции
“headers_rewrite
”,
“E
”,
“F
”,
“T
” и
“S
” не разрешены.
31.8 Флаги, определяющие какие заголовки и адрес конверта перезаписывать
Если нет ни одного из следующих флагов, ни флага
“S
” (смотрите раздел 31.9), главное правило перезаписи применяется ко всем заголовкам, полям отправителя и получателя конверта, тогда как правило перезаписи в транспортное время, применяется лишь ко всем заголовкам. Иначе, правило перезаписи пропускается, если не обрабатываются релевантные адреса.
|
Вам надо быть осторожным при перезаписи заголовков
“Sender:
”, и ограничить ее изветсными специальными случаями в ваших доменах.
31.9 Флаг перезаписи во время SMTP
Флаг перезаписи
“S
” определяет перезапись входящих адресов конверта во время SMTP, как только адрес получен в команде MAIL или RCPT, и до любых других процессов; даже до проврки синтаксиса. Паттерн обязан быть регулярным выражением, и он сравнивается с любыми данными для команд, включая любые соседние угловые скобки.
“
Форма правила перезаписи позволяет обработать адреса, которые не соответствуют RFC2821 и RFC2822 (например, адреса с восклицательными знаками, в пактном SMTP-вводе). Поскольку ввод не обязан быть синтаксически правильным адресом, переменные $local_part
” и
“$domain
” недоступны в процессе раскрытия строки. Результат перезаписи замещает оригинальный адрес в командах MAIL и RCPT.
31.10 Флаги контролирующие процесс перезаписи
Есть четыре флага, которые контролируют работу процесса перезаписи. Они вступают в силу лишь когда правило вызвано, т.е. когда адрес корректного типа (совпадает с флагами), и соответствуют паттерну:
Если в правиле установлен флаг
“Q
”, перезаписанному адресу разрешается быть неквалифицированной локальной частью. Она квалифицируется с
“qualify_recipient
”. В отсутствии
“Q
” перезаписанный адрес всегда должен включать домен.
Если в правиле установлен флаг
“q
”, никакие дальнейшие правила перезаписи не рассматриваются, даже если небыло фактической перезаписи, поскольку в раскрытии присутствовало
“fail
”. Флаг
“q
” неэффективен, если адрес неверного типа (несоответствует флагам), или несовпадает с паттерном.
Флаг
“R
” вызывает повторное применение успешного правила перезаписи к новому адресу, до десяти раз. Это может быть скомбинировано с флагом
“q
”, для прекращения перезаписи как только будет несоответствие (после по крайней мере одной успешной перезаписи).
Когда адрес в заголовке перезаписан, перезапись, обычно, применяется лишь к рабочей части адреса, с оставленными неизменными любыми комментариями и фразой RFC2822. Например, перезапись может изменить
|
на
|
Иногда, есть потребность изменить весь элемент адреса, и это может быть сделано путём добавления флага
“w
” к правилу. Если он установлен для правила, вызывающего перезапись адреса в строке заголовка, заменяется весь адрес, а не только рабочая часть. Замена должна быть полным адресом согласно RFC2822, включая угловые скобки, если есть необходимость. Если текст вне угловых скобок, содержит символ чьё значение более 126 или менее 32 (исключая табуляцию), текст кодируется согласно RFC2047. Кодировка берётся из
“headers_charset
”, значение по умолчанию которой - ISO-8859-1.
“
Когда флаг w
” установлен для правила перезаписи адреса конверта, отбрасывается всё, кроме рабочей части.
31.11 Примеры перезаписи
Вот - пример двух обычных образцов перезаписи:
|
Отметтьте, что использование
“fail
” в поиске, во втором правиле, вызывает принудительную неудачу, в случае безуспешного поиска. В этом контексте, это имеет эффект оставления оригинального адреса неизменным, но exim продолжает рассмотрение последующих правил, если таковые имеются, поскольку в этом правиле не присутстсвует флаг
“q
”. Альтернативой для
“fail
”, могда бы быть явная вставка
“$1
”, которая вызвала бы перезапись адреса прежним, за счёт маленького бита обработки. Непредоставление любого из них - ошибка, так как перезаписанный адрес не вообще содержал бы локальной части.
Первый пример, выше, заменяет домен вышестоящим, более общим доменом. Возможно, это нежелательно для некоторых локальных частей. Если правило
|
было вставлено до первого правила, перезапись будет подавлена для локальной части
“root
” в любом домене, заканчивающемся на
“hitch.fict.example
”.
“
Перезапись может быть сделана условной, в ряде тестов, путём использования ${if
” в элементе раскрытия. Например, для применения правил перезаписи лишь для сообщений, который созданы вне локального хоста:
|
Строка замены, в этом примере, помещена в кавычки, поскольку она содержит пустое пространство.
“
Exim не обрабатывает адреса в форме адресов с восклицательными знаками
” (
“bang paths
” - хрен его знает что это. - прим. lissyara). Если он видит такой адрес, он обрабатывает его как неквалифицированную локальную часть, которую он квалифицирует с локальным квалификационным доменом (если источник сообщения локальный, или если удалённому хосту разрешается посылать неквалифицированные адреса). Перезапись может, иногда, использоваться для обработки простых адресов с восклицательным знаком, с фиксированным числом компонентов. Например, правило
|
перезаписывает двухкомпонентный адрес с восклицательным знаком
“host.name!user
”, как доменный адрес
“user@host.name
”. Однако, тут замешана безопасность, в использовании этого как глобального перезаписывающего правила, для адресов конверта. Это может предоставить чёрный ход для использования вашей системы как релея, поскольку входящие адреса кажутся локальными. Если адреса с восклицательными знаками получены через SMTP, более безопасно использовать флаг
“S
”, для их перезаписи при получении, так, чтобы проверка релея могла быть сделана на перезаписанных адресах.
=============
translated by lissyara
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK