Re: ldap_search sort extension, patch included

From: Date: Sun, 18 Nov 2001 12:27:18 +0000
Subject: Re: ldap_search sort extension, patch included
References: 1 2 3 4  Groups: php.dev php.general 
Request: Send a blank email to php-dev+get-70791@lists.php.net to get a copy of this message
Stig Venaas wrote:
> 
> On Sat, Nov 17, 2001 at 11:22:21PM +0100, Andre Oppermann wrote:
> > Stig Venaas wrote:
> > > In what LDAP APIs are ldap_sort_entries defined? What lib/API are you
> > > using? I wonder how well this works, sorting all kinds of Unicode is
> > > more or less impossible, but if some APIs have this function...
> >
> > This function is supported by OpenLDAP 1.x/2.x, UMICH and Netscape
> > SDK as well.
> 
> Ah, okay, didn't know, maybe because it isn't mentioned in the specs.
> I'm much more positive then.

It's not in the LDAP API RFC but universally supported.

> > Unicode is no problem because you can specify your own comparsion
> > function callback (the last parameter "strcmpncase").
> 
> Yes, I realized after my post. But isn't this a problem for us? We might
> have to allow for people to define their own PHP callback function. I
> could fix that, if that's what we want. We could add that as an optional
> parameter later perhaps. The way UTF-8 behaves, I guess sorting order is
> the same before and after decoding, if not, this function doesn't make
> much sense (except when ascii-only being used). You have experiences with
> German umlauts perhaps? But for simple things like Norwegian (and I know
> others), the special character values are not in alphabetical order, so
> this function isn't going to do the job perfectly, a userdefined function
> might.

Defining a PHP callback funtion is probably too complex. But having
different options for sort algorithms would useful:

 LDAP_SORT_ASCII, strncasecmp, default
 LDAP_SORT_ASCII_CASE, strcmp
 LDAP_SORT_UTF8, ???
 LDAP_SORT_UNICODE, ???
 ...

The function would look like this:

 (PHP_)ldap_search($ld, $res, "c, city", LDAP_SORT_ASCII);

> > > I was also thinking of adding support for server side sorting. I'm
> > The problem with server side sorting is that it is a LDAPv3 only
> > function and there is no requirement that LDAP server implements
> > this.
> 
> Yes, and if you want all entries, it makes more sense to do it in the
> client.

Yes.

> > > thinking of a different PHP API, so that we don't need to add even
> > > more parameters to ldap_search(). Adding parameters to ldap_search()
> >
> > I added it only to ldap_search() because only there I have access to
> > the full LDAPMessage chain. The function needs **ldap_res, not just
> > the *ldap_res that is delivered by that internal function in PHP.
> >
> > > that only are valid with some APIs is bad I think. What I have in
> > > mind is something like:
> >
> > ldap_search is valid with basically every ldap lib out there.
> 
> I meant parameters that are only valid in some APIs, of course
> ldap_search is.

Sorry, braino, should have been ldap_sort is valid with basically every
ldap lib out there.

> > > ldap_sort($ld, $sortfilter);
> > > ldap_search($ld,...); (as usual)
> > >
> > > where the filter is used for all following searches, until a new filter
> > > is defined. Empty filter could turn it off.
> >
> > Until now the right thing to do (see ldapsearch tool in OpenLDAP/UMICH)
> > to do this:
> >
> >  ldap_search($ld,...);
> >  ldap_sort($ld, $res, $sortlist, [OPT_UNICODE | WHATEVER]);
> 
> What I wrote with ldap_sort() and ldap_search() was PHP code. I suggest

I wrote PHP code as well ;)

> we write a separate ldap_sort() that works this way. ldap_sort() can
> then store stuff in the PHP link structure. Inside PHP's ldap_search()
> function, we then check for this after we've done the search. So it
> will be very much like your code, except that instead of an extra
> parameter for PHP's ldap_search(), we use a separate ldap_sort() to set
> it. We can then also add advanced features like user defined callback
> more easily.
> 
> > Well, there no problem in providing both API. The ldap_sort() call is
> > useable today with all ldap libs and with any LDAP server. Server side
> > sorting is nice if you have LDAPv3 and your server supports it.
> 
> Of course server side sorting also has the ordering issues I mentioned
> above. It's mostly impossible to write server side sorting that always
> sorts things the right way. Language tags might help. Well, forget this.
> 
> I'll add some code for this in a few days, then you can comment on what
> I've done. Not that I mind discussing this (:

Ok, lets see what you come up with. :)

-- 
Andre


Thread (11 messages)

« previous php.dev (#70791) next »