ここでは、テーブル定義の各セクションに作成する変数やトークンの構文について説明します。
マッピングの構文は、nis.mapping ファイルの例を使って説明します。
「Common」セクションに定義する変数の構文は、表 5-1 にあるキーワードを除き、次のようになります。
variable-name=value |
「Common」セクションに定義する変数の値は静的構成情報です。
「Dynamic」セクションに定義する変数の構文は、表 5-1 にあるキーワードを除き、「Common」セクションに定義する変数の構文と同じです。しかし、それらの値は、実行時にマッピングファイルを使用するユーティリティ (dsimport や dsexport など) への入力で使用されます。
「Extract」セクションに定義する変数には、入力情報をトークンと呼ぶ小さな単位の情報に分解するための規則を定義します。これらの情報は、LDAP 属性に直接マップできるか、簡単な処理で LDAP 属性にマップできます。
トークンへの分解を定義する変数の構文は、次のとおりです。
VARIABLE => $element1 separator $element2 [separator $elementn...|| ...] |
トークンとトークンの間の区切り文字は、入力情報で使われている区切り文字です。これには、空白文字、コンマ、コロンなど任意の文字が使用できます。ただし、行定義の 1 つの空白は、実際の入力情報の複数の空白やタブと等しくなります。分解に対しいくつかの代替規則を指定できます。その場合には、2 つのパイプ記号 (||) でそれぞれの代替規則を区切ります。
変換処理では、規則が指定された順に調べられ、入力として与えられた情報と最初に一致する規則が適用されます。
たとえば、nis.mapping では、次の定義によって、bootparams ファイルの行からトークンが抽出されます。
LINE =>$ipHostNameT $parametersT |
hosts ファイルの場合は、これより少し複雑な例となります。
LINE =>$dummy $ipHostNumberT $ipHostNameT $allIpHostAliasesT*#$descriptionT*||¥ $dummy $ipHostNumberT $ipHostNameT $allIpHostAliasesT||¥ $dummy $ipHostNumberT $ipHostNameT |
これらの例では、トークン parametersT と allIpHostAliasesT をさらに処理しないと、LDAP 属性にマップできません。必要な処理は「Condense」セクションで定義します。
「Condense」セクションには、「Extract」セクションから得られるトークンの操作を定義する変数や、テーブル定義で前に定義した変数を指定します。
このセクションは、「Build」セクションで行う属性値の定義を単純化します。
「Condense」セクションで定義する変数には、次のものがあります。
同じテーブルセクションで指定したトークン
同じ NIS テーブルの「Common」セクション、またはすべての NIS テーブルに適用する「Common」セクションに指定した構成変数
定数式
関数 exclude、getrdn、split、instances2string、string2instances、trim。1 つの変数には 1 つの関数しか指定できません。同じ情報に対しいくつかの関数を使いたい場合は、中間変数を作成する必要があります。
「Condense」セクションの変数には複数の代替規則を指定できます。変換処理では、入力情報と一致する最初の規則が使用されます。それらの規則は、2 つのパイプ記号で区切ります、また、それらの規則は同じ式の一部でなければなりません。たとえば、次の規則は有効です。
fifi=$parameter1 - $parameter2 || $parameter1 || juju |
しかし、次の規則は有効ではありません。
fifi=$parameter1 - $parameter2 fifi=$parameter1 fifi=juju |
「Condense」セクションには、変数をいくつでも指定できます。変数の間に従属関係がある場合は、指定する順序に意味があります。たとえば、次のように指定できます。
fifi=$parameter1 - $parameter2 || $parameter1 || juju riri=$fifi - $parameterA loulou=$fifi - $parameterB |
variableA=split(what, "separator", "add_prefix", "add_suffix", order) |
variableA は変数名です。
what は、この操作を適用する情報単位 (変数またはパラメータ) です。
separator は、情報をどこで分割するかを示します。この値には空白が含まれることがあるため、全体を引用符で囲みます。
add_prefix は、分割によって得られる各項目に付ける接頭辞です。この値には空白が含まれることがあるため、全体を引用符で囲みます。
add_suffix は、分割によって得られる各項目に付ける接尾辞です。この値には空白が含まれることがあるため、全体を引用符で囲みます。
order は、分割によって得られる項目を使用する順序です。使用できる値は left2right か right2left です。
たとえば、nis.mapping ファイルでは、次の変数定義を使って、NIS ドメイン名を LDAP ドメインの一連の構成要素属性に分割します。
DC_NAMING=split($DOMAIN_NAME, ".", "dc=", ",", left2right) |
ドメイン名に eng.europe.xyz.com が指定されている場合は、結果は次のようになります。
dc=eng, dc=europe, dc=xyz, dc=com
string2instances 関数は、指定された文字列をインスタンスに分解します。この操作の構文は次のとおりです。
variableA=string2instances("string", "separator") |
variableA は変数名です。
string は、この操作を適用する情報単位 (変数またはパラメータ) です。この値には空白が含まれることがあるため、全体を引用符で囲みます。
separator は、情報をどこでインスタンスに分割するかを示します。この値には空白が含まれることがあるため、全体を引用符で囲みます。
たとえば、nis.mapping は、bootparams ファイルの「Condense」セクションにある次の定義を使って、一連のパラメータを個別のインスタンスに分解します。
bootParameterT=string2instances($parametersT," ") |
さらに、string2instances 関数は、オブジェクトクラスの継承ツリーを指定するときにも使用します。たとえば、特定のマッピング定義を使って作成したエントリのオブジェクトクラスが organizationalPerson なら、マッピング定義の「Condense」セクションには次の行が必要です。
objectClassT=string2instances("top person organizationalPerson", " ") |
instances2string 関数は、いくつかのインスタンスを結合して 1 つの文字列にします。この操作の構文は次のとおりです。
variableA=instances2string(what, "separator") |
variableA は変数名です。
what は、いくつかのインスタンスを持つ変数です。
separator は、文字列の各要素を区切る値です。この値は空白の場合があるため、全体を引用符で囲みます。
たとえば、あるマシン名と別名のリストを見つけるには、次の変数を使用します。
NameList=instances2string($cn, " ") |
cn 属性の値が camembert、Cam、Bertie の場合は、結果は次のようになります。
camembert Cam Bertie
trim 関数は、パラメータを囲む不要な空白を取り除きます。trim 操作の構文は次のとおりです。
variableA=trim(parameter) |
variableA は変数名です。
parameter は、空白を取り除きたい項目です。
たとえば、別名リストを構成メンバーに分解する場合は、次の変数を指定できます。
aliasMember=string2instances($aliasList, ",") trimAliasMember=trim($aliasMember) |
string2instances 操作によって得られる各 aliasMember パラメータが処理され、空白が取り除かれます。
getrdn 関数は、エントリの名前付き属性を返します。これは、エントリの相対識別名で使われる属性です。getrdn 操作の構文は次のとおりです。
variableA=getrdn() |
getrdn 関数は、「Condense」セクションの変数でしか使用できません。
たとえば、あるマシンの cn 属性の値は camembert、Cam、Bertie で、相対識別名で使用されるそのマシンの実際のシステム名は camembert である場合は、次の変数を作成できます。
HostName=getrdn() |
getrdn 関数は、camembert という名前を返します。
getrdn 関数では、大文字と小文字を区別します。
exclude 関数は、文字列のリストから値を取り除きます。この操作の構文は次のとおりです。
variableA=exclude(string, exclude-value, "separator") |
variableA は変数名です。
string には、リストまたは文字列を指定します。
exclude-value は、除外する値です。
separator は、リストまたは文字列の各要素を区切る値です。この値は空白の場合があるため、全体を引用符で囲みます。
たとえば、あるマシンの別名のリストを得るには、名前のリストから標準名を除外する必要があります。次のような変数を指定できます。
NameList=instances2string($cn, " ") HostName=getrdn() HostAliases=exclude(NameList, HostName, " ") |
nis.mapping では、hosts マッピング定義の「Condense」セクションに次の指定があります。
ipHostAliasesLineT=exclude($allIpHostAliasesT,$ipHostNameT, " ") |
この定義によって、このホストの別名のリストから ipHostName が除外されます。
「Build」サブセクションには、一連の LDAP 属性と、それらの値の定義を指定します。このサブセクションには、少なくとも、オブジェクトクラスのすべての必須属性と、識別名が必要です。「Build」セクションに識別名の定義がないと、エントリはディレクトリに作成されません。
radius.mapping ファイルは、ディレクトリにエントリをインポートするときに使用されないため、このファイルの「Build」セクションに識別名の定義を指定する必要はありません。
属性値の定義には次の要素を使用できます。
テーブル定義のいずれかのセクションで指定した変数またはキーワード
「Front-End」セクションのすべてのテーブルに適用される「Common」セクションに指定した構成変数
定数式
上記すべて
「Build」セクションにおける LDAP 属性とその関連する値の定義の構文は、次のとおりです。
LDAPattribute=attributeValueDefinition |
たとえば、メール別名のエントリを作成するとします。LDAP 属性 rfc822mailMember を使って別名メンバーの名前を格納する場合は、マッピングに次の定義を指定します。
Condense: aliasMember=string2instances($aliasList, ",") trimAliasMember=trim($aliasMember) ... Build: rfc822mailMember=$trimAliasMember ... |