[horde] LDAP configuration and hooks

David Wells dwells at alfavinil.com
Fri Dec 6 21:14:13 UTC 2019


El 30/11/2019 a las 10:08 a. m., Jens Wahnes escribió:
> David Wells wrote:
>> When I modify the hooks.local.php file so that it reads
>>
>>> <?php
>>> class Horde_Hooks
>>> {
>>>     public function prefs_init($pref, $value, $username, $scope_ob)
>>>     {
>>>         switch ($pref) {
>>>         case 'from_addr':
>>>
>>>             if (is_null($username)) {
>>>                 return $value;
>>>             }
>>>
>>>             $ldap = $GLOBALS['injector']->getInstance('Horde_Ldap');
>>>             try {
>>>                 $result = $ldap->search(
>>>                     $GLOBALS['conf']['ldap']['user']['basedn'],
>>> Horde_Ldap_Filter::create('userPrincipalName', 'equals', $username),
>>>                     array('attributes' => array('mail'))
>>>                 );
>>>                 if ($result->count()) {
>>>                     $entry = $result->shiftEntry();
>>>                     return $entry->getValue('mail', 'single');
>>>                 }
>>>             } catch (Horde_Ldap_Exception $e) {
>>>             }
> 
> I'm not sure if that can actually work.
> 
> Here's an excerpt of what we use inside Horde_Hooks that does the job:
> 
>      public function prefs_init($pref, $value, $username, $scope_ob)
>      {
>        // [...]
> 
>            $factory = 
> $GLOBALS['injector']->getInstance('Horde_Core_Factory_Ldap');
>            $ldap = $factory->create('horde', $factory->getConfig('auth'));
>            try {
>              $userdn = $ldap->findUserDN($username);
>              $user = $ldap->getEntry($userdn, array('mail','sn'));
>              $email = $user->getValue('mail', 'single');
>            } catch (Horde_Ldap_Exception $e) {
>              Horde::log("prefs_init: user $username: Error looking up 
> LDAP information", 'WARN');
>              Horde::log($e, 'WARN');
>              return $value;
>            } catch (Horde_Exception_NotFound $e) {
>              Horde::log("prefs_init: user $username: User not present in 
> LDAP", 'WARN');
>              Horde::log($e, 'WARN');
>              return $value;
>            }
> 
>       // [...]
>      }
> 
> 
> 
> For all I know, it doesn't matter if the file is named hooks.php or 
> hooks.local.php.
> 
> 
> Jens
Thank you very much for your reply!

Your code didn't work "as is" for me but it was a good starting point. I 
mixed a bit of your code with the hooks.php.dist sample and got it 
working. Here is the code that did the trick for future reference.
> $username = 'dwells at fliawells.com.ar';
> $factory = $GLOBALS['injector']->getInstance('Horde_Core_Factory_Ldap');
> $ldap = $factory->create('horde', $factory->getConfig('auth'));
> $result = $ldap->search($GLOBALS['conf']['ldap']['user']['basedn'], Horde_Ldap_Filter::create('userPrincipalName', 'equals', $username), array('attributes' => array('mail', 'cn')));
>     if ($result->count())
> 	{
>         $entry = $result->shiftEntry();
>         $mail = $entry->getValue('mail', 'single');
>         $fullname = $entry->getValue('cn', 'single');
> 	}
> print $mail;
> print $fullname;

The piece of code that just wasn't working is the findUserDN method 
which reported the following exception
> exception 'Horde_Exception_NotFound' with message 'Could not fetch entry userPrincipalName=dwells at fliawells.com.ar: no entry found' in /usr/lib64/php/Horde/Ldap.php:1080

If someone could help me figure out what could be wrong with this I 
would appreciate it but at least I can go on with this task.

Thank you very much again!
Best regards,
David Wells.



More information about the horde mailing list