Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> документация —> EXIM —> 4.70 —> часть 23

23. Среда для работы локальных транспортов


    Локальные транспорты обрабатывают доставки в файлы и трубы (pipe). (О транспорте autoreply можно думать как о доставке в трубу.) Exim всегда выполняет транспорты в субпроцессах, под заданным gid и uid. Типичная доставка в локальные почтовые ящики выполняется под gid и uid локального пользователя.
   Также, exim устанавливает специфическую текущую директорию, когда работает транспорт; для некоторых транспортов, также уместна установка домашней директории. Единственный транспорт, устанавливающий переменные окружения -
pipe; для получения дополнительных деталей, смотрите раздел 29.4.
   Значение, используемое для uid, gid, и директорий может приходить из нескольких различных мест. Во многих случаях, роутер, обрабатывающий адрес, ассоциирует настройки этого адреса как результат его опций
check_local_user, group или user. Однако, значения также можно задать в собственной конфигурации транспорта, и они перезадают любые прихожящие из роутера.

23.1 Одновременные доставки

   Если одновременно приходят два различных сообщения, для одного и того же пользователя, то, вероятно, два процеса доставки выполнятся одновременно. Когда для записи в файл используется транспорт appendfile, exim применяет правила блокировки, чтобы помешать одновременным процессам записывать в один файл одновременно.
   Однако, когда вы используете транспорт
pipe, вам решать, как упорядочивать необходимую блокировку. Вот, глупый пример:
my_transport:
  driver = pipe
  command = /bin/sh -c 'cat >>/some/file'

   Он, должен записывать сообщение в конце файла. Однако, если придут два сообщения одновременно, в файле будет свалка. Вы можете использовать утилиту exim_lock (смотрите раздел 50.15), для блокировки файла с использованием того же алгоритма, который использует exim.

23.2 Uid`ы и gid`ы

   У всех транспортов есть опции group и user. Если установлена group, она перезадаёт любую группу, заданную маршрутизатором в адресе, даже если для транспорта не задана опция user. Это позволяет, например, производить локальную доставку почты под uid получателя (установленного роутером), но в специальной группе (установленной транспортом). Например:
# 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

   Если для транспорта установлена опция user, её значение переопределяет, то, что установленно маршрутизатором в адресе. Если user задано не в виде числа, и незадана group, gid ассоциируется с используемым пользователем. Если user в виде числа, group должна быть задана.
   Когда uid берётся из конфигурации транспорта, для связанных с этим uid групп вызывается функция
initgroups(), если для транспорта установлена опция initgroups. Когда uid не задан транспортом, но ассоциирован роутером с адресом, опция для вызова initgroups() берётся из конфигурации роутера.
   Транспорт
pipe содержит специальную опцию - pipe_as_creator. Если она задана, и не задана user, используется uid процесса, вызвавшего exim для передачи сообщения, и если не задана group, также используется оригинальный gid.
   Это - предпочтительный детализованный порядок получения gid; используется первый из установленных:

  • Установка group транспорта;
  • Установка group роутера;
  • Gid ассоциированный с пользовательской настройкой роутера, или как результат check_local_user, или явной нечисловой установки user;
  • Группа, ассоциированная с нечисловой установкой user транспорта;
  • В транспорте pipe, gid создателя, если deliver_as_creator установлена, и uid - uid создателя;
  • Gid exim`a, если по дефолту используется uid exim`a.
       Если, например, пользователь определён в роутере в цифровой форме, и в нём нет установок группы, нет доступного gid. В этой ситуации, происходит ошибка. Это отличается от uid, для которого всегда есть дефолтовое значение. Используется первая из установленных настроек:
  • Установка user транспорта;
  • В транспорте pipe, uid создателя, если установлена deliver_as_creator;
  • Установка user роутера;
  • Установка роутера - check_local_user;
  • Uid exim`a.
       Разумеется, всё равно будет ошибка, если выбранный uid в списке
    never_users.

    23.3 Текущая и домашняя директории

       Роутеры могут устанавливать текущую и домашнюю директории для локальных транспортов путём опций transport_current_directory и transport_home_directory. Однако, если для транспорта установлены опции current_directory и home_directory, они переопределяют значения роутера. В деталях, домашняя директория для локального транспорта берётся из первого установленного значения:

  • Опции home_directory, в транспорте;
  • Опции transport_home_directory в роутере;
  • Данных пароля, если в роутере установлена check_local_user;
  • Опции router_home_directory, в роутере.
       Текущая директория берётся из первого установленного значения:
  • Опции транспорта current_directory;
  • Опции transport_current_directory, роутера.
       Если ни роутер, ни транспорт не устанавливают текущую директорию, exim использует значение домашней директории, если оно установлено. Иначе, до работы локального транспорта, он устанавливает текущую директорию в
    /.

    23.4 Переменные раскрытия произведённые из адреса

       Обычно, локальная доставка обрабатывает один адрес, и в этом случае, переменные типа $domain и $local_part установлены в течение локальных доставок. Однако, в некоторых обсоятельствах, может быть обработано более одного адреса за раз (например, при записи пакетного SMTP для дальнейшей передачи другими средствами). В этом случае, переменные, ассоциированные с локальной частью, никогда не устанавливаются, $domain устанавливается лишь если адреса имеют одинаковый домен, $original_domain не устанавливается никогда.


    =============
    translated by lissyara
    verifying by Gerk





  •  

      Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
      Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

    © lissyara 2006-10-24 08:47 MSK

    Время генерации страницы 0.1333 секунд
    Из них PHP: 48%; SQL: 52%; Число SQL-запросов: 56 шт.
    Исходный размер: 17135; Сжатая: 5325