Suite migration Seafile 12 à 13 sur Yunohost 13, avec en plus une migration récente de nom de domaine, les utilisateurs de Seafile ne voit plus leurs fichiers, les fichiers partagés, et les partages externes ne fonctionnent plus.
Souci :
La migration a fait que les utilisateurs se connectent avec un autre identifiant (du point de vue de Seafile).
On le constate en regardant dans la table MySQL seahubdb.profile_profile :
use seahubdb;
select * from profile_profile;
+----+------------------------------------------------+-------------+-------+-----------+----------+-------------------------------------+-------------+----------------------+-------------------------------+
| id | user | nickname | intro | lang_code | login_id | contact_email | institution | list_in_address_book | is_manually_set_contact_email |
+----+------------------------------------------------+-------------+-------+-----------+----------+-------------------------------------+-------------+----------------------+-------------------------------+
| 1 | user1@mon.domaineA.fr | | | NULL | NULL | NULL | | 0 | 0 |
| 2 | user2@mon.domaineA.fr | | | NULL | NULL | NULL | | 0 | 0 |
| 3 | user3@mon.domaineA.fr | | | NULL | NULL | NULL | | 0 | 0 |
| 4 | user4@domaineB.fr | | | NULL | NULL | NULL | | 0 | 0 |
| 5 | user5@domaineB.fr | | | NULL | NULL | NULL | | 0 | 0 |
| 6 | user6@domaineB.fr | | | NULL | NULL | NULL | | 0 | 0 |
| 7 | user7@domaineB.fr | | | NULL | NULL | NULL | | 0 | 0 |
| 8 | 2dc612f5xxxxxxxxxxx070130478969d@auth.local | user1 | | NULL | NULL | user1@domaineB.fr | | 0 | 0 |
| 9 | d6b0179xxxxxxx659248ef76e5fa47d2@auth.local | user7 | | NULL | NULL | NULL | | 0 | 0 |
| 10 | 35xxxxxxxxxxxxxxxx996f0c73782141@auth.local | user3 | | NULL | NULL | user3@domaineB.fr | | 0 | 0 |
| 11 | fb1f79924d96466daxxxxxxxxx3d4106@auth.local | user2 | | NULL | NULL | user2@domaineB.fr | | 0 | 0 |
| 12 | 4eexxxxxxxxxxxxxxxxxxc90b3d806ce@auth.local | user4 | | NULL | NULL | user4@domaineB.fr | | 0 | 0 |
+----+------------------------------------------------+------------------+-------+-----------+----------+----------------------------------------------+-------------+----------------------+-------------------------------+
12 rows in set (0.000 sec)
On peut voir 3 types d’utilisateurs :
– user1@mon.domaineA.fr
– user1@domaineB.fr
– 2dc612f5xxxxxxxxxxx070130478969d@auth.local
Les 3 utilisateurs dans ce cas sont les mêmes, mais authentifiés différemment, ce qui perturbe Seafile.
Solution :
Pour récupérer l’accès aux fichiers, il faut mettre à jour les tables RepoOwner, SharedRepo, RepoUserToken, RepoGroup et share_fileshare.
Les requêtes de mise à jour ressemblent à cela.
Il faut, à partir de la table seahubdb.profile_profile déterminer les correspondances entre les 3 identifiants pour ne laisser en BDD que la 3ème version en @auth.local. Et cela pour tous les utilisateurs. Exemple ici pour user1.
use seafile;
UPDATE RepoOwner
SET owner_id='2dc612f5xxxxxxxxxxx070130478969d@auth.local'
WHERE owner_id IN ('user1@domaineB.fr','user1@mon.domaineA.fr');
UPDATE SharedRepo
SET from_email='2dc612f5xxxxxxxxxxx070130478969d@auth.local'
WHERE from_email IN ('user1@domaineB.fr','user1@mon.domaineA.fr');
UPDATE SharedRepo
SET to_email='2dc612f5xxxxxxxxxxx070130478969d@auth.local'
WHERE to_email IN ('user1@domaineB.fr','user1@mon.domaineA.fr');
UPDATE RepoUserToken
SET email='2dc612f5xxxxxxxxxxx070130478969d@auth.local'
WHERE email IN ('user1@domaineB.fr','user1@mon.domaineA.fr');
UPDATE RepoGroup
SET user_name='2dc612f5xxxxxxxxxxx070130478969d@auth.local'
WHERE user_name IN ('user1@domaineB.fr','user1@mon.domaineA.fr');
UPDATE share_fileshare
SET username='2dc612f5xxxxxxxxxxx070130478969d@auth.local'
WHERE username IN ('user1@domaineB.fr','user1@mon.domaineA.fr');
Pas besoin de nettoyer la table seahubdb.profile_profile, même si à mon avis les entrées obsolètes ne serviront plus.
A priori la modification est prise à chaud, pas besoin de redémarrage.
En complément, et je doute que cela ait aidé, mais j’ai modifié le fichier de conf seafile :
/var/www/seafile/conf/seahub_settings.py
#LDAP_ADMIN_DN = ''
#LDAP_ADMIN_PASSWORD = ''
LDAP_USER_ATTR_EMAIL = 'mail'
Un redémarrage des services seafile semble nécessaire après modification :
systemctl restart seafile.service seahub.service
