22. Роутер REDIRECT


    Роутер 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 , например таким образом:

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

       Если файл не существует или не содержит никаких инструкций по выполнению (например, файл пуст или содержит только комментарии), то роутер пропускается. Внимание: это не тот случай, когда файл содержит синтаксически допустимые элементы, которые могут иногда выдавать пустые адреса, например элементы, содержащие только адресные комментарии в соответствии с 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 , содержащий такую запись:

    cleo, cleopatra@egypt.example
    
    
    

       Для совместимости с другими MTA, такие локальные части могут быть предварены символом \, но это не является требованием для предотвращения зацикливания. Однако, это дает разницу если таким образом обрабатывается более одного домена.
       Если элемент начинается с символа
    \ и остальная часть его является адресом, соответствующим RFC2822, не включающим в себя домен, то этот элемент дополняется доменом входящего адреса. В отсутствие предшествующего символа \ неполные адреса дополняются используя значение опции 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 .

    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:       |/some/command $local_part
    localpart1: pipe
    localpart2: pipe
    
    
    

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

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

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

    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:

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

    опция
    использование
    тип
    по-умолчанию
    syntax_errors_text redirect string† unset


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

    опция
    использование
    тип
    по-умолчанию
    syntax_errors_to redirect string unset


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


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