Lookups

Lookupは、外部ソースにあるオブジェクトおよびその値を参照するためのコモンインターフェースです。値はカンマで区切られます。lookupの種類を定義する特別なプレフィックスを値の前に置くことが出来ます。

[prefix1:]value1, [prefix2:]value2, ...

プレフィックスが指定されていない場合、値はそのまま使用されます。使用可能なプレフィックスは以下のとおりです。

value - 参照される値自体がこのプレフィックスの後に指定されます。値に記号などが含まれている場合に便利です。
file - ファイルへのパスです。ファイル内の値は一行に1つずつ指定します。それにより、二分探索が用いられ高速な検索が実行されます。
regex - この値はPerl互換の正規表現です。検査の間にサブストリングが参照され、完全な一致は必要ありません。
rfile - ファイルへのパスです。ファイルにはPerl互換の正規表現が含まれ、一行に1つずつ指定します。検査の間にサブストリングが参照され、完全な一致は必要ありません。
ldap - LDAPサーバへのパスで、以下の書式で指定します。

[param1=val1|param2=val2|...|] ldap_url

ldap_urlはLDAPクエリのURLで、param1、param2などは、そのlookupに対するDr.Web MailD設定ファイル[LDAP]セクションからのローカルパラメータです。このセクションからは、使用可能であると明示的に述べられているパラメータのみ指定することが可能です。

LDAP URL は以下のようになります。

ldap://hostport/dn[?attrs[?scope[?filter[?exts]]]]

 

ohostport - ホスト名および追加のポート番号(hostname[:port]
odn - 検索データベース
oattrs - カンマで区切って列挙する、要求する属性のリスト
oscope - baseonesubの3つのストリングのうちいずれか
ofilter - フィルタ名
oexts - LDAPおよび/またはAPI拡張オプション

:

ldap://ldap.example.net/dc=example,dc=net?cn,sn?sub?(cn=*)

フィルタ名には特別な記号のセットを指定することが出来ます。この値はクエリがLDAPサーバへ送られる前に、必要なエレメントに変更されます。

o$s - 要求されたエレメントに変更されます。例えば、あるアドレスを検索した場合、$sはこのアドレス全体に変更され(山括弧無しで)、あるドメインを検索した場合、$sはドメイン名に置き換えられます。
o$d - あるアドレスを検索した場合、$dはそのアドレスのドメイン部分に置き換えられます。それ以外の場合、要求全体が挿入されます。
o$u - あるアドレスを検索した場合、$uはそのアドレスのユーザ名に置き換えられます。ドメイン名を検索した場合、空のストリングが挿入されます。
o$$ - $1つに置き換えられます。

LDAPを使用する場合、OpenLDAP v. 2.0以降のライブラリが必要です。

odbc, oracle - ODBC、Oracleデータベースに対するSQLクエリで、以下の書式で指定します。

    [param1=val1|param2=val2|...|] sql_request

param1param2 などは、ODBC lookupおよびOracle lookupに対するDr.Web MailD設定ファイルのそれぞれ[ODBC][Oracle] セクションからのローカルパラメータです。このセクションからは、使用可能であると明示的に述べられているパラメータのみ指定することが可能です。ldap lookupと同じ特別な記号を使用することが出来ます。

新しいDSN設定が適用されるのはソフトウェアを再起動した後になります(SIGHUPシグナルの送出では既存の接続が再初期化されないことに注意してください)。

ODBCを使用する場合、ODBC version 3.0以降をサポートするODBCライブラリが必要です。このライブラリはスレッド対応でコンパイルされていなければなりません。UnixODBC 2.0以降の使用を推奨します。

Oracleを使用する場合、OTLv8以降をサポートするOracleクライアント付属のlibclntshが必要です。

Oracleに接続する際にユーザ名、パスワード、およびConnectionStringパラメータの値としての接続名(ConnectionString = user/password@connectionname)を指定しなくてはならない場合があります。

接続名の設定には2つの方法があります。

1.Dr.Web MailDとOracleが同じコンピューターにインストールされている場合、Oracleドキュメンテーションに応じて、最初に環境変数ORACLE_HOMEDr.Web MailDに対して設定する必要があります。次に$ORACLE_HOME/network/admin/tnsnames.oraファイル内でTNS名の1つを接続名として指定します。
2.$ORACLE_HOME/network/admin/tnsnames.oraから直接セットアップ記述(改行無しで)をコピーすることも可能です。

:

tnsnames.ora ファイル:

CONNECTIONNAME =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = CONNECTIONNAME)

   )

 )

そこで、

user/password@ CONNECTIONNAME

または

user/pasword@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = CONNECTIONNAME)))

を接続ストリングとして指定することが出来ます。

 

 

postgres - PostgreSQLデータベースに対するSQLクエリで、シンタックスはODBCに対する要求と同じです。
cdb - データベース内に保存されているキーの英数字名です。CDB自体は[alphanumerical key]:[alphanumerical value]のペアが保存されている読み取り専用のデータベースです。データベースファイルはtinycdbパッケージを使用して作成することが出来ます。このlookupを使用するにはCDBデータベースのファイルリストを指定してください。ファイルは1つのテーブルのように取り扱うことができ、テーブル名はパスを取り除いたファイル名と同じになります(file: /path/to/table.cdb --> table.cdbへのフルパスを指定しない)。

テーブルからのエントリを読むには以下のコマンドを使用します。

select * from table.cdb where key='123'

select * from table.cdb where key='$'

CDBデータベースはSQLクエリ入力言語をサポートしていないため、 ドライバはlookupと動作する為にシングルコマンドをSQLにエミュレートします。

select * from @tablename where key='@string'

@tablenameDr.Web MailD設定ファイルの[CDB]セクション内でソースアイテムとして指定されたいずれかのファイル名に変更してください。cdb lookupではldap lookupと同じ特別な記号を使用することが出来ます。

例:

cdb:skipdomains=regex:^inbox|select * from my_file where key='$s'

berkeley - Berkeley DBとのインタラクションを可能にします。クエリの書式はcdbプレフィックスの書式と同じです。セットアップの際にシンボリックリンク/usr/lib/libdb.soが作成され、現在のライブラリを示します。シンボリックリンクが作成されなかった場合、正しいライブラリのバージョンを指定する必要があります(例:/usr/lib/libdb-4.5.so)。このlookupと動作することが出来るのはライブラリv. 4.3~4.6のみです。ldap lookupと同じ特別な記号を使用することが出来ます。
firebird - Firebirdデータベースに対するSQLクエリで、シンタックスはODBCに対する要求と同じです。データベースに接続するにはHostフィールドでデータベースサーバのアドレスを指定してください。

Host=somehost           #somehost:3050

Host=somehost/1234      #somehost:1234

sqlite - SQLiteデータベースに対するSQLクエリで、シンタックスはODBCに対する要求と同じです。このlookupを使用できるのはSQLiteデータベースv. 3.xのみです。

SQLiteは、プログラムが書き込みをする間ファイルがロックされる仕様になっています。そのため、複数のプログラムで1つのSQLiteデータベースを使用している場合、データベースへの排他的なアクセスが出来ない時間(Dr.Web MailD設定ファイル[SQLite]セクションのBusyTimeoutパラメータで指定された時間)が生じる可能性があります。その場合、エラーメッセージ"Database is locked"を出して書き込み処理は中断されます。

GUIを持つツールは予備のデータベースをロックすることがあるため、そのようなツールは使用しないようにしてください。第三者プロセスがデータベースを長時間ロックした場合、またはDr.Web MailDそのものが1つのファイルに対して異なるタイプの統計情報を短いタイムアウト時間で出力するようにセットアップされている場合、統計情報のエクスポート中にエラーが発生することがあります。

sqlite lookupではldap lookupと同じ特別な記号を使用することが出来ます。

いくつかのパラメータに対する値が保存されたSQLiteデータベースが一定の時間使用できなかったが、その後接続が復元された場合、SQLiteとの接続を再初期化するためにHUPシグナルがdrweb-maildモジュールに送信される必要があります。

mysql - MySQLデータベースに対するSQLクエリで、シンタックスはODBCに対する要求と同じです。

プレフィックスの後に、それぞれのlookupに対して任意のローカルパラメータのリストを以下の書式で指定することが出来ます。

NAME1 = VALUE1 | NAME2 = VALUE2 | ... |

NAMEM - パラメータ名(大文字小文字は区別されません)
VALUEN - パラメータ値

使用可能なローカルパラメータは以下のとおりです。

SkipDomains - lookup要求からスキップすることが出来るドメインのリストです。このパラメータについての詳細は設定ファイルのlookup設定内をご覧ください。
OnError = {ignore|exception} - lookupのエラー処理手順を設定します。

デフォルトでは"ignore" が使用され、エラーは無視され情報がログに出力されます。

"exception" 値は、共通のエラーとして処理される(例えばProcessingErrorパラメータを使用して)例外を作るよう指示します。企業が対応するセーフティポリシーを取り入れている場合に使用され、それぞれのメッセージはその他のコンポーネント内(lookupが使用しているデータベース内など)で起こりうる全てのエラーに関係なく処理される必要があります。

OnErrorパラメータは全てのlookupセクション(LDAP、ODBC、...)内で指定することができ、それらのlookupの処理中に生じたエラーに対して該当するアクションが適用されます。

OnErrorパラメータを使用したこのエラー処理は、パラメータ値の検索が実行されたときのみ使用することができ、Dr.Web MailDが起動された時には使用できません。そのためスタートアップ時に正常に処理されなかったlookupがあった場合、それらのlookupに対するOnErrorパラメータ値に関係なく、そのようなエラーは致命的とみなされます。