トップ 一覧 検索 ヘルプ RSS ログイン

技術的雑談-OpenLDAPのError(80)の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!技術的雑談-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( <DEFAULT> )
 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}}

[[技術的雑談]]へ戻る