6.0.0-git
2024-05-14

Diff for ImpH4Realm between 1 and 2

In Horde3 with IMP4, the IMAP server configuration in imp/config/servers.php had a 'realm' parameter:

<code><code type="php">
$servers['imap'] = array(
    'name' => 'IMAP Server',
    'server' => 'imap.example.com',
    'hordeauth' => false,
    'protocol' => 'imap/notls',
    'port' => 143,
    'maildomain' => 'example.com',
    'smtphost' => 'smtp.example.com',
    'smtpport' => 25,
    'realm' => 'example.com',
    'preferred' => '',
);
</code>

The purpose of the realm parameter is to append a realm/domain to the Horde username after login.  For example, a user that logged into the server 'imap' from above with a username 'john' would have their Horde username set to 'john@example.com'.  This is useful if you are supporting multiple IMAP servers with a single Horde installation and the usernames in each IMAP server may overlap ('john' at server1 and 'john' at server2 are not the same person).

Horde4 with IMP5 does not have a native 'realm' parameter in imp/config/backends.local.php, but you can replicate the same functionality by modifying the horde 'authusername' hook.  In horde/config/hooks.php:

<code>
     public<code type="php">
public function authusername($userId, $toHorde)
     {
        if
{
    if ($toHorde) {
                //
        // Get the IMAP connection object
                $imap =
        $imap = $GLOBALS['injector']->getInstance('IMP_Factory_Imap')->create();
                //
        // Get the IMAP hostname
                $hostspec =hostname
        $hostspec = $imap->ob->getParam('hostspec');
                //
        // Load the backends.local.php server configs
                $servers
        $servers = IMP_Imap::loadServerConfig();
                //
        // Look through each server for a hostname match
                foreach
        foreach ($servers as $server) {
                        if
            if ($server['hostspec'] == $hostspec) {
                                //{
                // Append the 'realm' parameter
                                $userId
                $userId = $userId . '@' . $server['realm'];
                                break;
                        }
                }
                return $userId;
        } else {
                // strip the domain off
                $userId = substr($userId, 0, strpos($userId, '@'));
                return $userId;
                break;
            }
        }
        return $userId;
    } else {
        // strip the domain off
        $userId = substr($userId, 0, strpos($userId, '@'));
        return $userId;
    }
}
</code>

Here is an example IMAP server config from imp/config/backends.local.php:

<code><code type="php">
$servers['imap'] = array(
    // ENABLED by default
    'disabled' => false,
    'name' => 'IMAP Server',
    'hostspec' => 'localhost',
    'hordeauth' => false,
    'protocol' => 'imap',
    'port' => 143,
    'secure' => 'tls',
    'maildomain' => 'example.com',
    'cache' => false,
    'realm' => 'example.com',
);
</code>

Note the non-standard 'realm' parameter which is used by the authusername hook later.