5.1 LDIFについて

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

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

5.1.1 LDIFファイル形式

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

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

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

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

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

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

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

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

5.1.2 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

5.1.3 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構文を使用してエントリを移動しようとすると、その要求は失敗します。

5.1.4 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

5.1.5 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