無法在 LDAP 結構中創建 inetOrgPerson
我有一個使用本機
ldapd
實現在 OpenBSD 7.1 上執行的 LDAP 伺服器。我創建了一個基本的 DIT,在嘗試添加使用者時,我得到:# ldapadd -vv -H ldaps://hypnos.spookyinternet.com/ -f /tmp/users.ldif -D cn=admin,dc=spookyinternet,dc=com -w 'correct horse battery staple' ldap_initialize( ldaps://hypnos.spookyinternet.com:636/??base ) add objectClass: inetOrgPerson add uid: jessejames adding new entry "uid=jessejames,ou=users,ou=accounts,ou=spookyinternet,dc=spookyinternet,dc=com" ldap_add: Object class violation (65)
哪裡
/tmp/users.ldif
是:dn: uid=jessejames,ou=users,ou=accounts,ou=spookyinternet,dc=spookyinternet,dc=com objectClass: inetOrgPerson uid: jessejames
我查看了
inetOrgPerson
架構,但看不到我違反了課程的哪一部分,特別是因為沒有一個欄位是必須的:objectclass ( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' SUP organizationalPerson STRUCTURAL MAY ( audio $ businessCategory $ carLicense $ departmentNumber $ displayName $ employeeNumber $ employeeType $ givenName $ homePhone $ homePostalAddress $ initials $ jpegPhoto $ labeledURI $ mail $ manager $ mobile $ o $ pager $ roomNumber $ secretary $ uid $ x500uniqueIdentifier $ preferredLanguage $ userSMIMECertificate $ userPKCS12 ) )
我可以在網上找到的所有實例
ldap_add: Object class violation (65)
都附帶一條消息,表明違規行為是什麼,但不幸的是,我無法從我的客戶(從openldap-client
包裹中)那裡獲得更具體的資訊。
inetOrgPerson
objectClass補充 ,organizationalPerson
哪個補充person
,哪個補充top
。這意味著,它繼承了在這些對像類中定義的所有屬性。其中一些屬性被聲明為必須,您需要全部指定。請參閱RFC2798(另請參閱RFC4519)例如,它繼承自
person
:MUST (sn $ cn)
和top
:MUST ( objectClass )
。因此,您還需要在 LDIF 中定義所有這些。此外,某些目錄要求您指定所有 objectClasses,直到
top
:dn: uid=jessejames,ou=users,ou=accounts,ou=spookyinternet,dc=spookyinternet,dc=com objectClass: top objectClass: person objectClass: organizationalPerson objectClass: inetOrgPerson uid: jessejames cn: Jesse sn: James
此 LDIF 應該可以工作(前提是您已經添加了所有容器:
ou=users
、ou=accounts
等)。然而,這顯然是多餘的,我建議你嘗試只inetOrgPerson
聲明類,看看它是否像那樣工作。如果您只對
uid
屬性感興趣並且不想添加sn
andcn
,則根本不應該使用inetOrgPerson
objectClass。您可以採取其他路線並使用僅包含此屬性的uidObject
輔助對像類:uid
dn: uid=jessejames,ou=users,ou=accounts,ou=spookyinternet,dc=spookyinternet,dc=com objectClass: top objectClass: uidObject uid: jessejames
在這種情況下,您必須在 LDIF 中指定這兩個 objectClasses,因為
uidObject
它不是結構 objectClass,而最簡單的結構 objectClass 是基礎top
。而且您以後可以隨時添加inetOrgPerson
(或任何其他)所有必需的屬性。