[horde] Virtual domain support in H4/IMP5
Patrick Domack
patrickdk at patrickdk.com
Fri Apr 15 13:22:42 UTC 2011
Quoting Antoine Heskia <horde at heskia.net>:
> Hi,
>
> In my Horde3/IMP4, I used to have a custom hook function in the
> horde/imp/config/hooks.php to support multidomains that I am hosting.
> The user points its browser to mail.domain.com, the the login window
> displays "@domain.com" at the end of the username field and horde/imp
> provides username at domain.com to the IMAP server
> (qmail/vpopmail/courier-imap).
>
> This function looks like this:
> if (!function_exists('_imp_hook_vinfo')) {
> function _imp_hook_vinfo($type = 'username')
> {
> $vdomain = getenv('HTTP_HOST');
> $vdomain = preg_replace('|^(web)?mail\.|i', '', $vdomain);
> $vdomain = preg_replace('|^imp\.|i', '', $vdomain);
> $vdomain = String::lower($vdomain);
>
> if ($type == 'username') {
> if ($vdomain == '') {
> return $_SESSION['imp']['user'];
> } else {
> return (preg_replace('|@.*$|', '',
> $_SESSION['imp']['user']) . '@' . $vdomain);
> }
> } elseif ($type == 'vdomain') {
> return $vdomain;
> } else {
> return PEAR::raiseError('invalid type: ' . $type);
> }
> }
> }
>
> I did not find such a feature in Horde4/IMP5.
>
> I can not find a proper information in the documentation.
> for "The 'vinfo' hook has been removed. Use Horde's 'authusername'
> and/or IMP's
> 'preauthenticate' hooks instead."
>
> I have tried to play a bit with the hook public function
> authusername($userId, $toHorde) in horde/config/hooks.php
> but users still need to provide user at domain.com to logon (and they are
> recognized as user at domain.com@domain.com by horde) and the logon
> window does not displays "@domain.com" after the username field.
>
> Regarding
> "All hooks that are specific to IMP have been moved from the
> ``horde/config/hooks.php`` file. Move your existing IMP Hooks from there to
> ``imp/config/hooks.php``."
> this was already in imp/config/hooks.php in Horde3/IMP4. Should I
> copy/paste the code to Horde5/IMP4 ?
>
It seemed pretty easy to me:
public function preauthenticate($userId, $credentials)
{
if (strpos($userId,'@')===false) {
$vdomain = preg_replace('/^((web)?mail|imp)\./i', '',
$_SERVER['HTTP_HOST']);
$userId=Horde_String::lower($userId . '@' . $vdomain);
} else {
$userId=Horde_String::lower($userId);
}
return array(
'userId' => $userId
);
}
More information about the horde
mailing list