Ldap

無法在 LDAP 結構中創建 inetOrgPerson

  • August 9, 2022

我有一個使用本機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包裹中)那裡獲得更具體的資訊。

inetOrgPersonobjectClass補充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=usersou=accounts等)。然而,這顯然是多餘的,我建議你嘗試只inetOrgPerson聲明類,看看它是否像那樣工作。


如果您只對uid屬性感興趣並且不想添加snand cn,則根本不應該使用inetOrgPersonobjectClass。您可以採取其他路線並使用僅包含此屬性的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(或任何其他)所有必需的屬性。

引用自:https://serverfault.com/questions/1107684