Sun Directory Services 3.1 管理ガイド

マッピングの構文と意味

マッピングの構文と意味は最大限の柔軟性を備えているため、次の操作を簡単に実行できます。

これにより、必要な属性を持つようにオブジェクトクラスを変更または作成しなければならない場合は、「スキーマの変更」を参照してください。

マッピングファイルは、次のパターンを持つ多数のセクションからなります。


Front-end name
	Common
	Table
		Common
		Dynamic
		Export
			Extract
			Condense
			Build
		Import
			Extract
			Condense
			Build
	Table
		Common
		Dynamic
		Export
			Extract
			Condense
			Build
		Import
			Extract
			Condense
			Build
...

各セクションの内容と意味については、「マッピングの意味」で説明します。各セクションの構文規則については、「マッピングの構文」で説明します。

マッピングの意味

「Front-end name」はサービス名を示します。この名前に続くすべての情報は、サービス固有の情報から LDAP のオブジェクトクラスと属性へのマッピングを記述するためのものです。

Front-end name の名前のすぐ後に続く最初の「Common」セクションは、その Front-end name またはサービスに適用される構成情報です。このセクションには、変換プロセスで必要な必須の構成変数と、便宜的に同じファイルに格納されている任意の構成変数が入っています。nis.mappingradius.mapping ファイルの場合、このセクションは管理コンソールで変更できます。

「Table」セクションは、特定の種類の情報に対するマッピング情報を定義します。このテーブル定義を使って作成するすべてのエントリのオブジェクトクラスは、このマッピング情報で決まります。それぞれのテーブル定義は、次のセクションからなります。

必須のセクションは「Dynamic」だけです。このセクションがないと、インポート操作もエクスポート操作もできません。他のセクションは必要なければ省略できます。たとえば、ディレクトリの情報をエクスポートしない場合は、「Export」セクションを作成する必要はありません。

各セクションには、インポートやエクスポート処理で使うキーワードと定義を指定します。表 5-1 は、一連のキーワード、それらを指定するセクション、およびそれらの目的を表しています。

どのセクションでも、変数または「トークン」(つまり、専用の定義) を次の書式で作成できます。

tokenT=token definition

専用定義には、「Condense」で説明する構文と機能を使用できます。

表 5-1 マッピングファイルキーワードの要約

セクション 

キーワード 

必須または省略可能 

目的 

Common 

BASE_DN 

必須。ただし、「Dynamic」セクションに指定できる 

名前付きコンテキストを指定する。「BASE_DN 」を参照

MAP_NAME 

NIS テーブル定義には必須 

テーブル定義に対応する NIS テーブル名を示す。「MAP_NAME 」を参照

PRIVATE_OBJECTCLASSES 

オブジェクトクラスが固有にならない場合は必須 

いくつかのテーブル定義から作成されるエントリの更新に使用する。「PRIVATE_OBJECTCLASSES 」を参照

Dynamic 

ALL_FILTER 

必須 

テーブル定義から作成されるすべてのエントリを指定するためのフィルタを定義する。「ALL_FILTER」を参照

DC_NAMING 

省略可能 

ドメイン名を LDAP の dc 名前構造体に変換するための機構を定義する。「DC_NAMING」を参照

LINE 

必須 

入力情報の分解を定義する。「LINE」を参照

MATCH_FILTER 

必須 

テーブル定義から作成される特定のエントリを指定するためのフィルタを定義する。「MATCH_FILTER」を参照

Export/Build 

LINE 

「Export」セクションがある場合は必須 

エクスポートファイルで、LDAP 属性からなる行の書式を定義する。「Export セクション」を参照

NIS_KEY 

NIS には必須 

エクスポートファイルにある NIS キーを指定する 

NIS_VALUE 

NIS には必須 

エクスポートファイルにある NIS 値を指定する 

Import/Extract 

LINE 

「Import」セクションがある場合は必須 

入力情報の分解を定義する。「Import セクション」を参照

Common セクション

「Common」セクションには、テーブル定義を使って作成するすべてのエントリに適用するための変数の定義を指定します。この変数の定義は、サービスやフロントエンド全体には適用されません。たとえば、「Common」セクションには、通常、作成するエントリが入る名前付きコンテキストを指定します。名前付きコンテキストは、BASE_DN キーワードで指定します。

BASE_DN

BASE_DN キーワードには、作成するエントリが入る名前付きコンテキストを指定します。dsimport ユーティリティは、このパラメータを次の順にいくつかの場所から探します。

  1. dsimport コマンド行の -V オプション

  2. 「Dynamic」セクション

  3. 「Table」の「Common」セクション

  4. 「Front-End」の「Common」セクション (マッピングファイルの先頭)

MAP_NAME

MAP_NAME キーワードには、このテーブル定義に対応する NIS マップ名を指定します。このキーワードは、NIS サービス用の管理エントリを作成するために使用します。ディレクトリサーバーは、これらのエントリを自動的に保守します。

このキーワードは、総称マッピング定義を使って作成する NIS エントリの名前付きコンテキストを作成するときにも使用します。

MAP_NAME キーワードは NIS サービス固有のものです。

PRIVATE_OBJECTCLASSES

PRIVATE_OBJECTCLASSES キーワードには、テーブル定義から得られるオブジェクトクラスと属性では完全なエントリを作成できないときに、オブジェクトクラスを指定します。このキーワードは、いくつかのテーブル定義から作成されるディレクトリエントリを保守するために必要です。たとえば、いくつかのテーブル定義がそれぞれ補助オブジェクトクラスとそれに関連する属性を作成する場合などです。

たとえば、NIS 環境では、ネットワークホストが少なくとも 3 つのファイル (/etc/bootparams/etc/ethers/etc/hosts) にエントリを持っている場合があります。しかし、各ホストは LDAP ディレクトリに、3 つの補助オブジェクトクラス bootableDevice、ieee802Device、ipHost からなる 1 つのエントリしか持っていません。このホストのエントリを上記のいずれかのファイルから削除する場合は、LDAP ディレクトリの対応するエントリを削除するのではなく、該当する補助オブジェクトクラスとそのオブジェクトクラス固有の属性を削除する必要があります。

Dynamic セクション

「Dynamic」セクションには、必要な情報を見つけるためのフィルタを動的に作成できる等号式を指定します。

LINE

LINE キーワードは、入力情報を動的にどのように分解するかを定義するときに必要です。分解の結果は、MATCH_FILTER 定義や ALL_FILTER 定義の要素として使用されます。

LINE キーワードの構文については、「Extract」を参照してください。

MATCH_FILTER

MATCH_FILTER キーワードには、dsimport ユーティリティが使用するフィルタを指定します。このユーティリティは、エントリを作成する前にそれがデータベースにすでにあるかどうかをこのフィルタを使って検査します。エントリがすでにある場合は、変更する必要かあるかどうかを検査します。

MATCH_FILTER キーワードは、ディレクトリサーバーが ypmatch などのコマンドに応答するときにも使用されます。

ALL_FILTER

ALL_FILTER キーワードには、dsexport コマンドが使用するフィルタを指定します。このコマンドは、このフィルタを使ってディレクトリエントリから元のファイルを再生成します。ディレクトリの情報をエクスポートしてその情報のソースファイルを再生成しない場合でも、このフィルタは必要です。

ALL_FILTER キーワードは、ディレクトリサーバーが、ある NIS テーブルに属するすべてのエントリをディレクトリから取り出すときにも使用されます。これは、ディレクトリサーバーが最新の NIS テーブルのコピーを常に保守しているからです。

さらに、ALL_FILTER キーワードは、ディレクトリサーバーが ypcat などのコマンドに応答するときにも使用されます。

DC_NAMING

DC_NAMING キーワードは、xyz.com 書式のドメイン名を LDAP のデータ格納接尾辞や dc=xyz, dc=com 書式の名前付きコンテキストに変換するときに使用する機構を定義します。このキーワードは、ディレクトリで使用しているネーミング構造がドメイン構成要素 (dc) 構造になっている場合に便利です。

Export セクション

「Export」セクションには、LDAP ディレクトリエントリからソースファイルを再生成する方法を定義します。このセクションは省略可能ですが、指定する場合は LINE キーワードが必要です。「Export」セクションの LINE キーワードは、元のソースファイルの行書式を表していなければなりません。

「Export」セクションには、次のサブセクションがあります。

nis.mapping ファイルには、「Build」サブセクションで NIS キーと NIS 値のペアを作成するための規則を定義します。さらに、このサブセクションには、LDAP ディレクトリのエントリに対応する NIS ファイルの行を生成するための規則を定義します。

Import セクション

「Import」セクションには、入力ファイルの行を LDAP ディレクトリのエントリに変換する方法を定義します。このセクションには必ず LINE キーワードが必要です。このキーワードでは、入力ファイルの行をどのように分解すれば、LDAP 属性で記述できる要素になるかを定義します。さらに、このセクションには、入力ファイルの行から作成する LDAP 属性のリストも指定する必要があります。

「Import」セクションには、次のサブセクションがあります。

nis.mapping ファイルには、「Extract」サブセクションの LINE 定義で、NIS ソースファイルの行を分析して NIS トークンと呼ぶ小さな情報単位に分解するための規則を定義します。

マッピングの構文

ここでは、テーブル定義の各セクションに作成する変数やトークンの構文について説明します。

マッピングの構文は、nis.mapping ファイルの例を使って説明します。

Common

「Common」セクションに定義する変数の構文は、表 5-1 にあるキーワードを除き、次のようになります。

variable-name=value

「Common」セクションに定義する変数の値は静的構成情報です。

Dynamic

「Dynamic」セクションに定義する変数の構文は、表 5-1 にあるキーワードを除き、「Common」セクションに定義する変数の構文と同じです。しかし、それらの値は、実行時にマッピングファイルを使用するユーティリティ (dsimportdsexport など) への入力で使用されます。

Extract

「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

「Condense」セクションには、「Extract」セクションから得られるトークンの操作を定義する変数や、テーブル定義で前に定義した変数を指定します。

このセクションは、「Build」セクションで行う属性値の定義を単純化します。

「Condense」セクションで定義する変数には、次のものがあります。

「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

split 関数

split 関数の構文は次のとおりです。

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 関数

string2instances 関数は、指定された文字列をインスタンスに分解します。この操作の構文は次のとおりです。

variableA=string2instances("string", "separator")

variableA は変数名です。

string は、この操作を適用する情報単位 (変数またはパラメータ) です。この値には空白が含まれることがあるため、全体を引用符で囲みます。

separator は、情報をどこでインスタンスに分割するかを示します。この値には空白が含まれることがあるため、全体を引用符で囲みます。

たとえば、nis.mapping は、bootparams ファイルの「Condense」セクションにある次の定義を使って、一連のパラメータを個別のインスタンスに分解します。

bootParameterT=string2instances($parametersT," ")

さらに、string2instances 関数は、オブジェクトクラスの継承ツリーを指定するときにも使用します。たとえば、特定のマッピング定義を使って作成したエントリのオブジェクトクラスが organizationalPerson なら、マッピング定義の「Condense」セクションには次の行が必要です。

objectClassT=string2instances("top person organizationalPerson", " ")

instances2string 関数

instances2string 関数は、いくつかのインスタンスを結合して 1 つの文字列にします。この操作の構文は次のとおりです。

variableA=instances2string(what, "separator")

variableA は変数名です。

what は、いくつかのインスタンスを持つ変数です。

separator は、文字列の各要素を区切る値です。この値は空白の場合があるため、全体を引用符で囲みます。

たとえば、あるマシン名と別名のリストを見つけるには、次の変数を使用します。

NameList=instances2string($cn, " ")

cn 属性の値が camembert、Cam、Bertie の場合は、結果は次のようになります。

camembert Cam Bertie

trim 関数

trim 関数は、パラメータを囲む不要な空白を取り除きます。trim 操作の構文は次のとおりです。

variableA=trim(parameter)

variableA は変数名です。

parameter は、空白を取り除きたい項目です。

たとえば、別名リストを構成メンバーに分解する場合は、次の変数を指定できます。


aliasMember=string2instances($aliasList, ",")
trimAliasMember=trim($aliasMember)

string2instances 操作によって得られる各 aliasMember パラメータが処理され、空白が取り除かれます。

getrdn 関数

getrdn 関数は、エントリの名前付き属性を返します。これは、エントリの相対識別名で使われる属性です。getrdn 操作の構文は次のとおりです。

variableA=getrdn()

注 -

getrdn 関数は、「Condense」セクションの変数でしか使用できません。


たとえば、あるマシンの cn 属性の値は camembert、Cam、Bertie で、相対識別名で使用されるそのマシンの実際のシステム名は camembert である場合は、次の変数を作成できます。

HostName=getrdn()

getrdn 関数は、camembert という名前を返します。


注 -

getrdn 関数では、大文字と小文字を区別します。


exclude 関数

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

「Build」サブセクションには、一連の LDAP 属性と、それらの値の定義を指定します。このサブセクションには、少なくとも、オブジェクトクラスのすべての必須属性と、識別名が必要です。「Build」セクションに識別名の定義がないと、エントリはディレクトリに作成されません。


注 -

radius.mapping ファイルは、ディレクトリにエントリをインポートするときに使用されないため、このファイルの「Build」セクションに識別名の定義を指定する必要はありません。


属性値の定義には次の要素を使用できます。

「Build」セクションにおける LDAP 属性とその関連する値の定義の構文は、次のとおりです。

LDAPattribute=attributeValueDefinition

たとえば、メール別名のエントリを作成するとします。LDAP 属性 rfc822mailMember を使って別名メンバーの名前を格納する場合は、マッピングに次の定義を指定します。


Condense:
 	aliasMember=string2instances($aliasList, ",")
 	trimAliasMember=trim($aliasMember)
 ...
 Build:
 	rfc822mailMember=$trimAliasMember
 ...