没有从OpenLDAP返回的根DSE

我试图在ubuntu 9.10上使用slapd版本2.4.18来设置一个OpenLDAP服务器。

初始化并填充新的hdb数据库后,一切似乎都没问题,但我无法让服务器返回根DSE。 运行

ldapsearch -x -W -D 'cn=manager,dc=example,dc=org' \ -b '' -s base '(objectclass=*)' + 

只是返回

 # extended LDIF # # LDAPv3 # base <> with scope baseObject # filter: (objectclass=*) # requesting: + # # search result search: 2 result: 0 Success # numResponses: 1 

我的hdb数据库ACL设置如下:

 olcAccess: to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn.base="cn=manager,dc=example,dc=org" write by * none olcAccess: to dn.base="" by * read olcAccess: to * by self write by dn.base="cn=manager,dc=example,dc=org" write by * read 

根据我的经验,这个设置应该返回一个有效的根DSE,所以如果任何人都可以给我一个线索,知道怎么回事…

这实际上是作为bug #427842再次提交Ubuntu 9.10(karmic)。

要解决此问题,请将以下内容复制到fixRootDSE.ldif:

 dn: olcDatabase={-1}frontend,cn=config changetype: modify add: olcAccess olcAccess: to dn.base="" by * read olcAccess: to dn.base="cn=subschema" by * read 

并执行

 sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f fixRootDSE.ldif 

这应该给匿名访问根DSE。

在根据用户进行绑定之前,是不是应该匿名查询Root DSE? 所以你不应该使用-W或-D。

我的OpenLDAP服务器响应以下内容:

 $ ldapsearch -x -b '' -s base 

 # extended LDIF # # LDAPv3 # base <> with scope baseObject # filter: (objectclass=*) # requesting: ALL # # dn: objectClass: top objectClass: OpenLDAProotDSE # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 

对于那些将在Apache Directory Studio中出现此错误的人员。

如果您可以在其他浏览器或ldapsearch中看到根DSE内容,请尝试创build新的连接。 它帮助了我。 我认为这是Apache DS中的一个错误。