为什么这个 ldapadd 命令会因“无效语法”错误而退出?

为什么这个 ldapadd 命令会因“无效语法”错误而退出?

我对 openldap 还很陌生,但对 linux/unix 环境非常熟悉。我正在尝试使用指南设置我的第一个测试 openldap 环境这里。我还阅读了大部分管理指南这里我必须承认,这需要花费很多时间去学习。

因此,按照 ubuntu 基本设置指南,我创建了一个如下所示的 ldif 文件:

dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: Groups

dn: cn=engineers,ou=Groups,dc=example,dc=com
objectClass: posixGroup
cn: engineers
gidNumber: 5000

dn: uid=john,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: john
sn: Doe
givenName: John
cn: John Doe
displayName: John Doe
uidNumber: 10000
gidNumber: 5000
userPassword: johnldap
gecos: John Doe
loginShell: /bin/bash
homeDirectory: /home/john

每当我尝试使用以下方法添加它时:

$ ldapadd -x -D cn=admin,dc=example,dc=com -W -f add_content.ldif

我收到以下错误:

adding new entry "cn=engineers,ou=Groups,dc=my-domain,dc=com"
ldap_add: Invalid syntax (21)
    additional info: objectClass: value #0 invalid per syntax

adding new entry "uid=john,ou=People,dc=my-domain,dc=com"
ldap_add: Invalid syntax (21)
    additional info: objectClass: value #0 invalid per syntax

谷歌搜索此错误的结果没有提供任何有用的建议。我在这里可能做错了什么?

答案1

您的问题无疑是需要将nis架构加载到 LDAP 服务器中。如何执行此操作取决于您使用的是旧配置文件还是托管在目录中并由目录支持的slapd.conf较新的动态配置。cn=configslapd.d

使用slapd.conf

您将需要include在您的架构定义中slapd.conf添加如下行:

include /usr/local/etc/openldap/schema/nis.schema

这假定nis.schema文件位于该路径;如果不是,请适当修改路径。

您需要重新启动slapd才能激活新的模式。

使用slapd.d

(我为了完整性而将其包括在内,尽管它与您当前的配置没有直接关系)。

slapd如果您使用动态配置,要将架构加载到 中cn=config,则可以使用ldapadd。根据您的 ACL 配置方式,命令可能如下所示:

ldapadd -Y EXTERNAL -H ldapi:// -f /usr/local/etc/openldap/schema/nis.ldif

这假设您的运行slapd具有允许“对等凭据”身份验证的 ACL root。 如果这不起作用,您需要使用-D和提供适当的绑定 DN 和密码-W

在这种情况下,无需重新启动。

答案2

我最近在关注Ubuntu OpenLDAP 服务器教程。通过删除行中的所有尾随空格解决了该问题。

答案3

我通过删除file.ldif我想在 openldap 中加载的 来修复这个问题(例如:data.ldif),因为文本编辑器vi有时会因为错误或漏洞而插入不可见的字符,这会影响你的 ldif 文件。所以删除它并创建另一个,然后尝试逐个上传每个语句并使用命令检查ldapsearch -x -h nameofyourserver -b “dc=whateveris,dc=com”,再见,我希望可以帮到你。

答案4

我也遇到过同样的问题,但最终的错误是由于我创建的 ldif 格式文件中的尾行留有空格或制表符空格造成的。我删除这些空格后,组织单位就添加成功了,没有任何问题。

相关内容