LISMの設定
ハンドラの設定項目 †
ハンドラの設定は<handler>タグの内部に記述します。
LISMは、標準でScript、Rewriteをハンドラとして使用できます。
Script †
Scriptハンドラは指定したスクリプトを実行します。
- <lock>
- preからpostまでのハンドラ処理を排他制御する場合、排他制御用のロックファイル名を指定
- <execrule>
- スクリプトの実行条件を指定します。実行条件は属性として定義し、以下のものが使用可能です。
属性:
type: スクリプトの実行が更新処理前の場合pre、更新処理後の場合postを指定
dn: スクリプトの実行対象となるDNを正規表現で指定
match: 指定した正規表現にアトリビュートが合致した場合スクリプトを実行(アトリビュートは”アトリビュート名: 値”の形式)
- <op>
- スクリプトを実行する更新要求名を指定します。
属性:
name: 更新要求名(add | delete | modify)
- <script>
- スクリプトの実行文を指定します。
実行文には、以下のパラメータを使用することができます。
%r: RDNの値
%i: 更新情報の内容
形式:
追加:dn=DN#属性名1=値1:値2:...#属性名2...
変更:dn=DN#変更の種類:属性名1=値1+値2+...#変更の種類...
(変更の種類は、addはA、replaceはR、deleteはDです。)
Rewrite †
RewriteハンドラはLISMを経由するLDAPのリクエスト、レスポンス情報を文字列変換します。
- <libload>
- RewriteハンドラでロードするPerlのライブラリを指定します。<rewritemap>で関数を使用する場合に、その関数が定義されているライブラリを読み込むのに使用します。
- <rewritemap>
- 文字列の変換マップを定義することができます。ここで、定義した変換マップは<rewrite>のsubstitution属性内で使用することができます。
属性
name: 変換マップ名
type: 変換マップのタイプ
attrs 変換マップの設定
typeには、function、regexp、ldap、lismを指定することが可能です。
functionの場合、該当する文字列はnameで指定したperl関数の実行結果に変換されます。
regexpの場合、attrsで指定した正規表現のサブパターンにマッチした値へ変換されます。
ldapの場合、attrsで指定したLDAPのURIに従った検索が実行され、該当する文字列はその検索結果となる属性値に変換されます。
lismの場合、attrsには"LISMを検索するベースDN?取得する属性名"を指定します。
- <rewrite>
- 文字列変換のパターンを指定します。文字列変換の対象となるのはDN、addリクエストとmodifyリクエストの更新情報、searchリクエ
ストの検索フィルタ、searchレスポンスの検索結果、compareリクエストの比較対象属性です。更新情報、検索結果に関しては、LDIF形式の情
報として扱い、文字列変換を行います。
属性
context: 文字列変換の対象情報
・request:全てのリクエスト
・bindRequest:bindのリクエスト
・compareRequest:比較のリクエスト
・searchRequest:検索のリクエスト
・addRequest:追加のリクエスト
・modifyRequest:変更のリクエスト
・deleteRequest:削除のリクエスト
・searchResult:検索結果
dn: 文字列変換の実行対象となるDNを正規表現で指定
modop: 文字列変換を実行するmodifyの更新種類(add|replace|delete)を","区切りで指定
match: 文字列変換の対象文字列(正規表現形式:大文字小文字の区別無)
substitution: 文字列変換後の文字列(正規表現形式)
matchで()のパターングループにマッチした値は、substitutionで%1,%2,...として使用することができます。また、substitutionで%{変換マップ名}と記述することで、変換マップを使用することもできます。
- [例]
- 以下の例では、modifytimestampの値をdate2time()の実行結果に変換しています。また、uidの値を、(uid=<uidの値>)
として"ldap://localhost:9011/ou=People,dc=example,dc=com"から検索したdescriptionの
値で変換しています。検索に際しては、bind
DNとしてcn=Manager,dc=example,dc=comが、パスワードとしてsecretが使用されます。
<rewritemap name="date2time" type="function"/>
<rewritemap name="idmap" type="ldap" attrs="ldap://localhost:9011/ou=People,dc=example,dc=com?description???
binddn=cn=Manager%2cdc=example%2cdc=com,bindpw=secret"/>
<rewrite context="request" match="modifytimestamp: *([0-9]*Z)$" substitution="modifytimestamp: %{date2time('%1')}"/>
<rewrite context="request" match="uid(=|: )([^,]*)" substitution="uid%1%{idmap(uid=%2)}"/>
Setval †
Setvalハンドラはエントリの追加時、属性に対して指定した値を設定します。
- <entry>
- 値を設定するエントリを指定します。
属性
dn: エントリのDNを正規表現により指定
- <default>
- 属性のデフォルト値を指定します。エントリの追加時に指定した属性の値が設定されていない場合、この値が設定されます。
属性
name: 属性名
- <value>
- 登録する値を指定します。値には定数、または値を生成するPerlの関数を指定することができます。
属性:
type: 値のタイプ(constant | function)
関数を指定した場合、次の情報を利用することができます。
$dn: 対象エントリのDN
$entryStr: 追加するエントリ情報(LDIF形式)
- <addition>
- 属性に追加する値を指定します。エントリの追加時、指定した属性に、この値が追加されます。
属性
name: 属性名
- <value>
- 登録する値を指定します。値には定数、または値を生成するPerlの関数を指定することができます。
属性:
type: 値のタイプ(constant | function)
関数を指定した場合、次の情報を利用することができます。
$dn: 対象エントリのDN
$entryStr: 追加するエントリ情報(LDIF形式)
- <replace>
- 指定した値で属性の値を置き換えます。エントリの追加時、指定した属性の値が、この値で置き換えられます。
属性
name: 属性名
- <value>
- 置き換える値を指定します。値には定数、または値を生成するPerlの関数を指定することができます。
属性:
type: 値のタイプ(constant | function)
関数を指定した場合、次の情報を利用することができます。
$dn: 対象エントリのDN
$entryStr: 追加するエントリ情報(LDIF形式)
- <libload>
- SetValハンドラでロードするPerlのライブラリを指定します。<value>で関数を使用する場合に、その関数が定義されているライブラリを読み込むのに使用します。
Check †
Checkハンドラは差分データ検索処理時にエントリの値が指定した条件を満たすかチェックし、条件を満たさないエントリについてはファイルに記録します。
- <libload>
- CheckハンドラでロードするPerlのライブラリを指定します。<function>で関数を使用する際に、その関数が定義されているライブラリを読み込むのに使用します。
- <file>
- 条件を満たさないエントリを記録するファイル名
- <check>
- 値をチェックするエントリを指定します。
属性
dn: エントリのDNを正規表現により指定
filter: 対象エントリを検索フィルタ形式で指定
- <attr>
- 値をチェックする属性を指定します。
属性
name: 属性名
- <minlen>
- 値の最小文字数
- <maxlen>
- 値の最大文字数
- <regexp>
- 値の条件を正規表現で指定
- <function>
- 引数に属性の値を取り、条件を満たすと真を返す関数を指定
- <required>
- "on"の場合、この属性は必須