[horde] ActiveSync GAL setup help - search returns no contacts

Michael J Rubinsky mrubinsk at horde.org
Wed Feb 20 17:31:01 UTC 2013

Quoting James MacLean <macleajb at ednet.ns.ca>:

> On 02/20/2013 02:20 AM, Michael J Rubinsky wrote:
>> Quoting "James B. MacLean" <macleajb at ednet.ns.ca>:
>>> On 2013-02-07 2:06 AM, Michael J Rubinsky wrote:
>>>> Quoting "James B. MacLean" <macleajb at ednet.ns.ca>:
>>>>> So, no, I do not know if the LDAP server is being queried from  
>>>>> the GAL function properly and I would like to trace that back,  
>>>>> but, alas, my php skills for traversing where  
>>>>> this->_registry->contacts->search() goes is beyond my skill :(.
>>>>> Would you mind pointing out where that function is that is being  
>>>>> called and I will keep digging in to it.
>>>> This calls Turba_Api::search() (so, it's in turba/lib/Api.php).  
>>>> The actual logic for the search that is called from  
>>>> Turba_Api::search() is in a combination of Turba_Driver::search()  
>>>> (so, in turba/lib/Driver.php) and Turba_Driver_Ldap::_search()  
>>>> (in turba/lib/Driver/Ldap.php).
>>> Ok, getting somewhere now. When you search within Horde in the  
>>> "Global Address Book" the filter is :
>>> (|(givenname=Maclean, james)(sn=Maclean,  
>>> james)(|(displayname=*Maclean, james*)(mail=*Maclean, james*)))
>>> Which ties in well with the use of 'strict' settings in  
>>> turba/config/backends.local.php . When I do a search in  
>>> ActiveSync, it looks like :
>>> (&(givenname=Maclean)(sn=Maclean)(|(displayname=*Maclean*)(mail=*Maclean*))) which will never match for me. The AND appears to be coming from  
>>> :
>>> horde/turba/lib/Driver.php
>>> in
>>> public function makeSearch
>>> inside this if around line 460:
>>> if (count($strict_search) && count($search)) {
>>> changing that AND to OR gets things moving.
>> That doesn't seem like the right fix.
>> Can you see what the value of $query that is passed in to  
>> Horde/Core/ActiveSync/Driver.php in the _searchGal() method? I'm  
>> thinking I'm building that query incorrectly.
> Added :
> error_log("Q=" . print_r($query,true));
> Searching for Macle :
> Q=Array\n(\n    [query] => Macle\n    [range] => 0-50\n)\n

Ok. The query that is being build and passed to the LDAP specific  
search routine would be something like this simplified psuedo-ish  
search tree for me:

|     |
|     |---{owner_id == 'currentuser'}
       |---{firstname == '*bob*'}
       |---{lastname  == '*bob*'}
       |---{alias == '*bob*'}
       |---{email == '*bob*'}

So, in other words, at least one part of each [OR] must match for an  
entry to be included...so the [AND] *must* be included. Using an [OR]  
would end up returning EVERY entry in the source owned by  
'currentuser' since only one of the two sub OR conditions would need  
to me met.

I'm not an LDAP expert, so I can't comment on how  
Turba_Driver_Ldap::_search() translates this tree into ldap filter,  
but I would look there.

The Horde Project (www.horde.org)
mrubinsk at horde.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 6062 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://lists.horde.org/archives/horde/attachments/20130220/9be3baca/attachment.bin>

More information about the horde mailing list