imapsync en tant qu'admin

Bonjour,

Je suis en train de tester BlueMind en tant que possible remplacement de notre messagerie actuelle (Cyrus IMAP + RoundCube).
Je rencontre un problème lors de mes tests de méthodes de migrations avec l’outil imapsync (version 1.607).

Sur le serveur source, je m’authentifie en tant que l’utilisateur cyrus qui est l’admin.
Sur le serveur destination (BlueMind), je m’authentifie en tant que l’utilisateur admin0.

cela donne une commande du type:

$IMAPSYNC --justfolders --tls1 --authmech1 PLAIN --host1 $SERVER1 --authuser1 $AUTHUSER1 --user1 "$u1" --password1 "$p1" --tls2 --authmech2 PLAIN --host2 $SERVER2 --authuser2 $AUTHUSER2 --user2 "$u2" --password2 "$p2"

le serveur source ($SERVER1) n’utilise pas le virtual hosting. Le nom d’utilisateur est donc un simple identifiant ($u1)
Sur le serveur BlueMind ($SERVER2), $authuser2 vaut ‘admin0’, $u2 vaut le même nom d’utilisateur que $u1 mais qualifié avec le nom de domaine complet.
Tous les utilisateurs existent déjà sur le serveur BlueMind et sont synchronisés via LDAP.

Le problème est qu’avec ces paramètres, BlueMind essaie de créer les dossiers destination au mauvais endroit. Ci-dessous un extrait du log:

/root/scripts/migration_univ-lr.fr/imapsync/imapsync --justfolders --tls1 --authmech1 PLAIN --host1 mail.univ-lr.fr --authuser1 cyrus --user1 arodrigu --password1 MASKED --tls2 --authmech2 PLAIN --host2 bm3.univ-lr.fr --authuser2 admin0 --user2 arodrigu@univ-lr.fr --password2 MASKED
Temp directory is /tmp
PID file is /tmp/imapsync.pid
Modules version list:
Mail::IMAPClient     3.35
IO::Socket           1.31
IO::Socket::IP       0.33
IO::Socket::INET     1.31
IO::Socket::SSL      1.31
Net::SSLeay          1.35
Digest::MD5          2.53
Digest::HMAC_MD5     1.01
Digest::HMAC_SHA1    1.03
Term::ReadKey        2.32
Authen::NTLM         1.09
File::Spec           3.3
Time::HiRes          1.9726
URI::Escape          3.31
Data::Uniqid         0.12
Unicode::String      2.09

Info: turned ON syncinternaldates, will set the internal dates (arrival dates) on host2 same as host1.
Info: will try to use PLAIN authentication on host1
Info: will try to use PLAIN authentication on host2
Info: imap connexions timeout is 120 seconds
Host1: IMAP server [mail.univ-lr.fr] port [143] user [arodrigu]
Host2: IMAP server [bm3.univ-lr.fr] port [143] user [arodrigu@univ-lr.fr]
Host1: * OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE STARTTLS LOGINDISABLED] mail.univ-lr.fr server ready
Host1: mail.univ-lr.fr says it has CAPABILITY for AUTHENTICATE PLAIN
Host1: success login on [mail.univ-lr.fr] with user [arodrigu] auth [PLAIN]
Host2: * OK IMAP4 ready
Host2: bm3.univ-lr.fr says it has CAPABILITY for AUTHENTICATE PLAIN
Host2: success login on [bm3.univ-lr.fr] with user [arodrigu@univ-lr.fr] auth [PLAIN]
Host1: state Authenticated
Host2: state Authenticated
Host1 capability: IMAP4rev1 LITERAL+ ID ENABLE ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY CATENATE CONDSTORE ESEARCH SORT SORT=MODSEQ SORT=DISPLAY THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE LIST-EXTENDED WITHIN QRESYNC SCAN XLIST URLAUTH URLAUTH=BINARY LOGINDISABLED COMPRESS=DEFLATE IDLE
Host2 capability: IMAP4rev1 ID ENABLE ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY CATENATE CONDSTORE ESEARCH SORT SORT=MODSEQ SORT=DISPLAY THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE LIST-EXTENDED WITHIN QRESYNC SCAN XLIST URLAUTH URLAUTH=BINARY AUTH=PLAIN SASL-IR IDLE STARTTLS
Host1: separator given by NAMESPACE: .]
Host2: separator given by NAMESPACE: /]
Host1: prefix given by NAMESPACE: ]
Host2: prefix given by NAMESPACE: [user/]
Host1 separator and prefix: .]]
Host2 separator and prefix: /][user/]

La liste des dossiers IMAP sources est correcte.
En revanche, comme admin0 a accès à tout, il m’affiche la liste complète des dossiers IMAP du serveur BlueMind

Ensuite chaque création de dossier destination échoue car le namespace n’est pas bon. Exemple:

++++ Looping on each folder
...
[Compteurs imprimantes]             -> [user/Compteurs imprimantes]       
Host2 folder user/Compteurs imprimantes: Could not select: 77 NO Permission denied
Creating folder [user/Compteurs imprimantes] on host2
Creating folder [user] on host2
Could not create folder [user] from [Compteurs imprimantes]: 79 NO Invalid mailbox name
Could not create folder [user/Compteurs imprimantes] from [Compteurs imprimantes]: 81 NO Mailbox already exists

Lorsque je n’utilise pas le compte admin0 et que je m’authentifie en tant que le user destination sur le serveur BlueMind, pas de soucis:

/root/scripts/migration_univ-lr.fr/imapsync/imapsync --justfolders --tls1 --authmech1 PLAIN --host1 mail.univ-lr.fr --user1 arodrigu --password1 MASKED --tls2 --authmech2 PLAIN --host2 bm3.univ-lr.fr --user2 arodrigu@univ-lr.fr --password2 MASKED
Temp directory is /tmp
PID file is /tmp/imapsync.pid
Modules version list:
Mail::IMAPClient     3.35
IO::Socket           1.31
IO::Socket::IP       0.33
IO::Socket::INET     1.31
IO::Socket::SSL      1.31
Net::SSLeay          1.35
Digest::MD5          2.53
Digest::HMAC_MD5     1.01
Digest::HMAC_SHA1    1.03
Term::ReadKey        2.32
Authen::NTLM         1.09
File::Spec           3.3
Time::HiRes          1.9726
URI::Escape          3.31
Data::Uniqid         0.12
Unicode::String      2.09

Info: turned ON syncinternaldates, will set the internal dates (arrival dates) on host2 same as host1.
Info: will try to use PLAIN authentication on host1
Info: will try to use PLAIN authentication on host2
Info: imap connexions timeout is 120 seconds
Host1: IMAP server [mail.univ-lr.fr] port [143] user [arodrigu]
Host2: IMAP server [bm3.univ-lr.fr] port [143] user [arodrigu@univ-lr.fr]
Host1: * OK [CAPABILITY IMAP4rev1 LITERAL+ ID ENABLE STARTTLS LOGINDISABLED] mail.univ-lr.fr server ready
Host1: mail.univ-lr.fr says it has CAPABILITY for AUTHENTICATE PLAIN
Host1: success login on [mail.univ-lr.fr] with user [arodrigu] auth [PLAIN]
Host2: * OK IMAP4 ready
Host2: bm3.univ-lr.fr says it has CAPABILITY for AUTHENTICATE PLAIN
Host2: success login on [bm3.univ-lr.fr] with user [arodrigu@univ-lr.fr] auth [PLAIN]
Host1: state Authenticated
Host2: state Authenticated
Host1 capability: IMAP4rev1 LITERAL+ ID ENABLE ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY CATENATE CONDSTORE ESEARCH SORT SORT=MODSEQ SORT=DISPLAY THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE LIST-EXTENDED WITHIN QRESYNC SCAN XLIST URLAUTH URLAUTH=BINARY LOGINDISABLED COMPRESS=DEFLATE IDLE
Host2 capability: IMAP4rev1 ID ENABLE ACL RIGHTS=kxte QUOTA MAILBOX-REFERRALS NAMESPACE UIDPLUS NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY CATENATE CONDSTORE ESEARCH SORT SORT=MODSEQ SORT=DISPLAY THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE LIST-EXTENDED WITHIN QRESYNC SCAN XLIST URLAUTH URLAUTH=BINARY AUTH=PLAIN SASL-IR IDLE STARTTLS
Host1: separator given by NAMESPACE: .]
Host2: separator given by NAMESPACE: /]
Host1: prefix given by NAMESPACE: ]
Host2: prefix given by NAMESPACE: ]
Host1 separator and prefix: .]]
Host2 separator and prefix: /]]
...
++++ Looping on each folder
...
[Compteurs imprimantes]             -> [Compteurs imprimantes]            
Creating folder [Compteurs imprimantes] on host2
Created  folder [Compteurs imprimantes] on host2
Subscribing to folder Compteurs imprimantes on destination server

J’ai essayé de forcer le prefix avec la valeur ‘user/$username/’ mais sans succès. La boite n’est jamais créée au bon endroit.

J’ai trouvé une alternative en générant une clé d’API spécifique ‘imapsync’ pour chaque utilisateur et en l’utilisant pour m’authentifier en tant que l’utilisateur destination sur le serveur BlueMind, mais bof …

Si vous avez une idée ?

Merci

Alban

Plutôt que de prendre l’admin global de la plate-forme, essayez avec bmhiddensysadmin.
(voir ce ticket : http://forum.blue-mind.net/viewtopic.php?id=356))]

Pierre

Merci Pierre.
Quelle est la méthode pour créer une clé d’API pour le user bmhiddensysadmin puisqu’il n’apparaît pas dans l’interface ?

Merci
Alban

Bonjour,

Avez-vous essayé d’utiliser l’option --prefix2 ?
Vous pouvez également réaliser des tests avec l’option --dry. Je vous renvoie à la documentation de ces options que je vous recopie ici :

–dry : Makes imapsync doing nothing, just print what would
be done without --dry.
–prefix1 : Remove prefix to all destination folders
(usually INBOX. or INBOX/ or an empty string “”)
you have to use --prefix1 if host1 imap server
does not have NAMESPACE capability, all other
cases are bad.
–prefix2 : Add prefix to all host2 folders. See --prefix1
–sep1 : Host1 separator in case NAMESPACE is not supported.
–sep2 : Host2 separator in case NAMESPACE is not supported.

Bonjour Guillaume,

Oui j’avais essayé plusieurs variantes avec l’option --prefix2, notamment ‘user/$u2’ ou ‘user/$u2@univ-lr.fr’, $u2 étant le user destination sur le serveur BM.
Le problème, c’est que du fait du virtual domain, il y a aussi un suffixe pour le domaine, mais il n’existe aucune option imapsync pour indiquer un suffixe
Par exemple:
user/arodrigu/Drafts@univ-lr.fr

J’avais essayé de renseigner un domaine par défaut dans bm.ini mais cela n’a pas d’incidence visiblement.
Il existe également une option defaultdomain dans /etc/imapd.conf mais c’était pire (échec de l’authentification)

Quelle valeurs préconisez-vous pour les options ?

J’utilises l’option --justfolders car je n’ai aucune erreur avec --dry tant qu’imapsync n’essaie pas de créer les dossier destination.

Avez-vous un piste pour créer une clé d’API pour le user bmhiddensysadmin comme suggéré par pierrec ?

Merci pour votre aide

Alban

Pour --prefix2 je pensais plus à remplir cette option avec une chaîne vide “”

De même plutôt que d’utiliser admin0 ou un utilisateur système caché, créez un utilisateur de migration créé spécifiquement pour l’occasion et à qui vous donnez les droits d’écritures sur toutes les boîtes à migrer.
Ceci devrait résoudre le problème sans pour autant nécessiter de passer par les API.

Merci Guillaume,

je viens de tester cette technique et cela fonctionne effectivement:

1- création d’un user admimap. Cet utilisateur est connu du LDAP pour éviter que la synchro BM ne le désactive à chaque exécution. A la synchro suivante, le compte est donc importé dans BM dans le domaine à migrer

2- connexion en tant qu’admin0 avec cyradm. Donner tous les droit sur les boites du user toto@univ-lr.fr au user admimap@univ-lr.fr

cyradm -u admin0 localhost
localhost> sam user/toto*@univ-lr.fr admimap@univ-lr.fr all
...
exit

3- synchro avec imapsync

imapsync --tls1 --authmech1 PLAIN --host1 serveur1.univ-lr.fr --authuser1 cyrus --user1 toto --password1 "pwd user cyrus" --tls2 --authmech2 PLAIN --host2 serveur2 --authuser2 admimap@univ-lr.fr --user2 toto@univ-lr.fr --password2 "pwd user admimap" --prefix2="Autres utilisateurs/toto/"

Alban

Il semble également qu’il faille ajouter

--regextrans2 "s/\/INBOX//"

dans notre cas, de façon que les messages de la boite de réception source apparaissant en tant que ‘INBOX’ soient synchronisés dans la boite de réception du user BM, soit user/toto@univ-lr.fr et non user/toto/INBOX@univ-lr.fr

Alban

Par contre, problème: l’état lu/non lu n’est pas préservé lors de la synchro :frowning:

Peut-être parce que le user admimap n’est pas connu en tant qu’admin pour imapd ? Mais si je le rajoute à la liste ‘admins’ dans /etc/imapd.conf, je ne peux plus m’authentifier :frowning:

Je me suis demandé s’il ne fallait pas activer le shared seen au niveau de Cyrus IMAP de façon que l’état lu/non lu soit également le même pour l’utilisateur à synchroniser mais ça ne fonctionne pas:

localhost> mboxconfig user/toto@univ-lr.fr sharedseen true
mboxconfig: Remote does not support ANNOTATEMORE.

Concernant le message “Remote does not support ANNOTATEMORE”, cela vient du fait qu’il y a un proxy avant cyrus-imap.

Pour pouvoir mettre en place cette configuration, il faut se connecter ainsi :
cyradm --user admin0 --port 1143 localhost

Cela vous permettra de mettre en place cette configuration imap.