There is an application that needs to display multiple lists of people with their email address. The number of lists and the content of the lists we would like to leave configurable in LDAP. So, we set up a few dynamic lists in LDAP, put them into a 'groupOfUniqueNames' object which the application retrieved, and then in turn queried the dynamic lists to obtain the contents of the lists. We ran into three challenges: First, since dynamic lists follow the schema definition rules it could not return multiple values for the attribute 'displayName' so we configured it for 'givenName' instead. Second, it returned the results grouped by email address and names instead of pairs of data so we walked through all the email addresses and then the names while confirming the counts were the same and assuming that they were in the same order. Third, if an email address or name was missing then the manual pairing of data would be incorrect so we put in a filter that ensures only members with both pieces of data were included. Ideally we would like to retrieve pairs of full names and email addresses. The following does provide the information to us in the preferred format:
ldapsearch -a never -h xxx.xxx.xxx.xxx -b "ou=people,dc=example,dc=com" -x (&(&(departmentNumber=other)(mail=*))(displayName=*))" displayName mail
# extended LDIF # # LDAPv3 # base <ou=people,dc=example,dc=com> with scope subtree # filter: (&(&(departmentNumber=other)(mail=*))(displayName=*)) # requesting: displayName mail #
# root, people, example.com dn: uid=root,ou=people,dc=example,dc=com mail: root@example.com displayName: root
# nobody, people, example.com dn: uid=nobody,ou=people,dc=example,dc=com displayName: nobody mail: nobody@example.com
# jsmith, people, example.com dn: uid=jsmith,ou=people,dc=example,dc=com mail: jsmith@example.com displayName: John Smith
# search result search: 2 result: 0 Success
# numResponses: 4 # numEntries: 3
An equivalent is the following which is set up as a 'memberURL' attribute of a 'groupOfURLs' object with the exception of 'givenName' instead of 'displayName' because of dynamic list adherence to schema definitions: ldap:///ou=people,dc=example,dc=com?mail,givenName?sub?(&(&(departmentNumber =other)(mail=*))(givenName=*))
ldapsearch -a never -h xxx.xxx.xxx.xxx -b "cn=other,ou=lists,dc=example,dc=com" -x
# extended LDIF # # LDAPv3 # base <cn=other,ou=lists,dc=example,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL #
# other, lists, example.com dn: cn=other,ou=lists,dc=example,dc=com cn: other objectClass: groupOfURLs objectClass: top memberURL: ldap:///ou=people,dc=example,dc=com?mail,givenName?sub?(&(&(departmentNumber =other)(mail=*))(givenName=*)) mail: root@example.com mail: nobody@example.com mail: jsmith@example.com givenName: root givenName: nobody givenName: John Smith member: uid=root,ou=people,dc=example,dc=com member: uid=nobody,ou=people,dc=example,dc=com member: uid=jsmith,ou=people,dc=example,dc=com
# search result search: 2 result: 0 Success
# numResponses: 2 # numEntries: 1
Is there a way to accomplish what the regular search returns using openldap features?