|
|
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
Ссылка на обсуждение: http://forum.lissyara.su/viewforum.php?f=20.
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
|
Статистика сайта
|
Сейчас на сайте находится: 6 чел.
|
За последние 30 мин было: 40 человек
|
За сегодня было 7188 показов, 845 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
|