Lookup |
Lookup – это обобщенный интерфейс поиска объектов и получения связанных с ними значений. Значения разделяются запятыми. Перед значением может стоять префикс, обозначающий тип Lookup, который отделяется двоеточием: [prefix1:]value1, [prefix2:]value2, ... Если префикс не указан, то значение используется непосредственно. В составе Lookup-запросов возможно применение следующих специальных символов: •$s - будет заменен перед отправлением на запрашиваемый элемент. Например, если запрашивается адрес, то будет подставлен весь адрес (без угловых скобок), а если домен – то весь домен. •$d - если запрашиваемым элементом является адрес, то из него будет выделено доменное имя и передано в качестве запроса. В противном случае подставляется весь запрос. •$u - если запрашивается адрес, то будет выделено имя пользователя и передано в качестве запроса. Если параметр запрашивает домен, то передается пустая строка. •$$ - заменяется на одинарный $.
Cуществуют следующие варианты префикса, задающие источник данных для поиска: •value - за ним указывается непосредственно искомое значение. Этот префикс не обязателен и подразумевается по умолчанию, если не указано иного префикса. Этот префикс может быть указан явно, если, к примеру, в искомом значении встречается символ ":". •file - значение является путем к файлу. Каждое значение в файле должно находиться в новой строке. При поиске это один из самых быстрых вариантов, так как позволяет использовать сортировку и бинарный поиск.
•regex - значение является регулярным выражением (совместимым с синтаксисом регулярных выражений Perl) – при проверке ищется подстрока, а не полное совпадение; •rfile - значение является путем к файлу. Файл содержит набор регулярных выражений (совместимых с синтаксисом регулярных выражений Perl), каждое из которых должно находиться в новой строке. При проверке ищется подстрока, а не полное совпадение;
•ldap - значение представляет собой путь к поиску на LDAP-сервере; Формат значения следующий: [param1=val1|param2=val2|...|] ldap_url где ldap_url – это интернет-адрес LDAP-запроса. Пары param=value указываются в том случае, если в данном Lookup-запросе требуется переопределить параметры LDAP, заданные в секции [LDAP] конфигурационного файла Dr.Web MailD. Можно указывать только те параметры из этой секции, для которых явно написано, что это возможно (см. описание параметров секции). Для параметров, значение которых не переопределено в данном запросе, будут использованы значения, заданные в [LDAP]. URL LDAP-запроса выглядит следующим образом: ldap://hostport/dn[?attrs[?scope[?filter[?exts]]]] где: ohostport - имя хоста (возможно, вместе с номером порта, указанным через двоеточие); odn - имя базы данных, в которой осуществляется поиск; oattrs - список атрибутов запроса, разделенных запятой; oscope - может принимать три значения: base, one, sub; ofilter - название поискового фильтра; oexts - набор расширений LDAP и/или API. Пример: ldap://ldap.example.net/dc=example,dc=net?cn,sn?sub?(cn=*) •odbc, postgres, oracle, mysql, firebird, sqlite - значение представляет собой SQL-запрос к соответствующей базе данных: [param1=val1|param2=val2|...|] sql_request sql_request – строка SQL-запроса к базе данных (источнику данных DSN в случае ODBC). Параметры подключения берутся из соответствующей секции конфигурационного файла Dr.Web MailD (соответственно [ODBC], [PostgeSQL], [Oracle], [MySQL], [Firebird], [SQLite]). В качестве SQL-запроса должен использоваться запрос SELECT или любой запрос, возвращающий значение, включая вызов хранимой процедуры (stored procedure). Пары param=value указываются в том случае, если в данном Lookup-запросе требуется локально переопределить параметры обращения к БД, заданные в соответствующей секции параметров БД конфигурационного файла Dr.Web MailD. Можно указывать только те параметры из этой секции, для которых явно написано, что это возможно (см. описание параметров секции). Для параметров, значение которых не переопределено в данном запросе, будут использованы значения, заданные в секции. В запросе можно указывать специальные символы.
•cdb - значение представляет собой текстовое имя ключа в базе данных CDB. Базы данных CDB не поддерживают язык запросов SQL. Поэтому драйвер CDB эмулирует единственную команду SQL для унификации работы с Lookup: select * from @tablename where key='@string' где @tablename следует заменить на имя одного из файлов, которые были заданы в секции [CDB] конфигурационного файла Dr.Web MailD как источники данных. В запросе можно указывать специальные символы. Пример: cdb:skipdomains=file:/home/skipdomains.list|select * from my_file where key='$s' Обратите внимание, что параметр SkipDomains, локально переопределенный в данном Lookup, имеет тип LookupLite (т.е. является Lookup, для которого разрешены только префиксы file: и value:). •berkeley - обеспечивает взаимодействие с Berkeley DB. Формат запроса аналогичен cdb. Используются параметры заданные в секции [Berkeley] конфигурационного файла Dr.Web MailD. В запросе можно указывать специальные символы. После префикса в Lookup можно (но не обязательно) указывать список локальных значений параметров SkipDomains и OnError для этого Lookup. Локальные значения параметров для Lookup задаются в формате: NAME1 = VALUE1 | NAME2 = VALUE2 | ... | где NAME – имя параметра (не зависит от регистра), а VALUE – значение параметра. Если параметр локально не переопределен, то его значение будет совпадать со значением по умолчанию, или со значением, заданным в секции конфигурационного файла Dr.Web MailD, соответствующей префиксу Lookup (тип источника данных для поиска).
Обратите внимание, что при обработке Lookup Dr.Web MailD будет ожидать подключения к источнику данных (СУБД или LDAP-серверу) в течение заданного в настройках (или локально переопределенного в префиксе Lookup) тайм-аута, что может привести к замедлению работы Dr.Web MailD при нестабильном сетевом соединении или при неправильно указанных параметрах подключения. В случае если в течении тайм-аута произвести подключение не удастся, будет зафиксирована ошибка, которая будет обрабатываться в соответствии со значением параметра OnError (заданного в настройках источника данных или локально переопределенного в префиксе Lookup). Если Lookup используется как значение параметра Router в секции [Sender], и при этом задан режим обработки ошибок OnError=exception (в настройках используемого источника данных или переопределен локально), то, в случае если будет невозможно получить нужный маршрут из источника данных, эта ситуация будет обработана как ошибка в компоненте Sender, запись о чем будет зафиксирована в журнале. При этом в синхронном режиме компонент Receiver всегда возвращает отправителю письма код SMTP 451 (Requested action aborted: local error in processing), а обработанное письмо, согласно коду Tempfail (временная ошибка), удаляется из всех очередей. В асинхронном режиме письмо будет помечено как "потерянное" и Sender будет пытаться его отправлять с периодичностью, указанной в параметре StalledProcessingInterval этой же секции.
|