Exim 22 Роутер REDIRECT

Материал из wiki.lissyara.su
Перейти к: навигация, поиск

Роутер REDIRECT

Роутер “redirect” обрабатывает несколько видов переназначения адресов. Его самое частое использование - для разрешения локальной части альяса по центральному файлу альясов (обычно это “/etc/aliases”), и для обработки пользовательского файла “.forward”, но также есть много других потенциальных использований. Входящий адрес может быть переадресован несколькими различными способами:

  • Он может быть заменён одним, или более, новым адресом, которые будут роутится самостоятельно.
  • Он может быть маршрутизирован для доставки в файл или директорию.
  • Он может быть доставлен в специфическую трубу (pipe).
  • Можно сделать автоматический ответ.
  • Он может принудительно стать неудачным (fail), с самостоятельным сообщением об ошибке.
  • Он может быть временно задержан.
  • Он может быть отброшен.

Общая опция “transport” не должна быть установлена для роутера “redirect”. Однако, есть некоторые частные опции с заданным транспортом, для доставки в файлы и трубы, и для генерации автоответов.Смотрите описания “file_transport”, “pipe_transport” и “reply_transport” ниже.

Данные для перенаправления

Роутер функционирует путем интерпретации текстовой строки, которая получается либо в результате преобразования содержимого опции “data”, либо в результате чтения содержимого файла, чье имя определено опцией “file”. Эти две опции являются взаимоисключающими. Первая из них часто используется для обработки системных псевдонимов, в конфигурации наподобие данной:

system_aliases:
    driver = redirect
    data = ${lookup{$local_part}lsearch{/etc/aliases}}

Если поиск завершился неудачно, то раскрываемая строка в этом примере - пустая. В случае неудачного раскрытия опции “data” - роутер пропускается. Принудительное завершение преобразования также ведет к пропуску роутера; другие ошибки раскрытия приводят к тому, что доставка временно откладывается.

Конфигурация с опцией “file” часто используется для обработки пользовательских файлов “.forward”, например таким образом:

userforward:
    driver = redirect
    check_local_user
    file = $home/.forward
    no_verify

Если файл не существует или не содержит никаких инструкций по выполнению (например, файл пуст или содержит только комментарии), то роутер пропускается. Внимание: это не тот случай, когда файл содержит синтаксически допустимые элементы, которые могут иногда выдавать пустые адреса, например элементы, содержащие только адресные комментарии в соответствии с RFC 2822.

Файлы пересылки (forward files) и проверка адреса

Обычной практикой является установка опции “no_verify” на роутерах “redirect”, обрабатывающих пользовательские файлы “.forward”, как в вышеописанном примере. Для этого существуют 2 причины:

  • Когда Exim принимает входящее SMTP-сообщение от удаленного узла, то он запускается от имени пользователя Exim (Exim uid), а не от имени суперпользователя (root). При этом не устанавливается никаких дополнительных групп, даже если пользовательский идентификатор(uid) Exim'а является членом других групп (т.е. функция “initgroups()” не вызывается). Exim не может изменить uid для чтения файла, чтобы прочитать его как владелец, а также возможно файл не будет доступен для чтения пользователю Exim. Таким образом, на практике роутер может не функционировать.
  • Однако, даже когда роутер может работать, существование файла “.forward” неважно в то время когда адрес проверяется. Должно быть проверено только является ли локальная часть адреса допустимым именем пользователя или нет. Если убрать обработку перенаправления в данном случае, то это сохранит некоторые ресурсы.

Обработка данных перенаправления

Содержимое строки данных, полученное либо через “data”, либо через “file”, может быть интерпретировано двумя разными способами:

  • Если опция “allow_filter” установлена в истинное значение и данные начинаются со строки “#Exim filter” или “#Sieve filter”, то содержимое интерпретируется как список “фильтрующих” инструкций в форме фильтров Exim или Sieve соответственно. Подробности синтаксиса и семантики файлов фильтров описаны в отдельном документе “Интерфейсы Exim к фильтрации почты”; предназначенном конечным пользователям.
  • В противном случае, данные должны представлять собой список элементов перенаправления (redirection items), разделенных “,”, как описано в следующей секции.

Когда сообщение перенаправляется в файл (“почтовая папка”), имя файла, описанного в списке перенаправления, не являющимся фильтром, должно быть абсолютным (т.е. до него указан полный путь). Фильтр может генерировать относительный путь - то, как это обрабатывается зависит от конфигурации транспорта. См. раздел 26.1 для описания этой темы, для транспорта “appendfile”.

Элементы списка перенаправления

Если данные перенаправления не являются фильтрами Exim и Sieve, например, если они были получены из файла псевдонимов или файла “.forward”, то они содержат список адресов, имен файлов, конвейерных команд или специальных элементов (см. раздел 22.6 ниже). Эти специальные элементы могут быть индивидуально включены или отключены посредством опций, начинающихся с “allow_” или “forbid_”, в зависимости от значений по умолчанию. Элементы в списке разделены “,” или новыми строками. Если в элементе требуется символ “,”, то весь элемент должен быть заключен в двойные кавычки.

Строки, начинающиеся с символа “#” являются комментариями и игнорируются, также может встретиться символ “#” с последующей “,”, в этом случае все, что находится между “#” и следующим символом новой строки, игнорируется.

Если элемент целиком заключен в двойные кавычки, то они опускаются. В противном случае, они остаются потому как некоторые формы почтовых адресов требуют их использования (но никогда в кавычки не берется адрес целиком). В следующем описании под “элементом” понимается то, что остается после опускания кавычек.

Внимание: Если вы используете преобразование Exim для построения адреса перенаправления, и преобразование содержит ссылку на “$local_part”, то вы должны использовать оператор раскрытия “quote”, на случай если локальная часть почтового адреса содержит спецсимволы. Например, чтобы перенаправить всю почту для домена “obsolete.example”, оставив неизменным существующую локальную часть адреса, то вы можете использовать такую конструкцию:

data = ${quote:$local_part}@newdomain.example

Перенаправление в локальный почтовый ящик

Элемент в списке перенаправления может быть в точности самим адресом. Это не вызовет зацикливания маршрутизации, потому что роутер автоматически пропускается если родительский адрес обрабатываемого адреса совпадает с ним и обрабатывался он текущим роутером. Далее адрес передается следующим роутерам, таким образом он обрабатывается как будто бы не было никакого перенаправления. В процессе проверки зацикливания используется полная локальная часть почтового адреса, включая префиксы и суффиксы.

Указание той же локальной части почтового адреса без указания домена в персональных файлах фильтров является обычной практикой в том случае, если пользователь хочет, чтобы сообщения доставлялись в локальный почтовый ящик а также перенаправлялись еще куда-нибудь. Например, пользователь с учетной записью “cleo” может иметь файл “.forward”, содержащий такую запись:

cleo, cleopatra@egypt.example

Для совместимости с другими MTA, такие локальные части могут быть предварены символом “\”, но это не является требованием для предотвращения зацикливания. Однако, это дает разницу если таким образом обрабатывается более одного домена.

Если элемент начинается с символа “\” и остальная часть его является адресом, соответствующим RFC 2822, не включающим в себя домен, то этот элемент дополняется доменом входящего адреса. В отсутствие предшествующего символа “\” неполные адреса дополняются используя значение опции “qualify_recipient”, но вы можете принудительно изменить входящий домен, используя опцию “qualify_preserve_domain”.

Если существуют псевдонимы для локальных пользователей, то нужно быть осторожным. Рассмотрим MTA, обрабатывающий простой локальный домен, где системный файл псевдонимов содержит:

Sam.Reman: spqr

Теперь предположим, что Сэм (чей идентификатор - “spqr”) хочет сохранять копии сообщений в локальном почтовом ящике, а также перенаправлять копии куда-либо еще. Он создает такой файл перенаправления:

Sam.Reman, spqr@reme.elsewhere.example

С подобными настройками входящее сообщение для “Sam.Reman” отклоняется. Роутер redirect для системных псевдонимов не обрабатывает “Sam.Reman” второй раз, потому как он уже маршрутизировал его, и следующие роутеры по-видимому тоже не смогут обработать псевдоним. Файл перенаправления должен на самом деле содержать:

spqr, spqr@reme.elsewhere.example

но т.к. это распространенная ошибка, то существует опция “check_ancestor” (см. ниже) для ее обхода. Обычно она определяется в роутере, обрабатывающем пользовательские файлы “.forward”.

Специальные конструкции в списках перенаправления

Вдобавок к адресам в списках перенаправления (не являющихся фильтрами) могут быть следующие типы конструкций:

  • Элемент рассматривается как команда перенаправления если он начинается с символа “|” и не распознается как адрес соответствующий RFC 2822. Транспорт для запуска этой команды должен быть определен опцией “pipe_transport”. Обычно, пользователь и группа, от имени которых выполняется доставка, определяются роутером или транспортом. По умолчанию, используются пользователь и группа, отведенные для Exim.

Одинарные или двойные кавычки могут использоваться для заключения аргументов команды перенаправления, причем для одинарных кавычек интерполяция содержимого внутри не производится. Если команда содержит символ “,”, то ее необходимо поместить в двойные кавычки, например:

"|/some/command ready,steady,go"

т.к. элементы в списках перенаправления оканчиваются “,”. Однако недопустимо помещать в кавычки только команду. Например,

|"/some/command ready,steady,go"

интерпретируется как перенаправление вывода с довольно странным именем команды без аргументов.

  • Элемент интерпретируется как путь если он начинается с “/” и не распознается как адрес соответствующий RFC 2822. Например,
/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:” маршрутизацию принудительно завершает неудачно. Поиск, результатом которого является пустой список перенаправления, имеет тот же эффект.

Дублирование адресов

Exim убирает дублированные адреса из списка адресов, к которым совершается доставка, так что для каждого адреса доставляется только одна копия. Это правило не применяется к доставкам, перенаправляемым в потоки (pipes) различными родительскими адресами, однако непрямая схема псевдонимизации:

pipe:       |/some/command $local_part
localpart1: pipe
localpart2: pipe

не работает с сообщением, адресуемым обеим локальным частям, потому как когда второй из них ссылается на “pipe”, он отбрасывается как уже обработанный. Однако, схема

localpart1: |/some/command $local_part
localpart2: |/some/command $local_part

выполнит доставку в различные потоки, т.к. родители потоков различны.

Повторяющееся преобразование перенаправления

В случае если сообщение не может быть доставлено всем адресатам за несколько попыток, то преобразование перенаправления проводится каждый раз заново для адресов, к дочерним адресам которых доставка не произошла. Если перенаправление используется как список рассылки, то это может привести к тому что новые подписчики получат копии старых сообщений. Опция “one_time” может помочь этого избежать.

Ошибки в списках перенаправления

Если установлена опция “skip_syntax_errors”, то неправильно написанный адрес, вызывающий ошибку разбора строки, пропускается, и в в главный лог-файл делается соответствующая запись. Это может быть полезно для автоматических списков рассылки. В любом случае, если в процессе генерации списка новых адресов обнаруживается ошибка, то родительский исходный адрес откладывается. См. также опцию “syntax_errors_to”.

Частные опции роутера “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† незадана

Эта опция является взаимоисключающей с опцией “file”. Одна из них должна быть определена, но не обе одновременно. Содержимое опции “data” может преобразовываться, и затем использоваться как список элементов перенаправления, или как множество инструкций фильтров. Если преобразование выполняется неудачно или результатом является пустая строка или строка без эффекта (состоящая из комментариев), то роутер отклоняется.

Если используются инструкции фильтров, то строка должна начинаться с “#Exim filter”, и все комментарии в строке, включая этот, должны оканчиваться символом новой строки. Например:

data = #Exim filter\n\
   if $h_to: contains Exim then save $home/mail/exim endif

Если вы читаете данные из базы, где символы новой строки не могут быть включены, то вы можете использовать элемент преобразования “${sg}” для преобразования шаблона строки последовательности в символ новой строки.


Имя Использование Тип Дефолтовое значение
directory_transport redirect string† незадана

Роутер “redirect” устанавливает прямую доставку в каталог если путь, оканчивающийся символом “/” определяется как новый “адрес”. Транспорт для доставки определяется этой опцией, который после преобразования должен быть именем сконфигурированного транспорта. Обычно им является транспорт “appendfile”.


Имя Использование Тип Дефолтовое значение
file redirect string† незадана

Данная опция определяет имя файла, содержащего данные для перенаправления. Она является взаимоисключающей с опцией “data”. Строка перед использованием преобразуется; если преобразование завершается неудачно - роутер отклоняется. Другие ошибки преобразования ведут к откладыванию доставки. Результатом успешного преобразования должен быть абсолютный путь. Файл читается целиком и используется как данные для перенаправления. Если данные представляют собой пустую строку или строку, состоящую из комментариев, то роутер отклоняется.

Если попытка открыть файл завершается неудачно вследствие того, что файл не существует, Exim выполняет проверку содержимого каталога, если только опция “ignore_enotdir” не установлена в истинное значение (см. ниже). Если каталог не существует, то доставка откладывается. Это может произойти в случае если пользовательские файлы “.forward” монтируются по NFS, и если существует проблема монтирования. Если каталог существует а файл - нет, роутер отклоняется.


Имя Использование Тип Дефолтовое значение
file_transport redirect string† незадана

Роутер “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), он пытается выполнить функцию “</span style=color:orange>stat()</span>” для родительской директории, например при проверке на отмонтированные NFS директории. Если функция возвращает ненулевое значение, то доставка откладывается. Однако, неверно выполнять такую проверку когда установлена опция “ignore_enotdir”, потому что эта опция заставляет Exim игнорировать в пути “то, что не является директорией” (ошибка ENOTDIR). Это вопрос неоднозначный, потому как некоторые операционные системы выдают ошибку ENOENT, а некоторые - ENOTDIR.


Имя Использование Тип Дефолтовое значение
include_directory redirect string незадана

Если установлена эта опция, пути любых элементов “: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 незадана

Это определяет список разрешённых владельцев для файла заданного как “file”. Этот список - дополнение к локальному пользователю, когда установлена опция “check_local_user”. Смотрите “check_owner” ниже.


Имя Использование Тип Дефолтовое значение
owngroups redirect string list незадана

Это определяет список разрешённых групп для файла заданного как “file”. Этот список - дополнение к локальной группе, когда установлена опция “check_local_user”. Смотрите опцию “check_group” выше.


Имя Использование Тип Дефолтовое значение
pipe_transport redirect string† незадана

Роутер “redirect” задаёт прямую доставку в трубу, когда строка начинающаяся с “|” задана как новый “адрес”. Используемый транспорт определён этой опцией, которая, после раскрытия, должна быть названа именем сконфигуренного транспорта. Когда транспорт запущен, команда pipe в “$address_pipe”.


Имя Использование Тип Дефолтовое значение
qualify_domain redirect string† незадана

Если эта опция установлена, и сгенерён неполный адрес (без домена), и в нормальных условиях этот адрес был бы квалифицирован (дополнен доменным именем) по глобальной опции “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† незадана

Роутер “redirect” устанавливает автоответ когда в фильтре используются команды “mail” или “vacation”. Используемый транспорт определяется этой опцией, которая, после раскрытия, должна быть именем сконфигурированного транспорта. Обычно это транспорт “autoreply”. Другие транспорты вряд ли смогут принести какую-то пользу.


Имя Использование Тип Дефолтовое значение
rewrite redirect boolean true

Если эта опция установлена в “false”, адреса сгенерённые маршрутизатором не являются объектами для перезаписи адреса. Иначе, они будут обработаны как новые адреса и перезаписаны в соответствии с глобальными правилами перезаписи.


Имя Использование Тип Дефолтовое значение
sieve_subaddress redirect string† незадана

Значение этой опции передаётся фильтру Sieve для задания части адреса :subaddress.


Имя Использование Тип Дефолтовое значение
sieve_useraddress redirect string† незадана

Значение этой опции передаётся фильтру Sieve для задания части адреса :user. Если она не задана, для :user используется оригинальная локальная часть адреса (включая суффикс и преффикс).


Имя Использование Тип Дефолтовое значение
sieve_vacation_directory redirect string† незадана

Для включения расширения “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”. Это действие определено RFC 3028. Значения “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”:

real_localuser:
  driver = accept
  check_local_user
  local_part_prefix = real-
  transport = local_delivery


Имя Использование Тип Дефолтовое значение
syntax_errors_text redirect string† незадана

Смотрите выше, опцию “skip_syntax_errors”.


Имя Использование Тип Дефолтовое значение
syntax_errors_to redirect string незадана

Смотрите выше, опцию “skip_syntax_errors”.


translated by http://exim.org.ua/mailman/listinfo/exim-doc-translation
edit, verification and actuality by lissyara