Elle s'appelle history_gen.
Il faut l'appeler explicitement pour le moment, pour éviter de mettre des lignes
en double vu que jusqu'à maintenant, historique était fait à la main.
Il y a 4 niveaux d'historique pour les attributs :
* full on loggue toutes les modifications
pour un singlevalue : nom (Durant -> Dupond")
pour les autres : mailAlias+toto@free.fr-titi@orange.com
* partial, comme full sauf qu'on limite la longeur de chaque valeur d'attribut
à au plus 15 caractères
* info, on signalute juste que l'attribut attribut a été créer, supprimer ou modifier:
* None, on n'ajoute pas de ligne (par exemple pour l'historique lui même, on le loggue pas
ses modifications)
Ajoutez en d'autre si vous pensez à des trucs cools
On vérifier que l'objet de la base ldap n'avait pas été modifier entre le moment
où on l'a récupéré etle moment où on acquière le lock. Bien sûr si l'objet n'existe pas
dans la base ldap, il n'y a pas de problème.
Dans le cas où on ressucieterai un objet qui existe déjà dans la base ldap,
ça planterait sans doute. M'enfin, ce cas doit être extrèmement rare compte tenu
du fait que les aid et mid sont croissant (mais hélas, pas strictement).
* self._modifs = self.attrs met les deux AttrsDict dans le même état,
ce qui fait qu'une modif de l'un se répercute sur l'autre.
* On en profite pour créer une fonction .cancel
L'idée étant d'essayer d'avoir un fonction 'crediter' qui va éditier le solde de sont parent
puis sauvegarder/creer la facture de la fonçon la plus atomique possible.
Il faudarait voir s'il y a quelque chose de plus propre pour rendre tout ça un peu plus
atomique
La méthode est apprlé dès que attrs et _modis sont instancié et avant les vérifications
sur la correction des attributs.
Cela permet d'utiliser des objet "Auxilière" dans ldap plus facilement.
On peut générer/ajouter des clefs privées via gest_crans_lc. Elles sont forcément chiffré avec une
passphrase. Pour les machines crans, elle est dans /etc/crans/secrets. Pour les autres machines
elle n'est pas connue du crans et demandée à l'utilisateur lorsqu'il y a besoin de la clef privée
pour des opérations.
Du coup, on peut générer des csr automatiquement dans gest_crans_lc, ça m'a l'air bien pratique,
ça évite d'oublier des subjectAltName par exemple quand on renouvel le certificat comme les
nom du certificat sont également dans ldap.
On peut aussi, juste avec une requête ldap voir quels sont les certificats qui vont bientôt
expirer (&(objectClass=x509Cert)(end<int(time.time())+delai)).
Je pense particulièrement à chambre qui est unique sauf pour ???? et EXT
On en a besoin pour détecter, quand on affecte quelqu'un a une chambre, que
la chambre est déjà occupée
D'une façon général, on s'assure que tous les locks concernant un cransLdapObject
sont bien mis avec l'identifiant de lock cransLdapObject.lockId.
Avant d'entrer dans le context manager du cransLdapObject, on fait bien attention
d'intercepter les exceptions pouvant être levée pour libérer les locks potentiellement
déjà posés avant de propager l'exception.
Si on essayer d'appeler une methode d'enregistrement (.save() .delete() .create()) sans
utiliser un context manager, on affiche un warning sur stderr.
À terme ça serait bien de n'utiliser que des context manager pour être sûr qu'on ne
laisse pas de lock traîner dans la base de donnée.
Il faut bien sûr faire attention de bien ajouter les lock avec l'identifiant cransLdapObject.lockId
puisqu'on se base là dessus pour les libérer.
Si on a utiliser une context manager, en en sortant, on rend le cransLdapObject read only
(de façon douce en modifiant le cransLdapObject.mode et de façon force en changeant les methodes
save create delete pour lever l'exception EnvironmentError("Hors du context, impossible de faire des écritures"))