我正在使用 ldapadd,我想向存储库添加一个属性类型,以便其他条目可以使用它。
我遇到了一些问题。这是我的 ldif 文件。
dn: dc=myorg,dc=co,dc=uk
changetype: add
add: attributetypes
attributetype: ( 2.2.980.1.1 NAME ( 'ecdvisibility' 'ecdvis' ) DESC 'The visibility of the object' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE USAGE userApplications )
检查完行末的空格后,我发现一切正常:
dn: dc=myorg,dc=co,dc=uk$
changetype: add$
add: attributetypes$
attributetype: ( 2.2.980.1.1 NAME ( 'ecdvisibility' 'ecdvis' )$
DESC 'The visibility of the object'$
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15$
SINGLE-VALUE$
USAGE userApplications )$
我看到的是如下的神秘错误:
ldap_add:未定义属性类型(17)附加信息:添加:属性类型未定义
我不明白这个错误,属性类型没有定义,我正在尝试添加它!此外,就在这一行之前,它写道:
添加新条目“dc=myorg,dc=co,dc=uk”
为什么要添加这个,它已经存在了。我也不确定我是否应该使用 ldapadd 或 ldapmodify。
我的典型命令是:
sudo ldapadd -D cn=admin,dc=myorg,dc=co,dc=uk -w 密码 -v -f attributeType.ldif
我还确保文件末尾有一个试验空白行,尽管这似乎没有任何区别。
添加任何用户都可以使用的这种属性的最佳方法是什么?
更新
我还尝试了以下操作:
dn: cn=schema
changetype: modify
add: attributeTypes
##
## The new attribute type
##
attributeTypes: ( ecdvisibility.oid NAME ( 'ecdvisibility' 'ecdvis' ) DESC 'The visibility of the object' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE USAGE userApplications )
但这次我收到这个错误:
ldap_modify:无效语法(21)附加信息:attributeTypes:值 #0 根据语法无效
更新 2:
在我做出任何更改之前,我必须更新 openldap 似乎在后台设置的系统密码:
dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: password
这很有效,所以我开始尝试更新属性。
第一次尝试:
dn: cn=schema,cn=config
changetype: add
olcAttributeTypes: ( ecdvisibility.oid
NAME ( 'ecdvisibility' 'ecdvis' )
DESC 'The visibility of the object'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE
USAGE userApplications )
olcRootDN: cn=config
olcRootPW: password
#objectClass: top
ldap_add:对象类违规(65)附加信息:没有 objectClass 属性
在对象类中进行评论时出现以下错误:
ldap_add:对象类违规(65)附加信息:未提供结构对象类
好的,我将尝试 inetOrgPerson
ldap_add:对象类违规(65)附加信息:对象类“inetOrgPerson”需要属性“sn”
停止,我真的不想这样做,我只想添加一个可供 ldap 使用的属性类型,并且可以在必要时添加到对象中。我现在不想指定单个对象或条目。这可能吗?如果可以,怎么做?非常感谢任何进一步的建议。
感谢@grawity,最终的解决方案如下:
dn: cn=test,cn=schema,cn=config
changetype: add
olcAttributeTypes: ( 2.25.247072656268950430024439664556757516066
NAME ( 'ecdvisibility' 'ecdvis' )
DESC 'The visibility of the object'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE
USAGE userApplications )
objectClass: olcSchemaConfig
我将 OID 编号更改为开放唯一编号之一,因为我使用的是无效的公共编号。属性类型已成功添加,可以在其他地方使用。
答案1
基础
我看到的是如下的神秘错误:
ldap_add: Undefined attribute type (17) additional info: add: attribute type undefined
我不明白这个错误,属性类型未定义,我正在尝试添加它!
它不是在谈论你的属性。它谈论的是行add: attributetypes
– 它不知道名为的属性add
。
在 LDIF 中,add:
仅replace:
当delete:
修改条目(即changetype: modify
)。但是如果你想添加作为新条目,您只需提供原始数据,无需提供其他任何数据。
请参阅“ldif”手册页例如“添加” LDIF 和“修改” LDIF 之间的区别。
就在这一行之前还写道:
adding new entry "dc=myorg,dc=co,dc=uk"
为什么要添加这个,它已经存在了。
因为你使用了changetype: add
——换句话说,你问ldapmodify 创建一个新条目。
需要澄清的是,“添加新条目”与“修改条目,添加新属性”完全不同。可能的操作包括:
changetype: add
– 创建一个新条目,完全按照指定的方式。changetype: modify
– 编辑现有条目的属性,接受以下组合:add: ...
– 添加新属性(或添加更多值)replace: ...
– 添加或完全覆盖属性delete: ...
– 删除属性(或特定值)
changetype: modrdn
– 更改 DN(重命名或移动条目)changetype: delete
– 删除整个条目。
看本文档。
我也不确定是否应该使用 ldapadd 还是 ldapmodify。
它们之间的唯一区别在于,changetype
如果你不指定,它们会使用哪个。也就是说,ldap添加将默认changetype: add
为ldap修改将默认为changetype: modify
。
changetype:
如果您在 LDIF 中手动指定,则两个命令变得相同。
现在,架构
模式配置在 LDAP 服务器之间差别很大,并且您的 LDIF 对 OpenLDAP 来说完全是错误的。实际的属性描述很好,但它需要存储在不同的 DN 中,不同的属性中。
首先,你不将模式直接添加到常规数据库,但添加到特殊配置树 – OpenLDAP 使用下面的子条目cn=schema,cn=config
,每个模式一个olcSchemaConfig
条目。
属性也以olc
– 开头,即olcAttributeTypes
和olcObjectClasses
。
因此,要添加具有 1 个属性和零个对象类的新模式,请使用:
dn: cn=ecd,cn=schema,cn=config
changetype: add
objectClass: olcSchemaConfig
olcAttributeTypes: ( 2.2.980.1.1
NAME ( 'ecdvisibility' 'ecdvis' )
DESC 'The visibility of the object'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE
USAGE userApplications )
请注意,OpenLDAP 会自动向 RDN 添加一个数字,例如cn={5}ecd
。之后,您可以向同一架构添加更多属性或类:
dn: cn={5}ecd,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 4.5.6.7 NAME 'foo' ... )
olcAttributeTypes: ( 4.5.6.8 NAME 'bar' ... )
-
add: olcObjectClasses
olcObjectClasses: ( 4.5.6.9
NAME 'ecdwhatever'
AUXILIARY
MAY ( ecdvisibility $ foo $ bar ) )
-
(2.2.980.*
OID 真的属于你吗?如果不是,那么最好自己获取一个来自 IANA。