我从另一台服务器导入一个openldap数据库,导入时,我得到了一些用户的错误,问题是,mozillaAbPersonAlpha不是一个有效的objectClass。
#!ERROR [LDAP Error Code 21 - objectClass: value #3 invalid per syntax] ... dn: uid=somedude,cn=Whatever,dc=test,dc=com sn: Some Dude givenName: Dude mail: [email protected] mozillaCustom1: Engineering l: Somewhere objectClass: inetOrgPerson objectClass: top objectClass: person objectClass: mozillaAbPersonAlpha uid: somedude cn: Some Dude
AFAICT似乎我的OpenLDAP的安装缺乏mozillaABPersonAlpha的模式。
但是,我如何安装这个模式?
编辑:服务器正在使用新的configuration后端,所以没有任何slapd.conf文件。 相反,有一个/etc/slapd.d/目录,其中包含怪异的目录命名(例如/etc/slapd.d/cn=config/)。
在这种情况下如何添加新的模式?
我回答我自己的问题,因为我想知道如何解决问题,同时使用新的slapd.d / dynamic / cn = config后端,我不想回到slapd.conf方法。 (几乎没有人这样做,AFAICT)
当我尝试使用ldapadd添加新的模式时,我总是得到以下错误:
ldapadd -H ldap://whatever.test.com -D "cn=admin,dc=whatever,dc=test,dc=com" -x -W -f mozillaabpersonalpha.ldif ldap_add: Insufficient access (50)
所以我使用的BindDN没有这个权限。 我将需要设置一个ACL或使用该操作的rootDN。
我不知道为什么,但是在configurationslapd debian软件包时,它允许我在DIT上创build一个pipe理员帐号,但是没有提及任何有关rootDN的信息。 经过一番浏览之后,我发现这个博客解释了如何在使用cn = config模式时设置rootDN的密码。
因此,编辑了文件/etc/ldap/slapd.d/cn=config/olcDatabase\=\{0\}config.ldif并添加了以下内容:
olcRootDN: cn=admin,cn=config olcRootPW: mypassword
我必须重新启动slapd以使更改生效(不应该有必要,但是…)。 为了testing它,我运行了以下命令:
ldapwhoami -H ldap://whatever.test.com -D "cn=admin,cn=config" -x -w mypassword
它的工作! 下一步是使用ldapadd以ldif格式加载mozillaAbPersonAlpha模式:
ldapadd -H ldap://whatever.test.com -D "cn=admin,cn=config" -x -w mypassword -f mozillaabpersonalpha.ldif
答复是成功的
adding new entry "cn=mozillaabpersonalpha,cn=schema,cn=config"
最后,添加一个依赖于mozillaABPersonAlpha架构的用户现在是可能的。 例如,文件newuser.ldif有这个:
dn: uid=somedude,cn=Whatever,dc=test,dc=com sn: Some Dude givenName: Dude mail: [email protected] mozillaCustom1: Engineering l: Somewhere objectClass: inetOrgPerson objectClass: top objectClass: person objectClass: mozillaAbPersonAlpha uid: somedude cn: Some Dude
并将其添加到新目录(不使用rootDN帐户)现在工作:
ldapadd -H ldap://whatever.test.com -D "cn=admin,dc=whatever,dc=test,dc=com" -x -W -f usertest.ldif Enter LDAP Password: adding new entry "uid=somedude,cn=SomeGroup,cn=whatever,dc=test,dc=com
复制n 将该模式粘贴到服务器上的文件中,然后添加:
include /path/to/that/file.schema
在你的slapd.conf中并重新启动slapd。
在你的slapd.conf(5)文件中会有一个(几个?)“include”语句:
include /etc/openldap/schema/core.schema
您需要下载架构文件,并将其放在架构/目录中,其余架构文件已经存在(在一个位置的所有东西都比较简单),然后更改configuration以包含它。 然后重新启动OpenLDAP。