InfoDirectory使用手引書
目次 索引 前ページ次ページ

第5部 保守編> 第14章 トラブル事例

14.6 LDAPコマンドに関するトラブル

事例1 LDAPコマンドでエントリの追加/検索を行うと文字化けが発生する。

【トラブル現象】
  LDAPコマンドでエントリの追加/検索を行うと文字化けが発生する。

【原因】
 登録/参照したエントリが文字化けしている場合に、以下の原因が考えられます。

  1. コード変換がサポートされていない他社製のLDAPコマンドを使用している。
  2. 文字コードの指定が正しく行われていない。

【対処方法】
 以下のように対処してください。 

  1. システム環境変数もしくはユーザ環境変数の PATH 設定で、他社製のLDAPコマンドを優先して呼ぶように設定されていないか確認してください。InfoDirectoryのLDAPコマンドを優先して呼ぶように変更してください。
    “InfoDirectoryのインストールディレクトリ”\ID\Dir\sdk\bin
  2. LDAPコマンドで文字コードの指定を行わない場合に使用される文字コードは、Shift JISコードです。使用するマシンの文字コードの環境を確認して適切な文字コードを指定してください。

  1. 環境変数の PATH設定で、他社製のLDAPコマンドを優先して呼ぶように設定されていないか確認してください。InfoDirectoryのLDAPコマンドを優先して呼ぶように変更してください。
    “LDAP SDKのインストールディレクトリ”/C/bin
  2. LDAPコマンドで文字コードの指定を行わない場合に使用される文字コードは、LDAP V3プロトコル指定時でEUCコード、LDAP V2プロトコル指定時でShift JISコードです。使用するマシンの文字コードの環境を確認し、適切な文字コードを指定してください。

     

事例2 特殊文字を含むDNのエントリ登録に失敗した。

【トラブル現象】
  特殊文字を含むDNのエントリ登録に失敗した。

【原因】
 特定の特殊文字をDNに使用する場合、それらをエスケープする必要があります。

【対処方法】
 以下の特殊文字をDNに使用する場合、それらをエスケープしてください。
  “\”、 “"”、 “,”、 “=”、 “+”、 “<”、 “>”、 “#”、 “;”
 ldapmodifyコマンドの詳細は、ldapmodifyを参照してください。

 

事例3 バイナリ属性をLDAP V2プロトコルで登録したが、バイナリデータが正しく検索できない。

【トラブル現象】
 ldapmodifyコマンドでLDAP V2プロトコルを使用して、jpegphotoの属性を含むエントリを追加したが、管理ツールからそのjpegphotoのデータが参照できない。

【原因】
 LDAP V2プロトコルを指定したldapmodifyコマンドでは、LDIFに指定されたバイナリデータは、バイナリとして送信されず、記述されたBase64形式の文字データとして登録されるため、管理ツールからjpegphotoのデータは見ることができません。

【対処方法】
 バイナリデータとして送信する場合、LDAP V3プロトコルを指定したldapmodifyコマンドを使用してください。ldapmodifyコマンドの詳細は、ldapmodifyを参照してください。

 

事例4 LDIFファイルに"\"を含む属性値を指定したが、"\"が登録されない。

【トラブル現象】
 ldapmodifyコマンドで、LDIFファイルに“\”を含む属性値をLDAP V2プロトコルを指定して登録した場合、属性値に“\”が登録されない。

【原因】
 LDAP V2プロトコルでは、“\”を含む属性を登録する場合、“\”をエスケープしていないために登録されていません。

【対処方法】
 LDAP V2プロトコルで、“\”を含む属性値を登録する場合、“\”はエスケープする必要があります。LDAP V3プロトコルではエスケープする必要はありません。

 

事例5 LDIFファイルでバイナリ属性にファイル名を指定したが、エラーが通知された。

【トラブル現象】
 ldapmodifyコマンドで、属性値にバイナリデータのファイルから読込むように記述したLDIFを指定したところ、次のメッセージが出力された。
 メッセージ:Failed to convert charactor code

【原因】
 ldapmodifyコマンドによりバイナリ属性(jpegphoto)の値を指定するときは、以下の対処方法にしたがってください。

【対処方法】
 画像データをバイナリ(JPEG)ファイルで登録する場合は、以下のようにURL形式(file://フルパス)で指定してください。

dn: cn=富士通タロウ,o=fujitsu,c=jp
cn: 富士通タロウ
sn: 富士通
objectclass: inetOrgPerson
objectclass: OrganizationalPerson
objectclass: person
objectclass: top
jpegphoto:< file:///tmp/gazo.jpg

※gazo.jpgはJPEG形式のファイルです。

 画像データをBase64形式のファイルで登録する場合は、以下のようにファイルのパスを直接指定してください。

dn: cn=富士通タロウ,o=fujitsu,c=jp
cn: 富士通タロウ
sn: 富士通
objectclass: inetOrgPerson
objectclass: OrganizationalPerson
objectclass: person
objectclass: top
jpegphoto:< /tmp/gazo.txt

※gazo.txtはBase64形式のファイルです。

 

事例6 LDIFファイルにファイルから属性値を読み込むように設定したが、変更したデータが異なる。

【トラブル現象】
 ldapmodifyコマンドで、LDIFファイルにファイルから属性値のデータを読み込むように指定して実行した場合、異なる属性値が登録された。

【原因】
 LDIFファイル内に指定したファイルが、Base64形式にエンコードされていない可能性があります。
 LDAP V3プロトコルを指定したldapmodifyコマンドでは、そのファイルの内容をデコードして登録します。この場合、指定したファイルの内容が異なるデータにデコードされて登録されている可能性があります。
 また、LDAP V2プロトコルの場合、Base64からデコードされずにBase64データとして登録されます。

【対処方法】
 LDIFファイルで属性値をファイルから読込んで指定する場合は、Base64形式にエンコードされたファイルを指定してください。LDIFファイルの属性値の指定方法については、属性値指定行を参照してください。

 

事例7 ldapdeleteコマンドでLDAPエラーコード(0x22 Invalid DN syntax)が通知される。

【トラブル現象】
 ldapdeleteコマンドで以下の内容が記述されたファイルを指定し、コマンドを実行した場合、Invalid DN syntaxのエラーが発生した。

 dn: cn=富士通タロウ,o=fujitsu,c=jp

【原因】
 LDIFファイルの指定方法に誤りがあります。

【対処方法】
 ldapdeleteコマンドで指定されるファイルには、“dn:”の記述は必要ありません。この場合、以下の記述により、エントリの削除が行えます。ldapdeleteコマンドの詳細は、ldapdeleteを参照してください。

 cn=富士通タロウ,o=fujitsu,c=jp

 

事例8 ldapdeleteコマンドでLDAPエラーコード(0x42 Operation not allowed on nonleaf)が通知される。

【トラブル現象】
 ldapdeleteコマンドで以下の内容が記述されたファイルを指定し、コマンドを実行した場合、Operation not allowed on nonleafのエラーが発生した。

 o=fujitsu,c=jp

【原因】
 "o=fujitsu,c=jp"配下にエントリが存在するためにエラーが通知されています。

【対処方法】
 "o=fujitsu,c=jp"配下のエントリを全て削除してから該当エントリを削除してください。ldapdeleteコマンドの詳細は、ldapdeleteを参照してください。

 

事例9 ldapmodifyコマンドでinvalid ldif formatが通知される。

【トラブル現象】
  ldapmodifyコマンドで以下のLDIFファイルを指定した場合、“invalid ldif format”エラーが通知される。[RET]は改行を表しています。

 dn: cn=富士通タロウ,o=tfl,c=jp[RET]
 changetype: modify[RET]
 add: telephonenumber[RET]
 telephonenumber: 1234[RET]
 - [RET]
 add: cn[RET]
 cn: taro[RET]

【原因】
 LDIFファイルの記述形式に誤りがあります。“-”(ハイフン)行の最後に空白が含まれているために、このエラーになっています。

【対処方法】
 invalid ldif formatのエラーは、LDIFの記述が間違っている場合に表示されます。このエラーが表示された場合、LDIFの記述形式を見直してください。LDIFの記述形式の詳細は、LDIFを参照してください。

 

事例10 ldapmodifyコマンドでエントリ登録時、エラーが通知される。

【トラブル現象】
 ldapmodifyコマンドでエントリ登録時、オブジェクトクラス関係のエラーが発生した。

【原因】
 エントリ登録時にエラーが発生する場合、以下の原因によってLDAPのエラーコードに準拠したメッセージが出力されます。

エラー

原因

Object class violation

オブジェクトクラスの必須属性を設定しない場合
オブジェクトクラスに存在しない属性を設定した場合

Naming violation

ネームバインドが設定されていない場合
継承オブジェクトクラスを記述しなかった場合(LDAP V2のみ)

Operations error

存在しないオブジェクトクラス(属性)を設定した場合(LDAP V3のみ)

Invalid syntax

存在しないオブジェクトクラス(属性)を設定した場合(LDAP V2のみ)

Invalid DN syntax

シンタックスに合わない値を設定した場合

Constraint violation

属性値のサイズが規定値を超える場合

【対処方法】
 表のエラー原因について、オブジェクトクラス/属性の定義、ネームバインドの設定を確認してください。
 オブジェクトクラスの定義については、付録A サポートオブジェクトクラスを参照してください。
 属性の定義については、付録B サポート属性を参照してください。
 ネームバインドの設定については、付録C サポートネームバインドを参照してください。

 

事例11 ldapmodifyコマンドで、DNを変名するとエラーが通知される。

【トラブル現象】
 ldapmodifyコマンドで以下の内容のLDIFファイルを指定したところ、次のエラーメッセ−ジが出力される。

 メッセージ:
 expecting "newrdn:" but saw "deleteoldrdn:" (line 3 of entry dn: cn=富士通タロウ,o=fujitsu,c=jp)

 LDIFファイル:

 dn: cn=富士通タロウ,o=fujitsu,c=jp
 changetype: modrdn
 deleteoldrdn:1
 newrdn:cn=富士通ジロウ
 newsuperior: o=fujitsu,c=jp

【原因】
 modrdnで指定されるサブコマンド(new rdn,deleteoldrdn,newsuperior)の指定順序が誤っています。

【対処方法】
 サブコマンド行は、newrdn → deleteoldrdn → newsuperiorの順序で記述してください。

 dn: cn=富士通タロウ,o=fujitsu,c=jp
 changetype: modrdn
 newrdn:cn=富士通ジロウ
 deleteoldrdn:1
 newsuperior: o=fujitsu,c=jp


 ldapmodifyコマンドで指定するサブコマンドについては、サブコマンド行を参照してください。

 

事例12 ldapmodifyコマンドで、属性値の置換処理が正常に行われない。

【トラブル現象】
  ldapmodifyコマンドで、以下のエントリに対して、sn属性の値“フジツウ”を“ふじつう”に置換した場合、属性値”富士通”が削除された。

 dn: cn=富士通タロウ,o=fujitsu,c=jp
 cn: 富士通タロウ
 sn: 富士通
 sn: フジツウ

 属性値の置換えには、以下のLDIFを使用した。

 dn: cn=富士通タロウ,o=fujitsu,c=jp
 changetype: modify
 replace: sn
 sn: ふじつう

【原因】
 複数の属性値の中から1つだけを置換する場合、属性の置換後も保持したい“富士通”を記述していないため属性値が削除されています。

【対処方法】
 複数の属性値の中から1つだけを置換する場合、置換しない他の属性値も同時に指定する必要があります。このような場合、以下のような指定を行います。

 dn: cn=富士通タロウ,o=fujitsu,c=jp
 changetype: modify
 replace: sn
 sn: 富士通
 sn: ふじつう

 

事例13 ldapmodifyコマンドでinvalid ldif formatが通知される。

【トラブル現象】
 ldapmodifyコマンドで以下のLDIFファイルを指定した場合、invalid ldif formatのエラーが通知される。

 dn: cn=富士通タロウ,o=tfl,c=jp
 objectclass: person
 cn: 太郎
 sn: 富士通
 telephonenumber:

【原因】
 LDIFの記述形式に誤りがあります。telephonenumber行の属性値が指定されていないために、エラーが発生しています。属性値を指定しない属性を含むエントリを登録することはできません。

【対処方法】
 invalid ldif formatのエラーは、LDIFの記述形式に誤っている場合に通知されます。このエラーが表示された場合、LDIFの記述形式を見直してください。LDIFの記述形式の詳細は、LDIFを参照してください。

 

事例14 ldapsearchコマンドで期待した結果が通知されない。

【トラブル現象】
 ldapsearchコマンドで以下のパラメタを指定を行って検索した場合、cn属性を含むエントリが通知されない。

 ldapsearch -p 10001 -b c=jp "cn=富士通太郎,o=tfl,c=jp" "cn=*"

【原因】
 ldapsearchコマンドに指定したパラメタに誤りがあります。

【対処方法】
 ユーザ名の指定が誤っています。ユーザ名は、“-D ユーザ名”で指定してください。

 

事例15 ldapsearchコマンドで検索したBase64形式の属性値をデコードしたが、正しく変換されない。

【トラブル現象】
 ldapsearchコマンドで、Base64表記の指定(-e,-E)を行ってBase64形式の属性値を検索後、それをデコードしたが正しく変換されない。

【原因】
 LDAPコマンドの仕様です。

【対処方法】
 Base64表記の指定で表示されるBase64形式のデータは、UTF-8形式のデータをBase64形式にエンコードされています。したがって、Base64形式のデータをUTF-8形式にデコードし、UTF-8形式のデータに戻した後、再び適切な文字コードに変換する必要があります。

 

事例16 ldapsearchコマンドで、文字コードにISO-8859-1を指定するとBase64で通知される。

【トラブル現象】
 ldapsearchコマンドで、文字コードにISO-8859-1を指定した場合、0x80以上のコードを含む属性値が、Base64形式で通知される。

【原因】
 LDAPコマンドの仕様です。

【対処方法】
 以下の場合、Base64形式で出力されます。

事例17 ldapsearchコマンドの検索フィルタで、"以上(>=)、以下(<=)"を指定したが期待した結果が通知されない。

【トラブル現象】
 ldapsearchコマンドで検索フィルタに“carLicense<=00050”を指定して検索を行ったが、carLicense属性に00049の属性値を含むエントリが検索されなかった。

【原因】
 属性carLicenseのマッチングルール(照合規則)は“caseIgnoreMatch”であるため、“>=”(以上)もしくは“<=”(以下)の指定による検索はできません。

【対処方法】
 マッチングルールが“caseIgnoreMatch”である属性に関しては、完全一致もしくは部分一致による検索フィルタを指定する必要があります。

 例:
 "carLicense=00049”、“ carLicense=0004*”
 なお、“caseIgnoreOrderingMatch”の属性については、“>=”(以上)、もしくは“<=”(以下)の指定で検索を行うことができます。“caseIgnoreOrderingMatch”の属性を以下に示します。
 "uid","employeenumber","dnQualifier"
 属性のマッチングルールについては、属性一覧を参照してください。

 

事例18 ldapsearchコマンドでroot DSEの情報が検索できない。

【トラブル現象】
 ldapsearchコマンドでroot DSEの情報が検索できない。

【対処方法】
 ldapsearchコマンドのパラメタとして、basednに“null”(ヌル)、検索の範囲にbase、通知するroot DSEの属性を指定する必要があります。ldapsearchコマンドの詳細は、ldapsearchを参照してください。

 ldapsearch -b "" -D "cn=admin" -w manager -s base "objectClass=*" subschemasubentry

 

事例19 ldapsearchコマンドでチェンジログの情報が検索できない。

【トラブル現象】
 ldapsearchコマンドでチェンジログの情報が検索できない。

【対処方法】
 ldapsearchコマンドのパラメタとして、basednに“cn=changelog”、検索の範囲にbaseを指定する必要があります。ldapsearchコマンドの詳細は、ldapsearchを参照してください。

 ldapsearch -s base -b "cn=changelog" -D "cn=admin" -w manager "objectclass=*"

 


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005