- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!技術的雑談-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}}
[[技術的雑談]]へ戻る