#include <ldap.h> ldap_sort_entries(ld, chain, attr, cmp) LDAP *ld; LDAPMessage **chain; char *attr; int (*cmp)(); ldap_sort_values(ld, vals, cmp) LDAP *ld; char **vals; int (*cmp)(); ldap_sort_strcasecmp(a, b) char *a; char *b;
ldap_sort_values() is used to sort an array of values from an entry, as returned by ldap_get_values(3). It takes the LDAP connection structure ld, the array of values to sort vals, and cmp, the comparison function to use during the sort. Note that cmp will be passed a pointer to each element in the vals array, so if you pass the normal char ** for this parameter, cmp should take two char **'s as arguments (i.e., you cannot pass strcasecmp or its friends for cmp). You can, however, pass the function ldap_sort_strcasecmp() for this purpose.
LDAP *ld; LDAPMessage *res; /* * ... call to ldap_search_s(), fill in res, * retrieve sn attr ... */ /* now sort the entries on surname attribute */ if ( ldap_sort_entries( ld, &res, "sn", ldap_sort_strcasecmp ) != 0 ) ldap_perror( ld, "ldap_sort_entries" );
The ldap_sort_entries() routine applies the comparison function to each value of the attribute in the array as returned by a call to ldap_get_values(3), until a mismatch is found. This works fine for single-valued attributes, but may produce unexpected results for multi-valued attributes. When sorting by DN, the comparison function is applied to an exploded version of the DN, without types. The return values for all of these functions are declared in the <ldap.h> header file. Some routines may dynamically allocate memory. Callers are responsible for freeing such memory using the supplied deallocation routines.