7.5 LDIFファイル

NetIQインポート/エクスポート変換ユーティリティを使用すると、eDirectoryとの間でのLDIFファイルのインポートおよびエクスポートが簡単になります。詳細については、『NetIQ eDirectory管理ガイド』の「NetIQインポート/エクスポート変換ユーティリティ」を参照してください。

LDIFインポートを正しく機能させるには、NetIQインポート/エクスポート変換ユーティリティが読み込み、および処理できるLDIFファイルを最初に作成する必要があります。このセクションでは、LDIFファイル形式および構文について説明し、正しいLDIFファイルの例を示します。

7.5.1 LDIFについて

LDIFは、広く一般的に使用されているファイル形式で、ディレクトリ情報およびディレクトリで実行可能な変更操作について記述します。LDIFは、実際のディレクトリ内で使用されている記憶フォーマットとは完全に独立していて、通常は、LDAPサーバとの間でディレクトリ情報をエクスポートまたはインポートするために使用します。

一般的に、LDIFは簡単に生成できます。そのため、awkやperlなどのツールを使用して、固有の形式のデータをLDAPディレクトリに移動できます。また、LDIF形式でテストデータを生成するスクリプトを作成することもできます。

LDIFファイル形式

NetIQインポート/エクスポート変換ユーティリティを使用してインポートするファイルの形式は、LDIF 1である必要があります。次にLDIF 1形式のファイルの基本ルールを示します。

  • コメント行以外の第1行目には、「version: 1」と記述します。

  • バージョンの指定の後に、1つ以上のレコードを定義します。

  • 各レコードは、フィールドで構成されます。1行に1フィールドずつ指定します。

  • 各行は、改行またはキャリッジリターンと改行の組み合わせのどちらかで区切られます。

  • レコードは、1行以上の空白行で区切られます。

  • LDIFレコードには、内容レコードと変更レコードの2つのタイプがあります。LDIFファイルに記述するレコード数に制限はありませんが、記述されたすべてのレコードのタイプが一致している必要があります。同じLDIFファイル内に、内容レコードと変更レコードの両方を記述することはできません。

  • シャープ記号(#)で始まる行はコメント行です。この行は、LDIFファイルの処理時には無視されます。

LDIF内容レコード

LDIF内容レコードは、エントリ全体の内容を表します。次に、4つの内容レコードが定義されたLDIFファイルの例を示します。

 1  version: 1
 2  dn: c=US
 3  objectClass: top
 4  objectClass: country
 5  
 6  dn: l=San Francisco, c=US
 7  objectClass: top
 8  objectClass: locality
 9  st: San Francisco
10
11 dn: ou=Artists, l=San Francisco, c=US
12 objectClass: top
13 objectClass: organizationalUnit
14 telephoneNumber: +1 415 555 0000
15 
16 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
17 sn: Michaels
18 givenname: Peter
19 objectClass: top
20 objectClass: person
21 objectClass: organizationalPerson
22 objectClass: iNetOrgPerson
23 telephonenumber: +1 415 555 0001
24 mail: Peter.Michaels@aaa.com
25 userpassword: Peter123
26

このLDIFファイルは、次の部分から構成されています。

コンポーネント

説明

バージョン指定子

LDIFファイルの第1行目にはバージョンが記述されます。コロンとバージョン番号(現在の定義は1)の間には、1つ以上のスペースを指定できますが、スペースを指定しなくても問題はありません。

バージョンを指定した行がない場合、LDIFファイルを処理するアプリケーションはそのファイルのバージョンを0とみなすことができます。また、構文エラーとしてLDIFファイルが拒否される可能性もあります。LDIFを処理するNetIQのユーティリティは、バージョンを指定する行がない場合、ファイルのバージョンを0とみなします。

識別名指定子

各内容レコードの先頭の行(この例では、2、6、11、および16行目)には、そのレコードが表すエントリのDN(識別名)を指定します。

DN指定子は、次の2つのどちらかの形式をとる必要があります。

  • dn: safe_UTF-8_distinguished_name

  • dn:: Base64_encoded_distinguished_name

行区切り記号

行区切り記号としては、改行、またはキャリッジリターンと改行の組み合わせのどちらかを使用できます。これにより、行区切りとして改行を使用するLinuxおよびSolarisテキストファイルと、キャリッジリターンと改行の組み合わせを使用するMS-DOS*およびWindowsテキストファイルとの間の非互換性を解決できます。

レコード区切り記号

レコード区切りとしては、空白行(この例では5、10、15および26行目)を使用します。

LDIFファイル内の各レコード(最後のレコードも含む)の終わりには、レコード区切り記号として1行以上の空白行を挿入する必要があります。一部のアプリケーションでは、レコード区切りを指定していないLDIFファイルもそのまま受け入れられますが、LDIFの仕様ではレコード区切りは必須です。

属性値指定子

内容レコード内のその他すべての行は、値指定子です。値指定子は、次の3つの形式のいずれかをとる必要があります。

  • 属性の記述: value

  • 属性の記述:: Base64_encoded_value

  • 属性の記述: < URL

LDIF変更レコード

LDIF変更レコードには、ディレクトリに加えられる変更が記述されます。LDAPの更新操作(追加、削除、変更、およびDNの変更)はすべて、LDIF変更レコードに記述できます。

LDIF変更レコードでは、LDIF内容レコードと同じ形式の識別名指定子、属性値指定子、およびレコード区切り記号を使用します。(詳細については、LDIF内容レコードを参照してください。)LDIF内容レコードとの違いは、LDIF変更レコードにはchangetypeフィールドがあることです。changetypeフィールドは、変更レコードが指定する操作を識別します。

changetypeフィールドは、次の5つの形式のいずれかである必要があります。

フォーム

説明

changetype: add

この変更レコードでLDAPの追加操作が指定されていることを示すキーワードです。

changetype: delete

この変更レコードでLDAPの削除操作が指定されていることを示すキーワードです。

changetype: moddn

この変更レコードで、LDIFプロセッサがバージョン3クライアントとしてLDAPサーバにバインドされている場合はLDAPのDN変更操作が、バージョン2クライアントとしてLDAPサーバにバインドされている場合はRDN変更操作が指定されていることを示すキーワードです。

changetype: modrdn

moddn変更タイプと同義です。

changetype: modify

この変更レコードでLDAPの変更操作が指定されていることを示すキーワードです。

「追加」変更タイプ

追加変更レコードは、内容変更レコード(「LDIF内容レコード」を参照)に、changetype: addフィールドを属性値フィールドの直前に追加したものと同じです。

すべてのレコードのタイプが一致している必要があります。内容レコードと変更レコードを同じファイルに記述することはできません。

 1 version: 1
 2 dn: c=US
 3 changetype: add
 4 objectClass: top
 5 objectClass: country
 6 
 7 dn: l=San Francisco, c=US
 8 changetype: add
 9 objectClass: top
10 objectClass: locality
11 st: San Francisco
12
14 dn: ou=Artists, l=San Francisco, c=US
15   changetype: add
16 objectClass: top
17 objectClass: organizationalUnit
18 telephoneNumber: +1 415 555 0000
19 
20 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
21 changetype: add
22 sn: Michaels
23 givenname: Peter
24 objectClass: top
25 objectClass: person
26 objectClass: organizationalPerson
27 objectClass: iNetOrgPerson
28 telephonenumber: +1 415 555 0001
29 mail: Peter.Michaels@aaa.com
30 userpassword: Peter123
31

「削除」変更タイプ

削除変更レコードはエントリの削除を指定するので、削除変更レコードに必要なフィールドは識別名指定子と「削除」変更タイプだけです。

次に、「「追加」変更タイプ」のLDIFファイルで作成した4つのエントリを削除するLDIFファイルの例を示します。

重要:以前に追加したエントリを削除するには、エントリの指定順序を逆にする必要があります。順序を逆にしないと、コンテナ内のエントリが空でないため削除操作が失敗します。

 1 version: 1
 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 3 changetype: delete
 4
 5 dn: ou=Artists, l=San Francisco, c=US
 8   changetype: delete
 9
10 dn: l=San Francisco, c=US
11 changetype: delete
12
13 dn: c=US
14 changetype: delete
15

「変更」変更タイプ

「変更」変更タイプでは、すでに存在するエントリに対して属性値の追加、削除、および置換を指定できます。変更指定子は、次の3つの形式のいずれかをとる必要があります。

要素

説明

add: 属性タイプ

この属性タイプに対する後続の属性値指定子がエントリに追加されるように指定する必要があることを示すキーワードです。

delete: 属性タイプ

この属性タイプの値が削除されることを示すキーワードです。deleteフィールドの後に属性値指定子が続く場合は、その指定された値が削除されます。

deleteフィールドの後に属性値指定子がない場合は、すべての値が削除されます。属性に値がない場合、この操作は失敗しますが、属性には削除する値がないので結果的にはこの操作が成功したときと同じです。

replace: 属性タイプ

属性タイプの値が置き換えられることを示すキーワードです。replaceフィールドに続く属性値指定子が、その属性タイプの新しい値になります。

replaceフィールドの後に属性値指定子がない場合は、現在の値のセットが空の値のセットに置き換えられます(結果的に、属性が削除されます)。delete変更指定子とは異なり、属性に値が設定されていない場合でもreplaceは成功します。どちらの場合も実際に得られる結果は同じです。

次の「変更」変更タイプの例では、cn=Peter Michaelsエントリに別の電話番号を追加します。

 1 version: 1
 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 3 changetype: modify
 4 # add the telephone number to cn=Peter Michaels
 4 add: telephonenumber
 5 telephonenumber: +1 415 555 0002
 6

1つのLDAP変更要求にさまざまな変更を組み合わせて指定できるのと同じように、1つのLDIFレコードに複数の変更指定子を指定できます。ハイフン(-)だけが記述されている行は、各変更指定子に対する属性値指定の終わりを示します。

次のLDIFファイルの例では、複数の変更を組み合わせて指定しています。

 1 version: 1
 2
 3 # An empty line to demonstrate that one or more
 4 # line separators between the version identifier 
 5 # and the first record is legal.
 6
 7 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 8 changetype: modify
 9 # Add an additional telephone number value.
10 add: telephonenumber
11 telephonenumber: +1 415 555 0002
12 -
13 # Delete the entire fascimiletelephonenumber attribute.
14 delete: facsimileTelephoneNumber
15 -
16 # Replace the existing description (if any exists) 
17 # with two new values.
18 replace: description
19 description: guitar player
20 description: solo performer
21 -
22 # Delete a specific value from the telephonenumber 
23 # attribute.
24 delete: telephonenumber
25 telephonenumber: +1 415 555 0001
26 -
27 # Replace the existing title attribute with an empty 
28 # set of values, thereby causing the title attribute to 
29 # be removed.
30 replace: title
31 -
32

「DN変更」変更タイプ

「DN変更」変更タイプでは、エントリのリネーム、移動、またはその両方ができます。この変更タイプは、2つの必須フィールドと1つのオプションフィールドで構成されます。

フィールド

説明

newrdn (必須)

このレコードの処理の実行中にエントリに割り当てられる新しい名前を指定します。新規RDN(newrdn)指定子は、次の2つのどちらかの形式をとる必要があります。

  • newrdn: safe_UTF-8_relative_distinguished_name

  • newrdn:: Base64_encoded_relative_ distinguished_name

新規RDN指定子は、「DN変更」変更タイプが指定されたすべてのLDIFレコードで指定されている必要があります。

deleteoldrdn (必須)

旧RDN削除(deleteoldrdn)指定子は、古いRDNをnewrdn(新規RDN)に置き換えるか、残しておくかを指定するフラグです。これは、次の2つのどちらかの形式をとります。

  • deleteoldrdn: 0

    リネーム後も古いRDNの値をエントリ内に残しておくことを指定します。

  • deleteoldrdn: 1

    エントリのリネーム後に古いRDNの値を削除することを指定します。

newsuperior (オプション)

新規スーペリア(newsuperior)指定子は、このDN変更レコードの処理時にエントリに割り当てる新しいペアレントの名前を指定します。新規スーペリア指定子は、次の2つのどちらかの形式をとります。

  • newsuperior: safe_UTF-8_distinguished_name

  • newsuperior:: Base64_encoded_distinguished_ name

新規スーペリア指定子は、「DN変更」変更タイプが指定されたLDIFレコードでオプションとして使用できます。これは、エントリのペアレントを変更する場合のみ指定します。

次の「DN変更」変更タイプの例で、エントリの名前を変更する方法を示します。

 1 version: 1
 2 
 3 # Rename ou=Artists to ou=West Coast Artists, and leave
 4 # its old RDN value.
 5 dn: ou=Artists,l=San Francisco,c=US
 6 changetype: moddn
 7 newrdn: ou=West Coast Artists
 8 deleteoldrdn: 1
 9

次の「DN変更」変更タイプの例で、エントリを移動する方法を示します。

 1 version: 1
 2
 3 # Move cn=Peter Michaels from 
 4 # ou=Artists,l=San Francisco,c=US to 
 5 # ou=Promotion,l=New York,c=US and delete the old RDN.
 5 dn: cn=Peter Michaels,ou=Artists,l=San Francisco,c=US
 6 changetype: moddn
 7 newrdn: cn=Peter Michaels
 8 deleteoldrdn: 1
 9 newsuperior: ou=Promotion,l=New York,c=US
10

次の「DN変更」変更タイプの例では、エントリを移動し、同時に名前を変更する方法を示します。

 1 version: 1
 2
 3 # Move ou=Promotion from l=New York,c=US to
 4 # l=San Francisco,c=US and rename it to 
 5 # ou=National Promotion.
 5 dn: ou=Promotion,l=New York,c=US
 6 changetype: moddn
 7 newrdn: ou=National Promotion
 8 deleteoldrdn: 1
 9 newsuperior: l=San Francisco,c=US
10

重要:LDAP 2のRDN変更操作では、エントリの移動はサポートされません。LDAP 2クライアントでLDIF newsuperior構文を使用してエントリを移動しようとすると、その要求は失敗します。

LDIFファイル内での行の折り返し

LDIFファイル内で行を折り返すには、行を折り返したい場所で単に行区切り記号(改行、またはキャリッジリターンと改行の組み合わせ)を挿入し、その後にスペースを追加します。行の先頭にスペースがある場合、LDIFパーサではスペースの後のデータとその前の行のデータを結合して解析します。したがって、先頭のスペースは無視されます。

マルチバイトのUTF-8文字の途中では、行を折り返さないでください。

次に、行の折り返しを含む(13および14行目)LDIFファイルの例を示します。

 1 version: 1
 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US
 3 sn: Michaels
 4 givenname: Peter
 5 objectClass: top
 6 objectClass: person
 7 objectClass: organizationalPerson
 8 objectClass: iNetOrgPerson
 9 telephonenumber: +1 415 555 0001
10 mail: Peter.Michaels@aaa.com
11 userpassword: Peter123
12 description: Peter is one of the most popular music
13  ians recording on our label. He's a big concert dr
14  aw, and his fans adore him.
15

LDIFファイル内でのハッシュ化パスワードの表記

LDIFファイル内では、ハッシュ化パスワードはBase64データとして表記されます。属性名userpasswordに続けて、パスワードをハッシュ化するために使用される暗号化方式の名前を記述する必要があります。この名前は、次に示すように中カッコ「{ }」で囲んで記述します。

例1

SHAハッシュ化パスワードの場合:

1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {SHA}xcbdh46ngh37jsd0naSFDedjAS30dm5 objectclass: inetOrgPerson

例2

SSHAハッシュ化パスワードの場合:

1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {SSHA}sGs948DFGkakdfkasdDF34DF4dS3skl5DFS5 objectclass: inetOrgPerson

例3

Digest MD5ハッシュ化パスワードの場合:

1 version: 1 2 dn: cn=Peter Michaels, ou=Artists, l=San Francisco, c=US 3 sn: Michaels 4 userpassword: {MD5}a45lkSDF234SDFG62dsfsf2DG2QEvgdmnk4305 objectclass: inetOrgPerson

7.5.2 LDIFファイルのデバッグ

LDIFファイルで問題が発生した場合、次のことを考慮してください。

前方参照を有効化する

LDIFファイルで、あるエントリを追加するレコードを、そのエントリのペアレントを追加するレコードの前に記述してしまう場合があります。この場合、LDAPサーバが新しいエントリを追加しようとすると、そのエントリのペアレントが存在しないためエラーが発生します。

この問題は、前方参照の使用を有効にするだけで解決できます。前方参照の作成を有効にすると、エントリを作成するときにそのペアレントがまだ存在していない場合でも、このペアレント用に前方参照というプレースホルダが作成されるため、エントリを正常に作成できます。以後の操作で親が作成されると、前方向参照は通常のエントリに変更されます。

LDIFのインポートが完了した後でも、1つ以上の前方参照が残っている場合があります(たとえば、LDIFファイルでエントリのペアレントが作成されなかった場合など)。この場合、前方向参照はiManagerで不明オブジェクトとして表示されます。前方参照エントリを検索することはできますが、前方参照エントリには属性も属性値もないため、objectClass以外の属性を読み込むことはできません。ただし、前方参照の下に位置する実オブジェクトエントリ上では、すべてのLDAP操作が正常に機能します。

前方参照エントリを識別する

前方参照エントリは「不明」のオブジェクトクラスを持ち、また、内部NDS EF_REFERENCEエントリにフラグが設定されています。iManagerでは、「不明」のオブジェクトクラスを持つエントリは、中央に疑問符が表示される丸い黄色いアイコンで示されます。LDAPを使用して不明オブジェクトクラスのオブジェクトを検索することもできますが、現時点ではLDAPからエントリフラグの設定にアクセスしてそれが前方参照エントリであることを確認する方法はありません。

前方参照エントリを通常オブジェクトへ変更する

(LDIFファイルまたはLDAPクライアント要求などを使用して)オブジェクトを作成するだけで、前方参照エントリを通常のオブジェクトに変更できます。eDirectoryで作成するように指定したエントリが前方参照としてすでに存在する場合、eDirectoryでは既存の前方参照エントリが、作成を指定したオブジェクトに変換されます。

NetIQ eDirectoryインポート/エクスポート変換ウィザードを使用する

LDIFのインポート時に前方参照を有効にするには、次の手順に従ってください。

  1. NetIQ iManagerで、[役割およびタスク]をクリックします。

  2. [eDirectoryの保守]>[インポート/エクスポート変換ウィザード]の順にクリックします。

  3. [ディスク上のファイルからデータをインポート]をクリックし、[次へ]をクリックします。

  4. インポートするファイルのタイプに[LDIF]を指定します。

  5. インポートするデータが含まれているファイルの名前を指定し、適切なオプションを指定してから[次へ]をクリックします。

  6. データのインポート先になるLDAPサーバを指定します。

  7. 次の表の説明を参照して、適切なオプションを追加します。

    オプション

    説明

    サーバのDNS名/IPアドレス

    相手LDAPサーバのDNS名またはIPアドレス

    ポート

    相手LDAPサーバのポート番号(整数)

    DERファイル

    SSL認証に使用するサーバキーが格納されているDERファイルの名前

    ログイン方法

    [認証ログイン]または[匿名ログイン]([ユーザDN]フィールドに指定したエントリのログイン方法)

    ユーザDN

    サーバで指定されたバインド操作に使用されるエントリの識別名

    パスワード

    [ユーザDN]フィールドで指定したエントリのパスワード属性

  8. [詳細設定]で、[前方参照を許可する]をクリックします。

  9. [次へ]をクリックし、[終了]をクリックします。

データをデータサーバへ移行するときに前方参照を有効にするには、次の手順に従ってください。

  1. NetIQ iManagerで、[役割およびタスク]をクリックします。

  2. [eDirectoryの保守]>[インポート/エクスポート変換ウィザード]の順にクリックします。

  3. [サーバ間でデータを移行]>[次へ]の順にクリックします。

  4. 移行するエントリが格納されているLDAPサーバを指定します。

  5. 次の表の説明を参照して、適切なオプションを追加します。

    オプション

    説明

    サーバのDNS名/IPアドレス

    ソースLDAPサーバのDNS名またはIPアドレス

    ポート

    ソースLDAPサーバのポート番号(整数)

    DERファイル

    SSL認証に使用するサーバキーが格納されているDERファイルの名前

    ログイン方法

    [認証ログイン]または[匿名ログイン]([ユーザDN]フィールドに指定したエントリのログイン方法)

    ユーザDN

    サーバで指定されたバインド操作に使用されるエントリの識別名

    パスワード

    [ユーザDN]フィールドで指定したエントリのパスワード属性

  6. [詳細設定]で、[前方参照を許可する]をクリックします。

  7. [次へ]をクリックします。

  8. 移行するエントリの検索条件を次のように指定します。

    オプション

    説明

    ベースDN

    検索要求のベース識別名

    このフィールドを指定しなかった場合、デフォルトのベースDNである""(空の文字列)が使用されます。

    スコープ

    検索要求のスコープ

    フィルタ

    RFC 2254準拠の検索フィルタ

    デフォルトは「objectclass=*」です。

    属性

    検索エントリごとに取得する属性

  9. [次へ]をクリックします。

  10. データを移行するLDAPサーバを指定します。

  11. [次へ]をクリックし、[終了]をクリックします。

    メモ:スキーマが各LDAPサービスで整合性を保っていることを確認します。

NetIQインポート/エクスポート変換ユーティリティのコマンドラインインタフェースの使用

コマンドラインインタフェースで前方参照を有効にするには、‑F LDAPターゲットハンドラオプションを使用します。

詳細については、『NetIQ eDirectory管理ガイド』のLDIFターゲットハンドラのオプションを参照してください。

LDIFファイルの構文をチェックする

ファイル内のレコードを処理する前に、[操作を表示するが実行しない]LDIFソースハンドラオプションを使用してLDIFファイルの構文をチェックできます。

LDIFソースハンドラは、LDIFファイル内のレコードを処理するときに常に構文をチェックします。このオプションを使用すると、レコードの処理を無効にして、構文を検証できます。

NetIQ eDirectoryインポート/エクスポート変換ウィザードを使用する

  1. NetIQ iManagerで、[役割およびタスク]をクリックします。

  2. [eDirectoryの保守]>[インポート/エクスポート変換ウィザード]の順にクリックします。

  3. [ディスク上のファイルからデータをインポート]をクリックし、[次へ]をクリックします。

  4. インポートするファイルのタイプに[LDIF]を指定します。

  5. インポートするデータが含まれているファイルの名前を指定し、適切なオプションを指定します。

  6. [詳細設定]で、[操作を実行せずに表示]をクリックし、[次へ]をクリックします。

  7. データのインポート先になるLDAPサーバを指定します。

  8. 次の表の説明を参照して、適切なオプションを追加します。

    オプション

    説明

    サーバのDNS名/IPアドレス

    相手LDAPサーバのDNS名またはIPアドレス

    ポート

    相手LDAPサーバのポート番号(整数)

    DERファイル

    SSL認証に使用するサーバキーが格納されているDERファイルの名前

    ログイン方法

    [認証ログイン]または[匿名ログイン]([ユーザDN]フィールドに指定したエントリのログイン方法)

    ユーザDN

    サーバで指定されたバインド操作に使用されるエントリの識別名

    パスワード

    [ユーザDN]フィールドで指定したエントリのパスワード属性

  9. [次へ]をクリックし、[終了]をクリックします。

NetIQインポート/エクスポート変換ユーティリティのコマンドラインインタフェースの使用

コマンドラインインタフェースでLDIFファイルの構文をチェックするには、‑n LDIFソースハンドラオプションを使用します。

詳細については、『NetIQ eDirectory管理ガイド』の「LDIFソースハンドラのオプション」を参照してください。

LDIFエラーファイルを使用する

NetIQインポート/エクスポート変換ユーティリティは、ターゲットハンドラによる処理に失敗したレコードをすべてリストしたLDIFファイルを自動的に作成します。ユーティリティによって生成されたLDIFエラーファイルを編集してエラーを修正し、サーバに再適用することで、失敗したレコードに含まれているインポートまたはデータの移行を完了できます。

NetIQ eDirectoryインポート/エクスポートウィザードを使用する

  1. NetIQ iManagerで、[役割およびタスク]をクリックします。

  2. [eDirectoryの保守]>[インポート/エクスポート変換ウィザード]の順にクリックします。

  3. [ディスク上のファイルからデータをインポート]をクリックし、[次へ]をクリックします。

  4. [詳細設定]で、[失敗したレコードをログに記録]オプションを選択し、[次へ]をクリックします。

  5. インポートするファイルのタイプに[LDIF]を指定します。

  6. インポートするデータが含まれているファイルの名前を指定し、適切なオプションを指定してから[次へ]をクリックします。

  7. データのインポート先になるLDAPサーバを指定します。

  8. 前の表で説明されているように、適切なオプションを追加します。

  9. [次へ]をクリックします。ice.logファイルが作成され、そのファイルに出力メッセージ(エラーメッセージを含む)が記録され、失敗したエントリがLDIFフォーマットで出力されます。

  10. 完了をクリックします。

NetIQインポート/エクスポート変換ユーティリティのコマンドラインインタフェースの使用

コマンドラインユーティリティでエラーログオプションを設定するには、‑l一般オプションを使用します。

詳細については、『NetIQ eDirectory管理ガイド』の「全般オプション」を参照してください。

LDAP SDKデバッギングフラグを使用する

一部のLDIFの問題を理解するには、LDAPクライアントSDKがどのように機能するかを理解する必要があります。LDAPソースハンドラ、LDAPターゲットハンドラ、またはその両方に、次のデバッギングフラグを設定できます。

値

説明

0x0001

LDAPファンクションコールをトレースします。

0x0002

パケットに関する情報を出力します。

0x0004

引数に関する情報を出力します。

0x0008

接続情報を出力します。

0x0010

BERのエンコーディングおよびデコーディング情報を出力します。

0x0020

検索フィルタ情報を出力します。

0x0040

設定情報を出力します。

0x0080

ACL情報を出力します。

0x0100

統計情報を出力します。

0x0200

追加の統計情報を出力します。

0x0400

シェル情報を出力します。

0x0800

解析情報を出力します。

0xFFFF (10進数では、-1)

すべてのデバッギングオプションを有効にします。

この機能を有効にするには、LDAPソースハンドラおよびターゲットハンドラで‑eオプションを使用します。-eオプションに指定する整数の値は、LDAP SDKでさまざまな種類のデバッグ情報を有効にするビットマスクです。

詳細については、『NetIQ eDirectory管理ガイド』の「LDAPソースハンドラのオプション」および「LDAPターゲットハンドラのオプション」を参照してください。

7.5.3 LDIFを使用してスキーマを拡張する

LDIFではLDAP更新操作を表すことができるので、LDIFを使用してスキーマを変更できます。

新しいオブジェクトクラスを追加する

クラスを追加するには、単に、NDSObjectClassDescriptionの仕様に従った属性値をsubschemaSubentryのobjectClasses属性に追加します。

NDSObjectClassDescription = "(" whsp
   numericoid whsp
   [ "NAME" qdescrs ]
   [ "DESC" qdstring ]
   [ "OBSOLETE" whsp ]
   [ "SUP" oids ] 
   [ ( "ABSTRACT" / "STRUCTURAL" / "AUXILIARY" ) whsp ]
   [ "MUST" oids ]    
   [ "MAY" oids ]     
   [ "X-NDS_NOT_CONTAINER" qdstrings ]
   [ "X-NDS_NONREMOVABLE" qdstrings ]
   [ "X-NDS_CONTAINMENT" qdstrings ] 
   [ "X-NDS_NAMING" qdstrings ]
   [ "X-NDS_NAME" qdstrings ] 
   whsp ")"

次のLDIFファイルの例では、person objectClassをスキーマに追加します。

 1 version: 1
 2 dn: cn=schema
 3 changetype: add
 4 objectClasses: ( 2.5.6.6 NAME 'person' DESC 'Standard
 5   ObjectClass' SUP ndsLoginProperties STRUCTURAL MUST
 6   (cn $ sn) MAY (description $ seeAlso $ telephoneNum
 7  ber $ fullName $ givenName $ initials $ uid $ userPa
 8  ssword) X-NDS_NAMING ('cn' 'uid') X-NDS_CONTAINMENT 
 9  ('organization' 'organizationalUnit' 'domain') X-NDS
10  _NAME 'Person' X-NDS_NOT_CONTAINER '1' X-NDS_NONREMO
11  VABLE '1')
12

必須属性

必須属性は、オブジェクトクラス記述のMUSTセクションにリストします。personオブジェクトクラスの場合、必須属性はcnとsnです。

オプション属性

オプション属性のリストは、オブジェクトクラス記述のMAYセクションに記述します。personオブジェクトクラスのオプション属性は、description、seeAlso、telephoneNumber、fullName、givenName、initials、uid、およびuserPasswordです。

メモ:userPassword属性は、オプション(MAY)属性には使用できません。このLDIF形式を使用して、新しいobjectClassでこの属性を必須(MUST)属性に使用してスキーマを拡張しようとしても、操作は失敗します。

包含ルール

定義されているオブジェクトクラスを包含するオブジェクトクラスは、オブジェクトクラス記述のX-NDS_CONTAINMENTセクションで指定します。personオブジェクトクラスを包含するオブジェクトクラスは、organization、organizationalUnit、およびdomainです。

新しい属性を追加する

属性を追加するには、NDSAttributeTypeDescriptionの仕様に従って属性値をsubschemaSubentryのattributes属性に追加します。

NDSAttributeTypeDescription = "(" whsp
  numericoid whsp  ; AttributeType identifier
  [ "NAME" qdescrs ]  ; name used in AttributeType
  [ "DESC" qdstring ]  ; description
  [ "OBSOLETE" whsp ]
  [ "SUP" woid ]  ; derived from this other AttributeType
  [ "EQUALITY" woid]  ; Matching Rule name
  [ "ORDERING" woid]  ; Matching Rule name
  [ "SUBSTR" woid ]  ; Matching Rule name
  [ "SYNTAX" whsp noidlen whsp ] ;  Syntax OID
  [ "SINGLE-VALUE" whsp ]  ; default multi-valued
  [ "COLLECTIVE" whsp ]  ; default not collective
  [ "NO-USER-MODIFICATION" whsp ] ;  default user modifiable
  [ "USAGE" whsp AttributeUsage ] ;  default userApplications
  [ "X-NDS_PUBLIC_READ" qdstrings ]
                             ; default not public read ('0')
  [ "X-NDS_SERVER_READ" qdstrings ]
                              ; default not server read ('0')
  [ "X-NDS_NEVER_SYNC" qdstrings ]
                               ; default not never sync ('0') 
  [ "X-NDS_NOT_SCHED_SYNC_IMMEDIATE" qdstrings ]
                            ;  default sched sync immediate ('0')
  [ "X-NDS_SCHED_SYNC_NEVER" qdstrings ]
                                  ;  default schedule sync ('0')
  [ "X-NDS_LOWER_BOUND" qdstrings ]
                              ;  default no lower bound('0')
                                    ;(upper is specified in SYNTAX)
  [ "X-NDS_NAME_VALUE_ACCESS" qdstrings ]
                         ; default not name value access ('0')
  [ "X-NDS_NAME" qdstrings ]  ; legacy NDS name 
  whsp ")"

次のLDIFファイルの例では、title属性タイプをスキーマに追加します。

 1 version: 1
 2 dn: cn=schema
 3 changetype: add
 4 attributeTypes: ( 2.5.4.12 NAME 'title' DESC 'Standa
 5  rd Attribute' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{
 6  64} X-NDS_NAME 'Title' X-NDS_NOT_SCHED_SYNC_IMMEDIA
 7  TE '1' X-NDS_LOWER_BOUND '1')
 8

単一値と複数値

属性は、明示的に単一値として定義されない限り、デフォルトでは複数値です。次のLDIFファイルの例では、SYNTAXセクションの後にSINGLE-VALUEキーワードを追加することによって、titleを単一値として定義しています。

 1 version: 1
 2 dn: cn=schema
 3 changetype: add
 4 attributeTypes: ( 2.5.4.12 NAME 'title' DESC 'Standa
 5  rd Attribute' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{
 6  64} SINGLE-VALUE X-NDS_NAME 'Title' X-NDS_NOT_SCHED
 7  _SYNC_IMMEDIATE '1' X-NDS_LOWER_BOUND '1')
 8

既存のオブジェクトクラスへオプション属性を追加する

新しいスキーマエレメントを追加する場合は問題ありませんが、通常、既存のスキーマエレメントを変更または拡張する場合には注意が必要です。すべてのスキーマエレメントはOIDによって固有に識別されるため、標準スキーマエレメントを拡張すると、元のOIDを使用する場合でも実際にはそのエレメントに対して2つめの定義が作成されます。このため、不整合が発生することがあります。

スキーマエレメントの変更が必要な場合もあります。たとえば、開発しながらスキーマエレメントを洗練していくときに、新しいスキーマエレメントの拡張または修正が必要な場合があります。次のような場合は、クラスに直接新しい属性を追加せずに、通常は補助クラスのみを使用します。

  • 既存のオブジェクトクラスに新しい属性を追加する場合。

  • 既存のオブジェクトクラスのサブクラスを作成する場合。

補助クラスを追加または削除する

次のサンプルLDIFファイルは、2つの新しい属性、およびこの新しい属性に付随する補助クラスを作成してから、inetOrgPersonエントリをエントリのオブジェクトクラスとしてauxiliaryクラスとauxiliaryクラスの属性値に追加します。

version: 1
# Add an attribute to track a bear's hair. The attribute is 
# multi-valued, uses a case ignore string syntax, 
# and has public read rights 
# Values may include: long hair, short, curly, straight, 
# none, black, and brown 
# X-NDS_PUBLIC_READ '1' The 1 allows public read, 
# 0 denies public read 
dn: cn=schema 
changetype: modify 
add: attributeTypes
attributeTypes: ( 2.16.840.1.113719.1.186.4.10 NAME
'bearHair' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
X-NDS_PUBLIC_READ '1' )

# add an attribute to store a bear's picture 
dn: cn=schema 
changetype: modify 
add: attributeTypes 
attributeTypes: ( 2.16.840.1.113719.1.186.4.11 NAME
'bearPicture' SYNTAX 1.3.6.1.4.1.1466.115.121.1.5
SINGLE-VALUE )

# create an Auxiliary class for the bearfeatures 
dn: cn=schema 
changetype: modify 
add: objectclasses 
objectclasses: (2.16.840.1.113719.1.186.6.101 NAME
'bearFeatures' MAY (bearHair $ bearPicture) AUXILIARY)

# now create a user named bobby
dn: cn=bobby,o=bearcave 
changetype: add 
cn: bobby 
sn: bear 
givenName: bobby 
bearHair: Short 
bearHair: Brown 
bearHair: Curly 
bearPicture:< file:///c:/tmp/alien.jpg 
objectClass: top 
objectClass: person 
objectClass: inetOrgPerson 
objectClass: bearFeatures 

# now create a person named john that will later be changed
# into a bear when bearFeatures is added to its objectClass
# list
dn: cn=john,o=bearcave
changetype: add
cn: John
sn: bear
givenName: john
objectClass: top
objectClass: person
objectClass: inetOrgPerson

# now morph john into a bear by adding bearFeatures
dn: cn=john,o=bearcave
changetype: modify
add: objectClass
objectClass: bearFeatures
-
add: bearHair
bearHair: long
bearHair: black
#bearPicture:< file:///c:/tmp/john.jpg>
-

# to morph john back to a person, simply delete the
# objectClass bearFeatures
dn: cn=john,o=bearcave
changetype: modify
delete: objectClass
objectClass: bearFeatures

補助クラスの削除にあたって、objectClassリストからauxiliaryクラスを削除する場合には、auxiliaryクラスに関連するすべての値を削除する必要はありません。この処理はeDirectoryによって自動的に行われます。

auxiliaryクラスにMUST属性がある場合、auxiliaryクラスをobjectClassリストへ追加する変更操作でもこれらの属性を指定する必要があります。これらの属性が指定されていない場合、変更は失敗します。

XML解析で発生する既知の問題

個々のレコードがXMLファイルで指定されたすべてのXMLルールを遵守していない場合、LDIFレコード(LDAPサーバで生成されたLDIF形式またはレコード)のXML処理は成功しません。

7.5.4 ldif2dibの制限

簡易パスワードLDIF

Windowsでは、簡易パスワードを持つLDIFをアップロードするときに、systemフォルダおよびAdministratorフォルダに格納されているNICIキーが同期されていない場合、ldif2dibが失敗することがあります。

この問題を回避するには、次の手順でnici/systemフォルダ内のキーにアクセスします。

  1. C:\Windows\system32\novell\nici\フォルダに移動します(32ビットNICIの場合)。

    または

    C:\Windows\SysWOW64\novell\nici\フォルダに移動します(64ビットNICIの場合)。

  2. Administratorフォルダのファイルをバックアップします。

  3. Systemフォルダの[プロパティ]ウィンドウにある[セキュリティ]タブに移動します。

  4. [詳細設定]を選択し、[所有者]タブに移動します。

  5. Administratorを選択します。

  6. [セキュリティ]タブに戻り、Administratorを一覧に追加します。

  7. 手順ステップ 3~ステップ 6を繰り返し、systemフォルダ内にあるすべてのファイルに対して読み取りアクセス権を取得します。

  8. Administratorフォルダのファイルをsystemフォルダのファイルで上書きします。

  9. アップロードした後に、バックアップファイルをAdministratorフォルダにコピーします。

  10. systemフォルダおよびフォルダ内のファイルへのAdministratorのアクセス権を変更します。

スキーマ

LDIFファイルには、エントリが属するすべてのオブジェクトクラスを記述する必要があります。また、クラスの継承によってエントリが属することになるクラスも記述する必要があります。たとえば、inetOrgPersonタイプのエントリの構文はLDIFファイルでは次のようになります。

  • objectclass: inetorgperson

  • objectclass: organizationalPerson

  • objectclass: person

  • objectclass: top

ACLテンプレート

ldif2dibユーティリティを使用してバルクロード処理を行ったオブジェクトは、指定されたACLと一緒にオブジェクトのオブジェクトクラス用のACLテンプレートには追加されません。

シグナルハンドラ

sキーまたはSキーを押すと、オフラインのバルクロード処理を一時的に停止することができます。バルクロード処理を停止する際はエスケープキー(Esc)を使用することができます。