![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Перевод выполнен Алексеем Паутовым в рамках
некоммерческого проекта RussianLDP
(http://www.rldp.ru/). Именно на этом сайте
и надлежит искать новые версии, если таковые будут.
Локальные транспорты обрабатывают
доставки в файлы и в каналы (pipe). О транспорте autoreply можно
думать как о доставке в канал. Exim всегда выполняет транспорты в
субпроцессах под заданным gid и uid. Типичная доставка в локальные почтовые
ящики выполняется под gid и uid локального пользователя.
Также exim устанавливает специфический текущий каталог,
когда работает транспорт: для некоторых транспортов также уместна
установка домашнего каталога директории. Единственный транспорт,
устанавливающий переменные окружения, pipe: для получения
дополнительных деталей, смотрите раздел 29.4.
Значение, используемое для каталогов, uid и gid
может приходить из нескольких различных мест. Во многих случаях роутер,
обрабатывающий адрес, ассоциирует настройки этого адреса как результат его
опций check_local_user, group или user.
Однако, значения также можно задать в собственной конфигурации
транспорта, они перезадают любые приходящие из роутера. Если одновременно приходят два различных сообщения
для одного и того же пользователя, то, вероятно, два процесса
доставки выполнятся одновременно. Когда для записи в файл используется
транспорт appendfile, exim применяет правила блокировки,
чтобы помешать одновременным процессам записывать в один файл одновременно.
Однако, когда Вы используете транспорт pipe,
Вам решать, как упорядочивать необходимую блокировку. Вот глупый пример:
Он должен записывать сообщение в конце файла.
Однако, если придут два сообщения одновременно, в файле будет свалка.
Вы можете использовать утилиту exim_lock (смотрите
раздел 49.15) для блокировки файла с
использованием того же алгоритма, который использует exim. У всех транспортов есть опции group и user.
Если установлена group, она перезадаёт любую группу, заданную
маршрутизатором в адресе, даже если для транспорта не
задана опция user. Это позволяет, например, производить
локальную доставку почты под uid получателя (установленного роутером), но в
специальной группе (установленной транспортом). Например:
Если для транспорта установлена опция user,
её значение переопределяет то, что установленно маршрутизатором в адресе.
Если user задано не в виде числа, и не задана group, gid
ассоциируется с используемым пользователем. Если user в виде числа,
group должна быть задана.
Когда uid берётся из конфигурации транспорта,
для связанных с этим uid групп вызывается функция initgroups(),
если для транспорта установлена опция initgroups. Когда uid не задан
транспортом, но ассоциирован роутером с адресом, опция для вызова
initgroups() берётся из конфигурации роутера.
Транспорт pipe содержит специальную опцию
pipe_as_creator. Если она задана, и не задана user,
используется uid процесса, вызвавшего exim для передачи сообщения, и
если не задана group, также используется оригинальный gid.
Это предпочтительный детализированный порядок получения
gid, используется первый из установленных:
Если, например, пользователь определён в роутере в
цифровой форме и в нём нет установок группы, нет доступного gid.
В этой ситуации происходит ошибка. Это отличается от uid, для которого всегда
есть одна из установленных настроек:
Разумеется, всё равно будет ошибка, если выбранный uid в
списке never_users. Роутеры могут устанавливать текущий и домашний каталоги
для локальных транспортов путём опций transport_current_directory и
transport_home_directory. Однако, если для транспорта установлены
опции current_directory и home_directory, они
переопределяют значения роутера. Домашний каталог для локального транспорта
берётся из первого установленного значения:
Текущий каталог берётся из первого установленного значения: Если ни роутер, ни транспорт не устанавливают
текущий каталог, exim использует значение домашнего каталога,
если оно установлено. Иначе, до работы локального транспорта,
он устанавливает текущий каталог в /. Обычно локальная доставка обрабатывает один адрес,
и в этом случае переменные типа $domain и $local_part установлены в
течение локальных доставок. Однако, в некоторых обстоятельствах,
может быть обработано более одного адреса за раз (например, при записи
пакетного SMTP для дальнейшей передачи другими средствами).
В этом случае переменные, ассоциированные с локальной частью, никогда не
устанавливаются, $domain устанавливается лишь, если адреса имеют одинаковый
домен, а $original_domain не устанавливается никогда.
23. Среда для работы локальных транспортов
23.1. Одновременные доставки
my_transport:
driver = pipe
command = /bin/sh -c 'cat >>/some/file'
23.2 Uid и gid
# Routers ...
# User/group are set by check_local_user in this router
local_users:
driver = accept
check_local_user
transport = group_delivery
# Transports ...
# This transport overrides the group
group_delivery:
driver = appendfile
file = /var/spool/mail/$local_part
group = mail
23.3. Каталоги: текущий и домашний
23.4. Переменные раскрытия, произведённые из адреса
Найди своих коллег! |