[Date Prev][Date Next] [Chronological] [Thread] [Top]

multiple attribute list need



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?