Роутер “redirect” обрабатывает несколько видов переназначения адресов. Его самое частое использование - для разрешения локальной части альяса по центральному файлу альясов (обычно это “/etc/aliases”), и для обработки пользовательского файла “.forward”, но также есть много других потенциальных использований. Входящий адрес может быть переадресован несколькими различными способами:
Он может быть заменён одним, или более, новым адресом, которые будут роутится самостоятельно.
Он может быть маршрутизирован для доставки в файл или директорию.
Он может быть доставлен в специфическую трубу (pipe).
Можно сделать автоматический ответ.
Он может принудительно стать неудачным (fail), с самостоятельным сообщением об ошибке.
Он может быть временно задержан.
Он может быть отброшен.
Общая опция “transport” не должна быть установлена для роутера “redirect”. Однако, есть некоторые частные опции с заданным транспортом, для доставки в файлы и трубы, и для генерации автоответов.Смотрите описания “file_transport”, “pipe_transport” и “reply_transport” ниже.
22.1 Данные для перенаправления
Роутер функционирует путем интерпретации текстовой строки, которая получается либо в результате преобразования содержимого опции “data”, либо в результате чтения содержимого файла, чье имя определено опцией “file”. Эти две опции являются взаимоисключающими. Первая из них часто используется для обработки системных псевдонимов, в конфигурации наподобие данной:
system_aliases:
driver = redirect
data = ${lookup{
$local_part}lsearch{/etc/aliases}}
Если поиск завершился неудачно, то раскрываемая строка в этом примере - пустая. В случае неудачного раскрытия опции “data” - роутер пропускается. Принудительное завершение преобразования также ведет к пропуску роутера; другие ошибки раскрытия приводят к тому, что доставка временно откладывается.
Конфигурация с опцией “file” часто используется для обработки пользовательских
файлов “.forward”, например таким образом:
Если файл не существует или не содержит никаких инструкций по выполнению (например, файл пуст или содержит только комментарии), то роутер пропускается. Внимание: это не тот случай, когда файл содержит синтаксически допустимые элементы, которые могут иногда выдавать пустые адреса, например элементы, содержащие только адресные комментарии в соответствии с RFC2822.
22.2 Файлы пересылки (forward files) и проверка адреса
Обычной практикой является установка опции “no_verify” на роутерах “redirect”, обрабатывающих пользовательские файлы “.forward”, как в вышеописанном примере. Для этого существуют 2 причины:
Когда Exim принимает входящее SMTP-сообщение от удаленного узла, то он запускается от имени пользователя Exim (Exim uid), а не от имени суперпользователя (root). При этом не устанавливается никаких дополнительных групп, даже если пользовательский идентификатор(uid) Exim'а является членом других групп (т.е. функция “
initgroups()
” не вызывается). Exim не может изменить uid для чтения файла, чтобы прочитать его как владелец, а также возможно файл не будет доступен для чтения пользователю Exim. Таким образом, на практике роутер может не функционировать.
Однако, даже когда роутер может работать, существование файла “.forward” неважно в то время когда адрес проверяется. Должно быть проверено только является ли локальная часть адреса допустимым именем пользователя или нет. Если убрать обработку перенаправления в данном случае, то это сохранит некоторые ресурсы.
22.3 Обработка данных перенаправления
Содержимое строки данных, полученное либо через “data”, либо через “file”, может быть интерпретировано двумя разными способами:
Если опция “allow_filter” установлена в истинное значение и данные начинаются со строки “#Exim filter” или “#Sieve filter”, то содержимое интерпретируется как список “фильтрующих” инструкций в форме фильтров Exim или Sieve соответственно. Подробности синтаксиса и семантики файлов фильтров описаны в отдельном документе “Интерфейсы Exim к фильтрации почты”; предназначенном конечным пользователям.
В противном случае, данные должны представлять собой список элементов перенаправления (redirection items), разделенных “,”, как описано в следующей секции.
Когда сообщение перенаправляется в файл (“почтовая папка”), имя файла, описанного в списке перенаправления, не являющимся фильтром, должно быть абсолютным (т.е. до него указан полный путь). Фильтр может генерировать относительный путь - то, как это обрабатывается зависит от конфигурации транспорта. См. секцию 26.1 для описания этой темы, для транспорта “appendfile”.
22.4 Элементы списка перенаправления
Если данные перенаправления не являются фильтрами Exim и Sieve, например, если они были получены из файла псевдонимов или файла “.forward”, то они содержат список адресов, имен файлов, конвейерных команд или специальных элементов (см. секцию 22.6 ниже). Эти специальные элементы могут быть индивидуально включены или отключены посредством опций, начинающихся с “allow_” или “forbid_”, в зависимости от значений по умолчанию. Элементы в списке разделены “,” или новыми строками. Если в элементе требуется символ “,”, то весь элемент должен быть заключен в двойные кавычки.
Строки, начинающиеся с символа “#” являются комментариями и игнорируются, также может встретиться символ “#” с последующей “,”, в этом случае все, что находится между “#” и следующим символом новой строки, игнорируется.
Если элемент целиком заключен в двойные кавычки, то они опускаются. В противном случае, они остаются потому как некоторые формы почтовых адресов требуют их использования (но никогда в кавычки не берется адрес целиком). В следующем описании под “элементом” понимается то, что остается после опускания кавычек. Внимание: Если вы используете преобразование Exim для построения адреса перенаправления, и преобразование содержит ссылку на “
$local_part
”, то вы должны использовать оператор раскрытия “quote”, на случай если локальная часть почтового адреса содержит спецсимволы. Например, чтобы перенаправить всю почту для домена “obsolete.example”, оставив неизменным существующую локальную часть адреса, то вы можете использовать такую конструкцию:
data = ${quote:$local_part}@newdomain.example
22.5 Перенаправление в локальный почтовый ящик
Элемент в списке перенаправления может быть в точности самим адресом. Это не вызовет зацикливания маршрутизации, потому что роутер автоматически пропускается если родительский адрес обрабатываемого адреса совпадает с ним и обрабатывался он текущим роутером. Далее адрес передается следующим роутерам, таким образом он обрабатывается как будто бы не было никакого перенаправления. В процессе проверки зацикливания используется полная локальная часть почтового адреса, включая префиксы и суффиксы.
Указание той же локальной части почтового адреса без указания домена в персональных файлах фильтров является обычной практикой в том случае, если пользователь хочет, чтобы сообщения доставлялись в локальный почтовый ящик а также перенаправлялись еще куда-нибудь. Например, пользователь с учетной записью “cleo” может иметь файл “.forward”, содержащий такую запись:
Для совместимости с другими MTA, такие локальные части могут быть предварены символом “\”, но это не является требованием для предотвращения зацикливания. Однако, это дает разницу если таким образом обрабатывается более одного домена.
Если элемент начинается с символа “\” и остальная часть его является адресом, соответствующим RFC2822, не включающим в себя домен, то этот элемент дополняется доменом входящего адреса. В отсутствие предшествующего символа “\” неполные адреса дополняются используя значение опции “qualify_recipient”, но вы можете принудительно изменить входящий домен, используя опцию “qualify_preserve_domain”.
Если существуют псевдонимы для локальных пользователей, то нужно быть осторожным. Рассмотрим MTA, обрабатывающий простой локальный домен, где системный файл псевдонимов содержит:
Sam.Reman: spqr
Теперь предположим, что Сэм (чей идентификатор - “spqr”) хочет сохранять копии сообщений в локальном почтовом ящике, а также перенаправлять копии куда-либо еще. Он создает такой файл перенаправления:
С подобными настройками входящее сообщение для “Sam.Reman” отклоняется. Роутер redirect для системных псевдонимов не обрабатывает “Sam.Reman” второй раз, потому как он уже маршрутизировал его, и следующие роутеры по-видимому тоже не смогут обработать псевдоним. Файл перенаправления должен на самом деле содержать:
но т.к. это распространенная ошибка, то существует опция “check_ancestor” (см. ниже) для ее обхода. Обычно она определяется в роутере, обрабатывающем пользовательские файлы “.forward”.
22.6 Специальные конструкции в списках перенаправления
Вдобавок к адресам в списках перенаправления (не являющихся фильтрами) могут быть следующие типы конструкций:
Элемент рассматривается как команда перенаправления если он начинается с символа “|” и не распознается как адрес соответствующий RFC2822. Транспорт для запуска этой команды должен быть определен опцией “pipe_transport”. Обычно, пользователь и группа, от имени которых выполняется доставка, определяются роутером или транспортом. По умолчанию, используются пользователь и группа, отведенные для Exim.
Одинарные или двойные кавычки могут использоваться для заключения аргументов команды перенаправления, причем для одинарных кавычек интерполяция содержимого внутри не производится. Если команда содержит символ “,”, то ее необходимо поместить в двойные кавычки, например:
"|/some/command ready,steady,go"
т.к. элементы в списках перенаправления оканчиваются “,”. Однако недопустимо помещать в кавычки только команду. Например,
|"/some/command ready,steady,go"
интерпретируется как перенаправление вывода с довольно странным именем команды без аргументов.
Элемент интерпретируется как путь если он начинается с “/” и не распознается как адрес соответствующий RFC2822. Например,
/home/world/minbari
трактуется как имя файла, но
/s=molari/o=babylon/@x400gate.way
распознается как адрес. Для файла должен быть определен транспорт при помощи опции “file_transport”. Однако, если путь оканчивается символом “/” то он интерпретируется как имя директории, а не имя файла, и в этом случае используется опция “directory_transport”.
Обычно, пользователь и группа, от имени которых выполняется доставка, определяются роутером или транспортом. По умолчанию, используется пользователь и группа, из под которых работает Exim. Однако, если перенаправление производится в “/dev/null”, то доставка в него передается на высокий уровень, и запись в логе выглядит как “**bypassed**” вместо имени транспорта. В этом случае, пользователь и группа не используются.
Если элемент выглядит таким образом:
:include:<path name>
то он представляет собой список дальнейших элеменотв, которые берутся из файла, находящегося по данному пути. Замечание: этот файл не может быть файлом фильтров; он является просто добавлением к списку. Элементы во включаемом списке разделяются “,” или новыми строками. Если это первый элемент в списке псевдонимов в файле, то имя псевдонима должно отделяться “:”. Следующий пример неверен:
list1 :include:/opt/lists/list1
Должно быть так:
list1: :include:/opt/lists/list1
Иногда вы хотите выбрасывать почту с определенной локальной частью почтового адреса. Способ преобразования опции “data” в пустую строку не работает потому как он заставляет роутер отклонять сообщение. Вместо этого, используется специальный элемент:
:blackhole:
То, что он делает, видно из его названия. Не происходит никакой доставки, и не генерируется сообщения об ошибке. Это приводит к такому же эффекту, что и указание “/dev/null”, однако это может быть избирательно выключено.
Внимание: Если “:blackhole:” указано где-либо в списке перенаправления, то
доставка для исходной локальной части почтового адреса не выполняется, даже если присутствуют другие элементы перенаправления. Если вы создаете многоэлементный список (например, путем чтения из базы данных) и вам нужна возможность обеспечить элемент такого, который не выполняет доставку, то вы должны использовать “/dev/null”.
Попытка доставки почты для определенного адреса может быть отложена или принудительно завершена неудачно при помощи элементов:
:defer:
или
:fail:
соответственно. Если список перенаправления содержит такой элемент, то он применяется ко всему списку; другие элементы в списке игнорируются (кроме “:blackhole:”). Любой текст следующий за “:fail:” или “:defer:” помещается в сообщение об ошибке, ассоциированное с этой неудачной доставкой. Например, файл псевдонимов может содержать:
X.Employee: :fail: Gone away, no forwarding address
В случае адреса, проверяемого из ACL или командой VRFY, текст включается в сообщение об SMTP-ошибке по умолчанию. В ACL явно описанное сообщение об ошибке перекрывает сообщение по умолчанию, но то в свою очередь доступно в переменной “
$acl_verify_message
”. Exim посылает код SMTP 451 для “:defer:” и 550 для “:fail:”. В не-SMTP случаях текст включается в формируемое Exim'ом сообщение об ошибке.
Обычно текст сообщения об ошибке располагается в конце списка перенаправления - символ “,” не завершает его - но символ новой строки действует как завершение списка. Новые строки обычно не присутствуют в списках псевдонимов. В поисках типа “lsearch” они удаляются в процессе преобразования, но они могут существовать в других типах поиска и в файлах “:include:”.
Во время маршрутизации сообщения (в отличие от проверки) перенаправление, содержащее элемент “:fail:” вызывает немедленное отклонение входящего адреса в то время как “:defer:” указывает сообщению оставаться в очереди так, что последующая попытка доставки может произвестись позже. Если адрес откладывается слишком долго, он может в конечном счете отклониться полностью, так как срабатывают правила повтора.
Иногда полезно использовать одноключевой (single-key) тип поиска (см. главу 9) для поиска псевдонимов. Однако, может быть потребность для исключений их этого. Они могут быть обработаны путем псевдонимизации их к:
:unknown:
Отличие от “:fail:” состоит в том, что это заставляет роутер “redirect” отклонять сообщение, в то время как “:fail:” маршрутизацию принудительно завершает неудачно. Поиск, результатом которого является пустой список перенаправления, имеет тот же эффект.
22.7 Дублирование адресов
Exim убирает дублированные адреса из списка адресов, к которым совершается доставка, так что для каждого адреса доставляется только одна копия. Это правило не применяется к доставкам, перенаправляемым в потоки (pipes) различными родительскими адресами, однако непрямая схема псевдонимизации:
не работает с сообщением, адресуемым обеим локальным частям, потому как когда второй из них ссылается на “pipe”, он отбрасывается как уже обработанный. Однако, схема
выполнит доставку в различные потоки, т.к. родители потоков различны.
22.8 Повторяющееся преобразование перенаправления
В случае если сообщение не может быть доставлено всем адресатам за несколько попыток, то преобразование перенаправления проводится каждый раз заново для адресов, к дочерним адресам которых доставка не произошла. Если перенаправление используется как список рассылки, то это может привести к тому что новые подписчики получат копии старых сообщений. Опция “one_time” может помочь этого избежать.
22.9 Ошибки в списках перенаправления
Если установлена опция “skip_syntax_errors”, то неправильно написанный адрес, вызывающий ошибку разбора строки, пропускается, и в в главный лог-файл делается соответствующая запись. Это может быть полезно для автоматических списков рассылки. В любом случае, если в процессе генерации списка новых адресов обнаруживается ошибка, то родительский исходный адрес откладывается. См. также опцию “syntax_errors_to”.
22.10 Частные опции роутера “redirect”
опция
использование
тип
по-умолчанию
allow_defer
redirect
boolean
false
Установка этой опции позволяет использовать “:defer:” в данных перенаправления (не в фильтрах), либо команду “defer” в файле фильтров Exim.
опция
использование
тип
по-умолчанию
allow_fail
redirect
boolean
false
Если данная опция истинна, то элемент “:fail:” можно использовать в списке перенаправления, и команда “fail” может использоваться в файле фильтров.
опция
использование
тип
по-умолчанию
allow_filter
redirect
boolean
false
Установка этой опции позволяет Exim интерпретировать данные перенаправления,
начинающихся с “#Exim filter” или “#Sieve filter” как множество инструкций
по фильтрации. Есть несколько свойств файлов фильтров Exim, которые
некоторые администраторы могут захотеть запретить; см. опции “forbid_filter_xxx” ниже. Фильтр запускается от имени пользователя и группы, определенных общими опциями “user” и “group”. Они берут свои умолчательные значения из файла паролей если установлена опция “check_local_user”, так что в случае наличия пользовательских файлов фильтров фильтр запускается от имени соответствующего пользователя. Если опция “allow_filter” истинна, то Exim требует чтобы была выставлена опция “check_local_user” или “user”.
опция
использование
тип
по-умолчанию
allow_freeze
redirect
boolean
false
Установка этой опции позволяет использовать команду “freeze” в фильтре Exim. Эта команда чаще встречается в системных фильтрах, и выключена по умолчанию для фильтров перенаправления т.к. это не то, что вы бы хотели позволить делать обычным пользователям.
опция
использование
тип
по-умолчанию
check_ancestor
redirect
boolean
false
Эта опция связана с обработкой сгенерированных адресов, которые могут совпадать с некоторыми родительскими адресами в списке перенаправления для текущего адреса. Хотя данная опция по умолчанию выключена в исходном коде, она включается в файл конфигурации по умолчанию для обработки пользовательских файлов “.forward”. Данная опция рекомендуется для подобного использования роутера “redirect”.
Если установлена опция “check_ancestor”, и если сгенерированный адрес (включая домен) такой же как и родительский адрес текущего адреса, то он заменяется копией текущего адреса. Это помогает в случае когда локальная часть почтового адреса А псевдонимизируется на B, и B имеет файл “.forward”, указывающий обратно на А. Например, внутри домена, локальная часть “Joe.Bloggs” псевдонимизируется на “jb” и “~jb/.forward” содержит:
\Joe.Bloggs, <other item(s)>
Без установки опции “check_ancestor” любая из локальных частей почтового адреса (“jb” или “Joe.Bloggs”) обрабатывается каждым роутером один раз. Если “jb” - имя реального почтового ящика, то почта для “jb” доставляется (перенаправленная на “Joe.Bloggs” в файле “.forward” и обратно на “jb” как псевдоним), но почта на “Joe.Bloggs” не проходит. Установка “check_ancestor” на роутере “redirect”, который обрабатывает файл “.forward”, позволяет избежать переопределения “jb” обратно в “Joe.Bloggs”, если это был оригинальный адрес. См. ниже опцию “repeat_use”.
опция
использование
тип
по-умолчанию
check_group
redirect
boolean
смотрите ниже
Если используется опция “file”, то группа-владелец файла проверяется только если установлена эта опция. Разрешенные группы - это те, которые перечислены в опции “owngroups”, вместе с пользовательской группой по умолчанию в случае если установлена опция “check_local_user”. Если файл принадлежит неверной группе, то маршрутизация откладывается. Значение по умолчанию для этой опции - истина в случае если установлена опция “check_local_user” и опция “modemask” дает права на запись для группы, либо установлена опция “owngroups”. В любом другом случае она ложна и никаких проверок группы не выполняется.
опция
использование
тип
по-умолчанию
check_owner
redirect
boolean
смотрите ниже
Если используется опция “file”, то владелец файла проверяется только если установлена эта опция. Если установлена “check_local_user”, то локальный пользователь получает разрешение; в другом случае владелец должен быть одним из перечисленных в опции “owners”. Значение по умолчанию для этой опции - истина если установлены опции “check_local_user” или “owners”. В противном случае значение по умолчанию - ложь, и никаких проверок владельца не производится.
опция
использование
тип
по-умолчанию
data
redirect
string†
unset
Эта опция является взаимоисключающей с опцией “file”. Одна из них должна быть определена, но не обе одновременно. Содержимое опции “data” может преобразовываться, и затем использоваться как список элементов перенаправления, или как множество инструкций фильтров. Если преобразование выполняется неудачно или результатом является пустая строка или строка без эффекта (состоящая из комментариев), то роутер отклоняется.
Если используются инструкции фильтров, то строка должна начинаться с “#Exim filter”, и все комментарии в строке, включая этот, должны оканчиваться символом новой строки. Например:
data = #Exim filter\n\
if $h_to: contains Exim then save $home/mail/exim endif
Если вы читаете данные из базы, где символы новой строки не могут быть включены, то вы можете использовать элемент преобразования “
${sg}
” для преобразования шаблона строки последовательности в символ новой строки.
опция
использование
тип
по-умолчанию
directory_transport
redirect
string†
unset
Роутер “redirect” устанавливает прямую доставку в каталог если путь, оканчивающийся символом “/” определяется как новый “адрес”. Транспорт для доставки определяется этой опцией, который после преобразования должен быть именем сконфигурированного транспорта. Обычно им является транспорт “appendfile”.
опция
использование
тип
по-умолчанию
file
redirect
string†
unset
Данная опция определяет имя файла, содержащего данные для перенаправления. Она является взаимоисключающей с опцией “data”. Строка перед использованием преобразуется; если преобразование завершается неудачно - роутер отклоняется. Другие ошибки преобразования ведут к откладыванию доставки. Результатом успешного преобразования должен быть абсолютный путь. Файл читается целиком и используется как данные для перенаправления. Если данные представляют собой пустую строку или строку, состоящую из комментариев, то роутер отклоняется.
Если попытка открыть файл завершается неудачно вследствие того, что файл не существует, Exim выполняет проверку содержимого каталога, если только опция “ignore_enotdir” не установлена в истинное значение (см. ниже). Если каталог не существует, то доставка откладывается. Это может произойти в случае если пользовательские файлы “.forward” монтируются по NFS, и если существует проблема монтирования. Если каталог существует а файл - нет, роутер отклоняется.
опция
использование
тип
по-умолчанию
file_transport
redirect
string†
unset
Роутер “redirect” устанавливает прямую доставку в файл если имя пути не оканчивающееся “/” определено как новый “адрес”. Используемый транспорт в данном случае определяется этой опцией, которая после преобразования должна содержать имя сконфигурированного транспорта. Обычно таким транспортом является транспорт “appendfile”. В процессе его работы имя файла содержится в переменной “
$address_file
”.
опция
использование
тип
по-умолчанию
forbid_blackhole
redirect
boolean
false
Если данная опция истинна, то элемент “:blackhole:” не может быть указан в списке перенаправления.
опция
использование
тип
по-умолчанию
forbid_exim_filter
redirect
boolean
false
Если данная опция истинна, то только фильтры Sieve разрешены, когда опция “allow_filter” истинна.
опция
использование
тип
по-умолчанию
forbid_file
redirect
boolean
false
Если данная опция истинна, то роутер не может генерировать новый адрес, осуществляющий доставку в локальный файл или каталог либо посредством фильтра, либо посредством шаблонного файла пересылки (forward). Эта опция принудительно устанавливается в “истину” если установлена опция “one_time”. Она применяется как к фильтрам Sieve так и к фильтрам Exim, но если она истинна, то она блокирует возможность “keep” Sieve.
опция
использование
тип
по-умолчанию
forbid_filter_dlfunc
redirect
boolean
false
Если данная опция истинна, расктытию строки в фильре exim`a не позволяется использовать средство раскрытия “dlfunc” для выполнения динамически загружаемых функций.
опция
использование
тип
по-умолчанию
forbid_filter_existstest
redirect
boolean
false
Если данная опция истинна, то преобразования строк в фильтрах Exim не разрешаются для использования в условии “exists”.
опция
использование
тип
по-умолчанию
forbid_filter_logwrite
redirect
boolean
false
Если данная опция истинна, то использовать логгирование в фильтрах Exim не разрешено. Логгирование в любом случае доступно, если фильтр запускается от имени непривилегированного пользователя (что является нормальным для пользовательских файлов “.forward”).
опция
использование
тип
по-умолчанию
forbid_filter_lookup
redirect
boolean
false
Если данная опция истинна, то преобразования строк для использования элементов “lookup” в фильтрах Exim не разрешается.
опция
использование
тип
по-умолчанию
forbid_filter_perl
redirect
boolean
false
Эта опция доступна только в случае если Exim скомпилирован с поддержкой встроенного Perl. Если это так, то преобразования строк для использования встроенного Perl не разрешены.
опция
использование
тип
по-умолчанию
forbid_filter_readfile
redirect
boolean
false
Если эта опция истинна, то преобразования строк в файлах фильтров Exim для использования элементов “readfile” не разрешены.
опция
использование
тип
по-умолчанию
forbid_filter_readsocket
redirect
boolean
false
Если эта опция истинна, то преобразования строк в файлах фильтров Exim для использования элементов “readsocket” не разрешены.
опция
использование
тип
по-умолчанию
forbid_filter_reply
redirect
boolean
false
Если эта опция истинна, то данный роутер не может генерировать автоматический ответ. Автоответы могут генерироваться только из файлов фильтров Exim, но не из традиционных файлов перенаправления или фильтров Sieve. Данная опция автоматически становится истинной если определена опция “one_time”.
опция
использование
тип
по-умолчанию
forbid_filter_run
redirect
boolean
false
Если эта опция истинна, то преобразования строк в файлах фильтров Exim для использования элементов “run” не разрешены.
опция
использование
тип
по-умолчанию
forbid_include
redirect
boolean
false
Если данная опция истинна, то элементы вида:
:include:<path name>
запрещены в списках перенаправления, не являющихся фильтрами.
опция
использование
тип
по-умолчанию
forbid_pipe
redirect
boolean
false
Если данная опция истинна, то роутер не может генерировать новый адрес, определяющий доставку в трубу (pipe), равно как из фильтра Exim, так и из обычного файла перенаправления. Если установлена опция “one_time”, то данная опция автоматически становится истинной.
опция
использование
тип
по-умолчанию
hide_child_in_errmsg
redirect
boolean
false
Если данная опция истинна, то она вынуждает Exim скрывать дочерний адрес в случае, если генерируется сообщение об отказе в доставке или о задержке. Вместо этого подставляется адрес генерируемый <родительский адрес>. Конечно, это применимо только к генерируемым локально сообщениям об отказе в доставке. Если сообщение перенаправляется на другой хост, то сообщение об отказе может быть послано на генерируемый адрес.
опция
использование
тип
по-умолчанию
ignore_eacces
redirect
boolean
false
Если эта опция установлена и попытка открыть файл перенаправления вызывает ошибку EACCES (доступ запрещен), то роутер “redirect” ведет себя как будто файл не существует.
опция
использование
тип
по-умолчанию
ignore_enotdir
redirect
boolean
false
Если данная опция определена и попытка открыть файл перенаправления вызывает ошибку ENOTDIR (что-либо в пути не является директорией), то роутер ведет себя как будто файл не существует.
Установка “ignore_enotdir" имеет другой эффект: Когда роутер “redirect”, имеющий опцию “file”, обнаруживает что данный файл не существует (ошибка ENOENT), он пытается выполнить функцию “
stat()
” для родительской директории, например при проверке на отмонтированные NFS директории. Если функция возвращает ненулевое значение, то доставка откладывается. Однако, неверно выполнять такую проверку когда установлена опция “ignore_enotdir”, потому что эта опция заставляет Exim игнорировать в пути “то, что не является директорией” (ошибка ENOTDIR). Это вопрос неоднозначный, потому как некоторые операционные системы выдают ошибку ENOENT, а некоторые - ENOTDIR.
опция
использование
тип
по-умолчанию
include_directory
redirect
string
unset
Если установлена эта опция, пути любых элементов “:include:” в списке перенаправления должны начинаться с этой директории.
опция
использование
тип
по-умолчанию
modemask
redirect
octal integer
022
Опция определяет биты режима, которые не должны быть установлены для файла, определенного опцией “file”. Если установлен любой из этих битов, то доставка откладывается.
опция
использование
тип
по-умолчанию
one_time
redirect
boolean
false
Иногда факт что Exim перечитывает файл псевдонимов и заново обрабатывает файлы перенаправления каждый раз когда он пытается доставить сообщение, вызывает проблему когда один или несколько сгенерированных адресов не могут быть доставлены с первой попытки. Это не является проблемой повторной доставки - Exim способен это обработать - кроме ситуаций когда список перенаправления меняется во время, когда сообщение находится в очереди Exim'a. Это особенно справедливо в случае списков рассылки, когда новые подписчики могут получить копии сообщений в случае если они были посланы до того как они подписались на рассылку.
Если опция “one_time” установлена и любые адреса сгенерированные роутером не удается обработать с первой попытки, то эти адреса добавляются к сообщению как адреса “верхнего уровня” (top level) и родительский адрес, который их сгенерировал помечается как “delivered”. То есть перенаправление на следующей попытке доставки не происходит. Замечание 1: Это означает что любое добавление или удаление заголовков, определяемое роутером будет утеряно если доставка не будет произведена успешно с первой попытки. В этом случае когда установлена опция “one_time” опции “headers_add” и “headers_remove” не разрешены. Замечание 2: Для обеспечения того чтобы роутер генерировал только адреса (в отличие от труб (pipes), доставок в файлы (file deliveries) или авто-ответов (auto-replies)), опции “forbid_file”, “forbid_pipe” и “forbid_filter_reply” принудительно устанавливаются в значение “истина” когда установлена опция “one_time”.
Изначальный адрес верхнего уровня (top-level) запоминается с каждым из сгенерированных адресов, и выводится во всех записях в логах. Однако, любые промежуточные адреса не записываются. Это вносит различия в лог только если установлен селектор “all_parents”. Считается что “one_time” будет использоваться как правило в списках рассылки, где обычно используется один уровень преобразования. Замечание 3: Общий роутер “unseen” не может быть задан с “one_time”.
Оригинальный адрес верхнего уровня запоминается с каждым из сгенерённых адресов, и выводится в любых логах. Однако, промежуточные адреса на записываются. Это создаёт различие для логов только если селектор логов “all_parents” установлен. Ожидается, что обычно “one_time” будет использоваться для списка адресатов, где есть лишь один уровень раскрытия.
опция
использование
тип
по-умолчанию
owners
redirect
string list
unset
Это определяет список разрешённых владельцев для файла заданного как “file”. Этот список - дополнение к локальному пользователю, когда установлена опция “check_local_user”. Смотрите “check_owner” ниже.
опция
использование
тип
по-умолчанию
owngroups
redirect
string list
unset
Это определяет список разрешённых групп для файла заданного как “file”. Этот список - дополнение к локальной группе, когда установлена опция “check_local_user”. Смотрите опцию “check_group” выше.
опция
использование
тип
по-умолчанию
pipe_transport
redirect
string†
unset
Роутер “redirect” задаёт прямую доставку в трубу, когда строка начинающаяся с “|” задана как новый “адрес”. Используемый транспорт определён этой опцией, которая, после раскрытия, должна быть названа именем сконфигуренного транспорта. Когда транспорт запущен, команда pipe в “
$address_pipe
”.
опция
использование
тип
по-умолчанию
qualify_domain
redirect
string†
unset
Если эта опция установлена, и сгенерён неполный адрес (без домена), и в нормальных условиях этот адрес был бы квалифицирован (дополнен доменным именем) по глобальной опции “qualify_recipient”, но вместо этого он квалифицируется доменом, содержащимся в этой строке, после раскрытия. Если раскрытие неудачно, маршрутизатор снижается(?). Если вы хотите вернуться к значению по умолчанию, то можно раскрыть “
$qualify_recipient
”.
Эта опция применяется ко всем неполным адресам сгенерённым фильтрами exim`a, но для традиционных файлов “.forward” это применяется лишь для адресов не предварённых обратным слешем. Фильтры Sieve не могут генерить неполные адреса.
опция
использование
тип
по-умолчанию
qualify_preserve_domain
redirect
boolean
false
Если установлена эта опция, то локальная опция “qualify_domain” не должна быть задана (будет ошибка конфигурации, если задать обе). Если генерится неполный адрес (без домена), он дополняется доменом родительского адреса (предыдущий предок), вместо глобального домена из “qualify_recipient”. В случае традиционнго файла “.forward” это применяется вне зависмости от того, был ли перед адресом обратный слэш.
опция
использование
тип
по-умолчанию
repeat_use
redirect
boolean
true
Если эта опция установлена в “false”, то роутер пропускается для дочерних адресов, предки которых были отроучены (не смог подобрать слово :))) этим роутером. Это проверяется до проверки других предварительных условий. Дефолтовые правила exim`a против зацикливания пропускаются лишь в случае если предок с таким же адресом как и текущий. Смотрите также “check_ancestor” и “redirect_router” опции.
опция
использование
тип
по-умолчанию
reply_transport
redirect
string†
unset
Роутер “redirect” устанавливает автоответ когда в фильтре используются команды “mail” или “vacation”. Используемый транспорт определяется этой опцией, которая, после раскрытия, должна быть именем сконфигуренного транспорта. Обычно это транспорт “autoreply”. Другие транспорты вряд ли смогут принести какую-то пользу.
опция
использование
тип
по-умолчанию
rewrite
redirect
boolean
true
Если эта опция установлена в “false”, адреса сгенерённые маршрутизатором не являются объектами для перезаписи адреса. Иначе, они будут обработаны как новые адреса и перезаписаны в соответствии с глобальными правилами перезаписи.
опция
использование
тип
по-умолчанию
sieve_subaddress
redirect
string†
unset
Значение этой опции передаётся фильтру Sieve для задания части адреса :subaddress.
опция
использование
тип
по-умолчанию
sieve_useraddress
redirect
string†
unset
Значение этой опции передаётся фильтру Sieve для задания части адреса :user. Если она не задана, для :user используется оригинальная локальная часть адреса (включая суффикс и преффикс).
опция
использование
тип
по-умолчанию
sieve_vacation_directory
redirect
string†
unset
Для включения расширения “vacation” для фильров Sieve, вы должны задать “sieve_vacation_directory” в каталог где находятся БД “vacation” (больше ничего не помещайте в эту директорию), и гарантировать, что опция “reply_transport” относится к транспорту “autoreply”. Каждому пользователю необходим собственный каталог; exim создаст их в случае необходимости.
опция
использование
тип
по-умолчанию
skip_syntax_errors
redirect
boolean
false
Если установлена опция “skip_syntax_errors”, синтаксически неправильные адреса, в переназначении вне фильтра, пропускаются, и каждый неудачный алрес записывается в логи. Если установлена опция “syntax_errors_to”, то сообщение посылается по заданному в ней адресу с подробностями о неудаче. Если утановлена опция “syntax_errors_text”, её содержимое раскрывается и помещается в начале сообщения об ошибке, сгенерённого “syntax_errors_to”. Обычно, она принудительно устанавливает “syntax_errors_to” к тому же адресу, что и общая опция “errors_to”. Опция “skip_syntax_errors” часто используется для обработки лисов рассылки.
Если все адреса в списке редиректа пропущены из-за ошибок синтаксиса, роутер отказывается обрабатывать оригинальный адрес, и он передаётся последующим маршрутизаторам.
Если опция “skip_syntax_errors” установлена при интерпретации фильра exim`a, любые синтаксические ошибки в фильтре вызывают пропуск без предпринятия какого-либо действия. Инцидент записывается, и маршрутизатор отказывается обрабатывать адрес, и адрес передаётся следующим роутерам.
Любые синтаксические ошибки в фильтрах Sieve, повод для действия “keep”. Это действие определено RFC3028. Значения “skip_syntax_errors”, “syntax_errors_to”, и “syntax_errors_text” не используются.
Опция “skip_syntax_errors” может использоваться для задания тех ошибок в пользовательских списках перенаправления или файлах фильтра, используемых с адресом который не переадресуется, могут быть использованы для уведомления пользователей об этих ошибках, с помощью такого маршрутизатора:
userforward:
driver = redirect
allow_filter
check_local_user
file = $home/.forward
file_transport = address_file
pipe_transport = address_pipe
reply_transport = address_reply
no_verify
skip_syntax_errors
syntax_errors_to = real-$local_part@$domain
syntax_errors_text = \
This is an automatically generated message. An error has\n\
been found in your .forward file. Details of the error are\n\
reported below. While this error persists, you will receive\n\
a copy of this message for every message that is addressed\n\
to you. If your .forward file is a filter file, or if it is\n\
a non-filter file containing no valid forwarding addresses,\n\
a copy of each incoming message will be put in your normal\n\
mailbox. If a non-filter file contains at least one valid\n\
forwarding address, forwarding to the valid addresses will\n\
happen, and those will be the only deliveries that occur. \n\
\n\
Честно говоря, ломает перводить чё тут написано, сами напишете \n\
что захотите :))) Общий смысл - про ошибку в фильтре пользователя, \n\
которому эта мессага и пошлётся.
Также, вам необходим роутер, чтобы гарантировать, что локальные адреса у которых распознан преффикс “real-”, не форвардятся и не фильтруются. Для примера, его можно поместить сразу перед маршрутизатором “userforward”: