имя | значение |
DOMAIN | домен адреса |
HOME | домашний каталог, если задан |
HOST |
имя хоста при вызове из роутера (смотрите ниже) |
LOCAL_PART | смотрите ниже |
LOCAL_PART_PREFIX | смотрите ниже |
LOCAL_PART_SUFFIX | смотрите ниже |
LOGNAME | смотрите ниже |
MESSAGE_ID |
локальный идентификатор сообщения exim |
PATH | задано путём опции path |
QUALIFY_DOMAIN | квалификационный домен отправителя |
RECIPIENT | полный адрес получателя |
SENDER | отправитель сообщения (пустой, если рикошет) |
SHELL | /bin/sh |
TZ | значение опции timezone, если установлена |
USER | смотрите ниже |
Когда транспорт pipe
вызывается непосредственно из (например) роутера accept,
LOCAL_PART устанавливается в локальную часть адреса. Когда он вызывается
как результат раскрытия форварда или псевдонима, LOCAL_PART устанавливается в
локальную часть адреса, который был раскрыт. В обоих случаях любые префиксы
удаляются из локальной части и становятся доступны в LOCAL_PART_PREFIX и
LOCAL_PART_SUFFIX соответственно. LOGNAME и USER устанавливаются в то же
значение, что и LOCAL_PART для совместимости с другими MTA.
HOST устанавливается лишь, когда транспорт pipe
вызывается из роутера, который ассоциирует хосты с адресами, типично
используя pipe как псевдоудалённый транспорт.
HOST устанавливается в первое имя хоста, заданное роутером.
Если установлена общая транспортная опция
home_directory, её значение используется для
переменной окружения HOME. Иначе, домашний каталог
может быть установлен роутером путём опции transport_home_directory,
имеющей значением по умолчанию домашний каталог пользователя,
если установлена check_local_user.
29.5. Частные опции для pipe
Имя | Использование |
Тип | Значение по умолчанию |
allow_commands | pipe | string list† |
не задана |
Строка раскрывается, а затем интерпретируется как
разделённый двоеточиями список допустимых команд.
Если restrict_to_path не установлена, разрешены лишь команды,
перечисленные в списке allow_commands. Они не должны быть
абсолютными путями: опция path продолжает использоваться
для относительных путей. Если restrict_to_path установлена с
allow_commands, команда должна быть в списке allow_commands
или именем без каких-либо слэшей в путях. Другими словами, если
не установлена ни allow_commands, ни restrict_to_path,
нет никаких ограничений на команды, но иначе разрешены лишь команды,
допускаемые той или другой опциями. Например, если:
allow_commands = /usr/bin/vacation
|
и restrict_to_path не установлена, разрешена лишь команда
/usr/bin/vacation. Опция allow_commands
не может быть установлена, если установлена use_shell.
Имя | Использование |
Тип | Значение по умолчанию |
batch_id | pipe | string† |
не задана |
Смотрите описание пакетной локальной
доставки в разделе 25.
Имя | Использование |
Тип | Значение по умолчанию |
batch_max | pipe | integer |
1 |
Эта опция ограничивает число адресов, которые могут
быть обработаны в одной доставке. Смотрите описание пакетной локальной
доставки в разделе 25.
Имя | Использование |
Тип | Значение по умолчанию |
check_string | pipe | string |
не задана |
Когда pipe пишет сообщение, начало
каждой строки проверяется на совпадение с check_string,
и если оно происходит, начальные совпавшие символы заменяются содержимым
escape_string, если обе установлены. Значение check_string
литеральная строка, а не регулярное выражение, и регистр букв имеет значение.
Когда установлена use_bsmtp, содержимое check_string и
escape_string приводится к значениям, которые оформлены
протоколом экранирования SMTP. Любые настройки, сделанные в
конфигурационном файле, игнорируются.
Имя | Использование |
Тип | Значение по умолчанию |
command | pipe | string† |
не задана |
Эта опция не должна быть установлена, когда
pipe используется для доставки в каналы,
полученные непосредственно от переназначения адресов.
В других случаях опция должна быть установлена для предоставления команды,
которая будет выполнена. Она не нуждается в абсолютном пути
(смотрите ниже опцию path). Команда разделяется exim на отдельные
параметры, и каждый аргумент отдельно раскрывается,
как описано выше в разделе 29.3.
Имя | Использование |
Тип | Значение по умолчанию |
environment | pipe | string† |
не задана |
Эта опция используется для добавления дополнительных
переменных к среде окружения, в которой выполняется команда
(смотрите раздел 29.4 для получения списка
значений по умолчанию). Ее значение строка, которая вначале раскрывается,
а затем интерпретируется как список, разделённый двоеточиями, установок среды
окружения в формате name=value.
Имя | Использование |
Тип | Значение по умолчанию |
escape_string | pipe | string |
не задана |
Смотрите выше опцию check_string.
Имя | Использование |
Тип | Значение по умолчанию |
freeze_exec_fail | pipe | boolean |
ложь |
Ошибка выполнения команды в транспорте pipe
по умолчанию обрабатывается как любая другая ошибка при запуске команды.
Однако, если установлена опция freeze_exec_fail, ошибка
выполнения обрабатывается особым образом и вызывает заморозку сообщения вне
зависисмости от установки ignore_status.
Имя | Использование |
Тип | Значение по умолчанию |
ignore_status | pipe | boolean |
ложь |
Если эта опция истинна, статус, возвращаемый субпроцессом,
запустившим команду, игнорируется, а exim ведёт себя так, как будто
был возвращён ноль. Иначе ненулевой статус или завершение по
сигналу вызывают ошибку из транспорта, если статус не одно из значений,
перечисленных в temp_errors: они вызывают задержку
доставки и дальнейшие, более поздние, попытки доставки.
Отметьте: Эта опция не касается таймаутов, которые
не возвращают статус. Смотрите опцию timeout_defer для
информации об обработке таймаутов.
Имя | Использование |
Тип | Значение по умолчанию |
log_defer_output | pipe | boolean |
ложь |
Если эта опция установлена, и статус, возвращаемый
командой, один из кодов перечисленных в temp_errors (то есть,
доставка была задержана), а ей был сгенерирован какой-либо вывод,
его первая строка записывается в главный протокол.
Имя | Использование |
Тип | Значение по умолчанию |
log_fail_output | pipe | boolean |
ложь |
Если эта опция установлена, и команда
возвращает какой-либо вывод, а также завершается с кодом возврата, не равным
ни нулю, ни кодам, перечисленным в temp_errors (то есть,
доставка неудачна), первая строка вывода записывается в главный протокол.
Эта опция и log_output взаимоисключаемы.
Лишь одна из них может быть установлена.
Имя | Использование |
Тип | Значение по умолчанию |
log_output | pipe | boolean |
ложь |
Если эта опция установлена, и команда возвращает
какой-либо вывод, первая строка вывода записывается в главный протокол
вне зависимости от возвращённого кода.
Эта опция и log_fail_output взаимоисключаемы.
Лишь одна из них может быть установлена.
Имя | Использование |
Тип | Значение по умолчанию |
max_output | pipe | integer |
20K |
Эта опция определяет максимальное количество
вывода, который команда может сгенерировать на своём стандартном выводе и
объединённом стандартном файле ошибок. Если лимит исчерпан, процесс,
выполняющий команду, уничтожается. Это мера безопасности для поимки
неудержимо растущих процессов. Ограничение применяется независимо от
настроек опций контролирующих, что происходит с этим выводом (например,
return_output). Из-за эффекта буферизации, объём вывода может немного
превысить ограничение до того, как exim это заметит.
Имя | Использование |
Тип | Значение по умолчанию |
message_prefix | pipe | string† |
смотрите ниже |
Заданная строка раскрывается и выводится
в начале каждого сообщения. По умолчанию она не задана,
если установлена опция use_bsmtp. Иначе она:
message_prefix = \
From ${if def:return_path{$return_path}{MAILER-DAEMON}}\
${tod_bsdinbox}\n
|
Обычно это требуется для программы
/usr/bin/vacation. Однако, она не должна присутствовать,
если производится доставка на Cyrus IMAP server или локальному
агенту доставки tmail. Префикс может быть запрещён путём установки:
Имя | Использование |
Тип | Значение по умолчанию |
message_suffix | pipe | string† |
смотрите ниже |
Заданная строка раскрывается и выводится
в начале каждого сообщения. По умолчанию она не задана,
если установлена опция use_bsmtp. Иначе она одна новая строка.
Суффикс может быть запрещён путём установки:
Имя | Использование |
Тип | Значение по умолчанию |
path | pipe | string |
/bin:/usr/bin |
Эта опция определяет строку, которая устанавливается
в переменную окружения PATH для субпроцесса. Если опция command
не приводит к абсолютному пути к имени, команда разыскивается в каталогах
PATH обычным способом. Предупреждение: это не применяется к команде,
заданной как транспортный фильтр.
Имя | Использование |
Тип | Значение по умолчанию |
pipe_as_creator | pipe | boolean |
ложь |
Если не задана общая опция user,
и эта опция истинна, процесс доставки запускается под uid, который был у exim
при изначальном вызове для приёма сообщения. Если не установлен идентификатор
группы (через общую опцию group), в силе gid,
который был у exim при при изначальном вызове для приёма сообщения.
Имя | Использование |
Тип | Значение по умолчанию |
restrict_to_path | pipe | boolean |
ложь |
Когда эта опция установлена, любое имя команды,
не перечисленное в allow_commands, не должно содержать каких бы то
ни было слэшей. Команда ищется лишь в каталогах, перечисленных в опции
path. Эта опция предназначена для случая, когда команда канала была
сгенерирована из пользовательского файла .forward. Обычно это
обрабатывается транспортом pipe, называемым address_pipe.
Имя | Использование |
Тип | Значение по умолчанию |
return_fail_output | pipe | boolean |
ложь |
Если эта опция установлена в истину,
команда производит какой-либо вывод и завершается с кодом возврата,
не равным нулю или не содержащимся в кодах, перечисленных в
temp_errors (то есть, имеет место ошибка доставки),
вывод возвращается в рикошете. Однако, если сообщение имеет пустого
отправителя (оно само по себе рикошет), вывод команды отбрасывается.
Эта опция и return_output взаимоисключаемы. Лишь одна из них
может быть установлена.
Имя | Использование |
Тип | Значение по умолчанию |
return_output | pipe | boolean |
ложь |
Если эта опция установлена в истину, а
команда производит какой-либо вывод, доставка считается неудачной вне
зависмости от кода возврата, и вывод возвращается в рикошете.
Иначе вывод просто игнорируется. Однако, если сообщение имеет пустого
отправителя (оно само по себе рикошет), вывод команды
всегда отбрасывается, вне зависимости от установки этой опции.
Эта опция и return_fail_output взаимоисключаемы. Лишь одна из
них может быть установлена.
Имя | Использование |
Тип | Значение по умолчанию |
temp_errors | pipe | boolean |
не задана |
Эта опция содержит список разделённый двоеточиями
или единственную звёздочку. Если опция ignore_status ложна, и
return_output не задана, а команда выходит с ненулевым кодом,
ошибка обрабатывается как временная, и доставка задерживается, если код
возврата совпадает с одним из чисел, или если стоит звёздочка.
Иначе, ненулевые коды возврата обрабтываются как постоянные ошибки.
Значение по умолчанию содержит коды, заданные EX_TEMPFAIL и EX_CANTCREAT в
sysexits.h. Если exim скомпилирован на системе,
не задающей эти макросы, они принимают значения 75 и 73, соответственно.
Имя | Использование |
Тип | Значение по умолчанию |
timeout | pipe | time |
1h |
Если команда не смогла завершится в течение
этого времени, она уничтожена. Обычно это вызывает ошибку доставки (но
посмотрите опцию timeout_defer). Нулевой интервал времени задаёт,
что нет таймаута. Для гарантии, что любые созданные командой субпроцессы
также уничтожены, exim делает начальный процесс лидером группы процессов,
и по таймауту уничтожает всю группу процессов. Однако, это может быть
обойдено, если один из процессов начинает новую группу процессов.
Имя | Использование |
Тип | Значение по умолчанию |
timeout_defer | pipe | boolean |
ложь |
Таймаут в транспорте pipe,
в команде, запускаемой транспортом или в ассоциированном с ним транспортном
фильтре по умолчанию обрабатывается как жёсткая ошибка, и доставка неудачна.
Однако, если timeout_defer установлена в истину, оба
вида таймаута становятся временными, вызывая задержку доставки.
Имя | Использование |
Тип | Значение по умолчанию |
umask | pipe | octal integer |
022 |
Эта опция определяет установку umask для
субпроцесса, выполняющего команду.
Имя | Использование |
Тип | Значение по умолчанию |
use_bsmtp | pipe | boolean |
ложь |
Если эта опция установлена в истину, транспорт pipe
пишет сообщения в формате пакетного SMTP с отправителем конверта и
получателем (получателями), включенными как SMTP-команды. Если Вы хотите
включить начальную команду HELO с каждым сообщением, можете сделать это путём
установки опции message_prefix. Для получения дополнительных деталей
о пакетном SMTP, смотрите раздел 44.10.
Имя | Использование |
Тип | Значение по умолчанию |
use_classresources | pipe | boolean |
ложь |
Эта опция доступна лишь в случае, если exim
работает на FreeBSD, NetBSD или BSD/OS. Если она установлена в истину,
функция setclassresources() используется для установки ограничений ресурсов,
когда транспорт pipe производит доставку.
Лимиты для uid, под которым работает канал, лолучаются из БД классов логинов
/etc/login.conf.
Имя | Использование |
Тип | Значение по умолчанию |
use_crlf | pipe | boolean |
ложь |
Эта опция заставляет завершатся строки
двухсимвольной последовательностью CRLF (возврат каретки, новая строка)
вместо одного символа перевода строки. В случае пакетного SMTP записанная в
канал последовательность байтов представляет собой точное подобие того, что
было бы послано в реальном SMTP-подключении.
Содержимое опций message_prefix и
message_suffix пишется дословно, таким образом, они должны содержать
свои символы возврата каретки, если они им необходимы. Так как значение по
умолчанию для обоих (message_prefix и message_suffix)
содержит один перевод строки, их значения должны быть изменены, чтобы они
завершались \r\n, если задана опция use_crlf.
29.6.
Использование внешнего (постороннего) агента локальной доставки
Транспорт pipe может использоваться для
передачи всех сообщений, которым требуется локальная доставка,
отдельному локальному агенту доставки, типа procmail.
Когда это делается, нужно быть осторожным, чтобы гарантировать, что канал
выполняется под соответствующими uid и gid. В некоторых конфигурациях
требуется, чтобы это был uid, которому доверяет агент доставки,
для предоставления корректного отправителя сообщения.
Может потребоваться повторно пересобрать или переконфигурировать агент
доставки таким образом, чтобы он доверял соответствующему пользователю.
Далее приведен пример конфигурации транспорта и роутера для procmail:
# transport
procmail_pipe:
driver = pipe
command = /usr/local/bin/procmail -d $local_part
return_path_add
delivery_date_add
envelope_to_add
check_string = "From "
escape_string = ">From "
user = $local_part
group = mail
# router
procmail:
driver = accept
check_local_user
transport = procmail_pipe
|
В этом примере канал запускается
как локальный пользователь, но с установленнной группой mail.
Как альтернативу можно запускать канал под определённым пользователем, типа
mail или exim, но в этом случае Вы должны принять меры, чтобы
procmail доверял этому пользователю для предоставления
корректного адреса отправителя. Если Вы не задаёте опцию group или
user, команда канала запускается под локальным пользователем.
Домашним каталогом будет домашний каталог пользователя.
Отметьте: команда, которая запускает транспорт
pipe, НЕ начинается с
как показано в документации на procmail, поскольку exim по
умолчанию не использует shell для запуска команд канала.
Следующий пример показывает транспорт и роутер для систем, где локальные
доставки обрабатываются Cyrus IMAP server.
# transport
local_delivery_cyrus:
driver = pipe
command = /usr/cyrus/bin/deliver -m \
${substr_1:$local_part_suffix} -- $local_part
user = cyrus
group = mail
return_output
log_output
message_prefix =
message_suffix =
# router
local_user_cyrus:
driver = accept
check_local_user
local_part_suffix = .*
transport = local_delivery_cyrus
|
Отметьте, что не заданы message_prefix и
message_suffix, а также на использование
return_output для того, чтобы любой текст, записанный Cyrus,
был возвращён отправителю.
|
|