Description
Re2o est l'outils de gestion du réseau utilisé au Crans.
Il est développé par plusieurs associations de Federez, le dépôt principal est ici. Les serveurs crans pull depuis un dépot sur notre gitlab, qui à vocation à être uniquement un miroir et à ne pas servir au dev. On est pas branché directement sur le dépôt federez pour ne pas être dépendant d'eux, et pour des raisons de sécurité (les dépots sont auto pullé régulièrement).
Qu'est ce que c'est ?
C'est une application Django, qui gère toute la BDD. On peut découper le système en plusieurs partie:
la bdd postgres, sur thot
- Le serveur re2o, qui tourne via apache
- Un serveur ldap, dont les infos sont exporté par django grâce à django-ldapdb
des services clients, qui se connecte via une API rest pour récupérer les infos pertinentes, cf les dépots git divers
Comment ça marche
On trouve des infos générique sur le wiki re2o.
Détails Cranseux
Même si on essaye de faire le plus agnostique et indépendant des spécificités du Crans, y a quelques fois des problèmes spécifiques.
Mot de passe
Dans l'ancienne base, on vait plusieur type de mot de passe, dont les formats peuvent être parmis:
{SSHA}mVL66OPbX3/3x2cBMxcqZvD/GTjurZDt {crypt}$1$LJgKu7e6$eNGbVZvS7HpwBuFHIsfuA1 {crypt}KkF/pf0w8TlCE {SMD5}p5AZuAUEG3cWOQUj3cS101fgsh0=
Tout ces formats de hash sont pourris, il faut lancer une migration. Le problème, c'est qu'il faut prévenir les gens longtemps à l'avance, et faire l'opération tranquillement. Une option est de faire une transition smooth, où à chaque fois qu'un user se log, on en profite pour upgrade son algo de chiffrement.
Lors de la migration, on a fait en sorte de migrer tous les formats, et il a donc fallu que re2o supporte tous les formats. L'un des problèmes est que nos mot de passe sont de la forme hash(sel+pass), alors que django par défault fait du hash(pass+sel}. Il a donc fallu recoder des hasher dajngo pour supporter nos formats. Cf re2o/re2o/login.py pour les hasher. Dans la base django, les mot de passe doivent être de la forme :
{SSHA}$mVL66OPbX3/3x2cBMxcqZvD/GTjurZDt {crypt}$1$LJgKu7e6$eNGbVZvS7HpwBuFHIsfuA1 {crypt}$KkF/pf0w8TlCE {SMD5}$p5AZuAUEG3cWOQUj3cS101fgsh0=
On a donc rajouté un $ à l'import quand c'était nécéssaire. Maintenant, il faut refaire l'opération inverser pour export vers la base ldap, donc retiré le $ en trop quand il le faut, pour ça en se base sur la longueur du hash pour redétecter le cas du {crypt}$KkF/pf0w8TlCE, cf ldap_sync dans re2o/users/models.py