我在创建自己的属性(例如 dateOfExpire-广义时间)然后将此属性添加到自己的 ObjecClass(例如宿舍)时遇到问题,然后将此属性与 ObjectClass 添加到现有模式 inetorgperson 中。
这是我添加到 inetorgperson.ldif 文件中的内容:
olcAttributeTypes: ( 2.5.18.1 NAME 'dateOfExpire' DESC 'RFC4512: indicated the date of account expiry' EQUALITY generalizedTimeMatch ORDERING generalizedTimeOrderingMatch SINGLE-VALUE USAGE directoryOperation SUBSTR cas eIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
并将其添加到 inetorgperson.schema 文件中:
attributetype ( 2.5.18.1 NAME 'dateOfExpire'
DESC 'RFC4512: indicated the date of account expiry'
EQUALITY generalizedTimeMatch
ORDERING generalizedTimeOrderingMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
SINGLE-VALUE
USAGE directoryOperation )
objectclass ( 2.5.6.6.1 NAME 'dormitory'
DESC 'RFC2256: a person'
SUP person
STRUCTURAL
MUST ( sn $ cn $ dateOfExpire $ name $ uid )
MAY ( userPassword $ telephoneNumber $ seeAlso $ description ) )
之后,我使用以下命令添加此架构:
ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f inetorgperson.ldif
但我只得到这个错误:
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"
ldap_add: Other (e.g., implementation specific) error (80)
additional info: olcAttributeTypes: "2.5.18.1" is operational
答案1
您已将该属性标记为可操作(使用USAGE directoryOperation
),因此出现错误。
用户不应修改操作属性;它们需要在 OpenLDAP 中运行的代码来根据某种事件更新它们。
另外,我建议不要更改标准模式,例如 inetOrgPerson 等。您应该创建自己的模式。
答案2
每个属性类型和对象类必须分配有唯一的 OID。
您正在重复使用 OID2.5.18.1分配给标准属性创建时间戳。
您还使用过 OID2.5.6.6.1这是一个您不应该使用的 OID 弧,因为其他人可能会在其中分配 OID。
也可以看看:OpenLDAP 常见问题解答:我需要为每个架构项分配 OID 吗?
你的对象类宿舍是善良的STRUCTURAL
。无法将其添加到现有条目中。请使用 kindAUXILIARY
来代替。