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

21. Роутер “queryprogram”


    Роутер “queryprogram” маршрутизирует адрес путем вызова внешней команды и после действует в соответствии с ее выводом. Это достаточно тяжеловесный способ маршрутизации и предназначен он главным образом для несильно нагруженных систем или для экспериментов. Однако, если есть возможность использовать опции предусловий (“domains”, “local_parts”, и т.д. ), чтобы пропускать этот роутер для большинства адресов, то он может использоваться в специальных целях даже на загруженном узле. Ниже перечислены следующие частные опции роутера:
опция
использование
тип
по-умолчанию
command queryprogram string† unset


   Данная опция должна быть обязательно установлена. Она определяет команду, которая должна запускаться. Команда разделяется на имя команды и ее аргументы, и затем каждый из них преобразуется отдельно (точно так же как и для транспорта
“pipe”, описанного в главе 29).
опция
использование
тип
по-умолчанию
command_group queryprogram string unset


   Эта опция определяет групповой идентификатор (gid) для запуска команды. Она должна быть установлена в том случае, если опции
“command_user” присвоено числовое значение идентификатора пользователя (uid). Если данная опция начинается с цифры, то она интерпретируется как числовое значение группового идентификатора (gid). В противном случае, поиск ее значения выполняется путем вызова функции “getgrnam()”.
опция
использование
тип
по-умолчанию
command_user queryprogram string unset


   Данная опция должна быть обязательно установлена. Она определяет идентификатор пользователя (uid), от имени которого должна быть выполнена команда. Если опция начинается с цифры, то она интерпретируется как числовое значение идетификатора пользователя. В противном случае, поиск ее значения выполняется при помощи функции
“getpwnam()”, а если не определена опция “command_group”, то также происходит и поиск значения группового идентификатора gid.
   Внимание: Изменение uid и gid возможно лишь когда exim запущен от пользователя root, что происходит, в нормальной конфигурации, во время доставки. Однако, во время проверки адреса, в процессе приёма сообщения, exim, обычно работает не от пользователя root. Если маршрутизатор
“queryprogram” вызывается не от root, то exim не может изменить uid или gid до выполнения команды. В таких обстоятельствах, команда выполняется с текущими gid и uid.
опция
использование
тип
по-умолчанию
current_directory queryprogram string /


   Эта опция определяет абсолютный путь, куда происходит переход перед запуском команды.
опция
использование
тип
по-умолчанию
timeout queryprogram time 1h


   Если команда не завершается в течение периода таймаута, то ее группа процессов уничтожается и сообщение замораживается. Нулевое значение времени указывает на отсутствие таймаута.
   Стандартный вывод команды направляется в конвейер (pipe), чтение из которого производится после завершения команды. Он должен состоять из одной строки вывода, содержащей до 5 полей, разделенных пробелами. Максимальная длинна строки 1023 символа. Более длинные линии укорачиваются. Первое поле является одним из нижеперечисленных слов (независимо от регистра):

  • “Accept”: маршрутизация выполнена успешно; остальные поля определяют какие действия выполнять (см. ниже).
  • “Decline”: роутер отклоняется; передать адрес на следующий роутер, если только не установлена опция “no_more”
  • “Fail”: маршрутизация завершилась неудачно; адрес последующим роутерам не передаётся. Весь последующий текст является сообщением об ошибке. Если запуск роутера выполняется как часть проверки адреса во время входящего SMTP сообщения, то сообщение включается в SMTP-ответ.
  • “Defer”: в данный момент маршрутизация не может быть завершена; попробуйте позже еще раз. Весь следующий за этим текст в строке является сообщением об ошибке, которое записывается в журнал. Сообщение не вклчается в SMTP-ответ.
  • “Freeze”: то же что и “defer", за исключением того, что сообщение замораживается.
  • “Pass”: передать адрес на следующий роутер (или на роутер, определенный опцией “pass_router”), перекрывая опцию “no_more”.
  • “Redirect”: сообщение перенаправляется. Оставшаяся часть строки представляет собой список новых адресов, маршрутизируемых независимо друг от друга, начиная с первого роутера, либо с роутера, определенного опцией “redirect_router”.
       Если первым словом является
    “accept”, то остаток строки состоит из некоторого количества ключевых слов и их значений, например так (строка разделена на две, для того, чтобы уместить по ширине страницы):
    ACCEPT TRANSPORT=<transport> HOSTS=<list of hosts>
    LOOKUP=byname|bydns DATA=<text>
    

       Данные могут быть указаны в произвольном порядке, к тому же все они являются необязательными. Если не определен транспорт, то используется транспорт, описанный общей опцией “transport”. Список узлов и тип поиска необходимы только в том случае, если транспортом является транспорт smtp, который не может самостоятельно определить список узлов.
       Формат списка узлов такой же как и для роутера manualroute. Он может содержать как IP-адреса и имена узлов, так и имена с последующим суффиксом
    “/MX” для определения подсписков узлов, полученных путем поиска MX-записей.
       Если тип поиска не определен, то Exim ведет себя следующим образом во время попыток нахождения IP-адреса для каждого узла: Сначала выполняется DNS-запрос. Если в результате возвращается что-либо, отличное от HOST_NOT_FOUND, то используется этот результат. В противном случае, Exim вызывает функцию
    “getipnodebyname()” или “gethostbyname()”, и результатом поиска в этом случае является результат этого вызова.
       Если установлено поле DATA, то его значение помещается в переменную
    “$address_data”. Например, данная возвращенная строка
    accept hosts=x1.y.example:x2.y.example data="rule1"
    

    маршрутизирует адрес на транспорт по умолчанию, список узлов состоит из двух узлов. Если транспорт запускается, то строка “rule1” помещается в переменную “$address_data”.


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





  •  

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

    © lissyara 2006-10-24 08:47 MSK

    Время генерации страницы 0.0534 секунд
    Из них PHP: 63%; SQL: 37%; Число SQL-запросов: 56 шт.
    Исходный размер: 24629; Сжатая: 6273