!!!技術的雑談-OpenLDAPのError(80) !!環境 * CentOS 5.2 * OpenLDAP 2.3.27 (CentOS 5.2標準) !!現象 * LDAPにアカウントなどを追加しようとしたときに追加できない。 !!原因と解決 ! 1. 親Objectが未登録状態 LDAPのDBを作ってそのままの状態だと、suffixのDNに対して'''Objectが作られていない'''。 例えば[[前述|技術的雑談-OpenLDAPを立ち上げてみる]]の例で言うと、dc=sample.dc=comがsuffixで、com-sampleは表示されているが、JXplorerなどで選択すると、 unable to list dc=sample,dc=com とか、 Unable to perform Read entry operation. とかが表示されるハズ。 これは何を意味するかというと、 '''「comの子のsampleなんてObjectは見つからないよ」''' という意味である。 引っ掛かりやすいが、slapd.confでsuffixに書いたObject(ツリー)はJXplorerでは表示されるが、LDAP的にはまだObjectがない。 Objectが実在しないので当然dc=sample,dc=comの下に新しいObjectは作成できない。 まずは、slapd.confのsuffixに書いたObjectをldapaddで実際に追加してやる必要がある。 ちなみに、今回の例では、追加してやるObjectは「sample」だけでよい。 「com」に関してはsuffixが当てはまらなくなるので追加することはできない。 (ldapaddなどで無理やりdc=comなるObjectを追加しようとすると「no global superior knowledge」と怒られる。エラーコードは53。) ! 2. no structuralObjectClass operational attribute で、これではいけないということでdc=sample,dc=comにObjectを追加しようと、以下のようなLDIFを書いてldapaddに食わせてみる。 dn:dc=sample,dc=com objectClass:dcObject objectClass:top dc:sample しかし、これを実行すると以下のように怒られる。 # ldapadd -x -D "cn=Manager,dc=sample,dc=com" -w hogehoge -v -f init.ldif ldap_initialize( ) add objectClass: dcObject top add dc: sample adding new entry "dc=sample,dc=com" modify complete ldap_add: Internal (implementation specific) error (80) additional info: no structuralObjectClass operational attribute これが何を意味するのかイマイチわからなかったが、どうも「StructuralなObject」をsuffixのObjectに対しては追加する必要があるらしい。 「StructuralなObject」とは、schemaで「STRUCTURAL」が指定されているObjectという事らしい。 例えば、core.schemaを見ると、 objectclass ( 2.5.6.2 NAME 'country' DESC 'RFC2256: a country' SUP top STRUCTURAL MUST c MAY ( searchGuide $ description ) ) なんて定義があって、要は「SUP」の行に「STRUCTURAL」が書いてあるobjectClassをsuffixのObjectには使えという事らしい。 よって、上記のLDIFは、 dn:dc=sample,dc=com objectClass:dcObject objectClass:top objectClass:organization dc:sample o:sample と、するとちゃんと通るようになる。 ちなみに、CentOS5.2でOpenLDAPをインストール時に選択したときについてくるSchemaでSTRUCTURALなObjectは以下のものがある。 * core.schema ** country ** locality ** organization ** organizationalUnit ** person ** organizationalPerson ** organizationalRole ** groupOfNames ** residentialPerson ** applicationProcess ** applicationEntity ** dSA (RFC2256: a directory system agent (a server)) ** device ** groupOfUniqueNames ** cRLDistributionPoint ** dmd * cosine.schema ** pilotPerson 又は newPilotPerson ** account ** document ** room ** documentSeries ** domain ** RFC822localPart ** dNSDomain ** friendlyCountry ** pilotOrganization ** pilotDSA * nis.schema ** posixGroup ** ipService ** ipProtocol ** oncRpc ** ipNetwork ** nisNetgroup ** nisMap ** nisObject !!履歴 2009/04/13 -- 初版 [[技術的雑談]]へ戻る !!突っ込み {{comment}} [[技術的雑談]]へ戻る {{trackback}} [[技術的雑談]]へ戻る