Im Zuge der Wartung eines Webservers, sollten wir eine Roundcube Webmail Installation mit einem neuen Mailserver mit geändertem Hostname "verdrahten". Sollte mit einer kleinen Änderung in Roundcubes config.inc.php eigentlich getan sein:
$config['default_host'] = 'ssl://neuer.mailserver.tld';
Schien im ersten Moment damit auch erledigt. Aber nur bis sich die ersten Nutzer meldeten und erklärten, dass alle Adressbücher leer und Fusszeilen etc. verschwunden wären.
"Die Adressbücher sind doch in der Datenbank, wir haben aber nur eine Config geändert", war der erste Gedanke. Ein Blick in die Roundcube Datenbank erklärt das Problem: Es wird für jeden Mailserver Hostname ein neuer User erstellt, der seine "eigenen" Einstellungen und Adressbücher erhält.
mysql> explain users;
+----------------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+------------------+------+-----+---------------------+----------------+
| user_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(128) | NO | MUL | NULL | |
| mail_host | varchar(128) | NO | | NULL | |
| created | datetime | NO | | 1000-01-01 00:00:00 | |
| last_login | datetime | YES | | NULL | |
| language | varchar(5) | YES | | NULL | |
| preferences | longtext | YES | | NULL | |
| failed_login | datetime | YES | | NULL | |
| failed_login_counter | int(10) unsigned | YES | | NULL | |
+----------------------+------------------+------+-----+---------------------+----------------+
9 rows in set (0.00 sec)
Eine Query auf vermeintlich einen(!) User liefert pro Hostname des Mailservers einen Treffer.
mysql> select user_id, username, mail_host from users where username = 'user@domain.tld';
+---------+---------------------+---------------------+
| user_id | username | mail_host |
+---------+---------------------+---------------------+
| 79 | user@domain.tld | alter.mailserver.tld |
| 120 | user@domain.tld | localhost |
| 354 | user@domain.tld | neuer.mailserver.tld |
+---------+---------------------+---------------------+
3 rows in set (0.00 sec)
In unserem Fall war Roundcube bislang offenbar mit drei verschiedenen Mailservern verknüpft, somit drei unterschiedliche Benutzer. Ein User, der sich nach unserer Umstellung auf den Hostnamen des neuen Mailservers angemeldet hatte, konnte deshalb seine Settings und Kontakte nicht mehr finden. Er war "unter der Haube" ein neuer Benutzer mit leerem Adressbuch.
Die Lösung: Beim Ändern des Hostnames des Mailservers ($config['default_host'] in Roundcubes config.inc.php ) muss auch der neue Hostname in der Users Tabelle in der Roundcube Datenbank eingetragen werden. Eine Query könnte in diese Richtung formuliert sein:
update users set mail_host = 'neuer.hostname.tld' where mail_host = 'alter.hostname.tld';
Zum Abschluss noch ein kleiner Tipp von einem gebrannten Sysadmin: Vor dem Update der Users Tabelle abklären, dass durch die Änderung der Hostnames keine doppelten Benutzer mit identischen Hostnames in der Spalte mail_host entstehen ;-)
Gute Nacht!