Commit graph

190 commits

Author SHA1 Message Date
Valentin Samir
8c3d6b441d [lc_ldap] Si l'user donné à init existe dans la base, alors droits est mis aux droits de l'utilisateur 2014-03-02 01:50:09 +01:00
Valentin Samir
879bebbae2 [lc_ldap] Utilisation des fonctions newMachine, newAdherent, newClub, ... comme un context manager 2014-03-02 01:49:16 +01:00
Daniel STAN
99d864b81c <automatique> pour les macs et u'' si pas d'ipv6 2014-03-02 00:28:15 +01:00
Valentin Samir
8f9c6c1d17 [lc_ldap] Pour machineMulticast, on utilise des uldif en place des ldif
Pour rappel, les machineMulticast n'ont pas d'existance pour la base ldap
et sont juste pratiques pour générer le dns de la zone TV sans avoir de cas
particulier dans gen_conf/bind.py
2014-02-26 10:28:43 +01:00
Valentin Samir
1312039a55 [lc_ldap._find_id] Dans le cas non strictement croissant des id, on utilise un set pour stocker les id déjà pris
En effet, en effectue ensuite un nombre important de fois l'opération i in nonfree.
Avec des liste l'opération est en O(n) alors qu'elle est en O(1) avec des set
2014-02-24 21:42:22 +01:00
Valentin Samir
955a4f2820 [lc_ldap, objets] Création des objets ldap avec un lockid bien a eux 2014-02-24 21:40:03 +01:00
Valentin Samir
172c1935ce [lc_ldap/_find_id] C'est bien aussi de ne pas oublier qu'il y a des id qui ne sont pas strictement croissant 2014-02-24 17:15:40 +01:00
Valentin Samir
9aa0de6539 Travaux sur les locks, ajout de context manager pour les cransLdapObject
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"))
2014-02-24 14:48:03 +01:00
Valentin Samir
575075fe18 [lc_ldap] Ajout des xids dans ressucite 2014-02-24 11:45:08 +01:00
Valentin Samir
68c86e7e00 [lc_ldap._find_id] On essaye de cacher le dernier id connu et de ne récupérer que les id plus grand
C'est beaucoup plus rapide que récupérer tous les mid ou tous les aid.
BEAUCOUP !!!!
plus de détails dans les commentaires du code.
2014-02-24 11:34:27 +01:00
Valentin Samir
fefad357fc [attributs, objets] Affinage des permissions sur les certificats 2014-02-23 16:06:11 +01:00
Valentin Samir
99ba3a8915 [lc_ldap, objets] vivent les __repr__ 2014-02-23 00:02:00 +01:00
Valentin Samir
43f4ba650a Cas d'un attribut binary
C'est un peu moche comme on s'est efforcé que dans lc_ldap tout soit un unicode et que
unicode n'a pas de sens pour un objet binaire. Avec le champ python_type = str sur les
attributs bianire, ça a tout de même l'air d'aller.
2014-02-22 23:09:29 +01:00
Valentin Samir
44936fde9d Ajout d'objets certifcats comme enfant des objets machine 2014-02-22 23:01:56 +01:00
Valentin Samir
f4730bb6ea Un fonction pour générer des objets machine lc_ldap à partir du dump des annonces sap dans /usr/scripts
Ça permet d'utiliser des fonctions générique sur les machines lc_ldap
pour s'occuper aussi du multicast. Notamment dans /usr/scripts/gestion/gen_confs/bind2.py
où cela nous permet de générer gratuirement la zone tv.crans.org et son reverse.
2014-02-03 00:15:18 +01:00
Pierre-Elliott Bécue
395cf90fbc Killing trailing spaces 2014-01-29 00:55:48 +01:00
Pierre-Elliott Bécue
d2aebebd2a [attributs] Si on oublie les parenthèses… 2014-01-29 00:53:49 +01:00
Valentin Samir
c0054a070c [cimetiere] Le module cimetiere est stateless et ne dépend pas d'une connection ldap
On ajoute une fonction ppour chercher dans le cimetière à la classe lc_ldap : gravedig
2013-11-18 00:44:48 +01:00
Valentin Samir
007bfeb54e [ressucite] On donne un nouvel id si l'id est déjà pris et on vérifie l'unicité seulement au moment d'enregistrer l'objet
par id j'entends aid, cid, fid, mid, tout ce que apparait dans un dn et qu'on ne
peut normalement par modifier tout seul après.
2013-11-17 20:22:07 +01:00
Valentin Samir
ba3898f26d [attributs, objets, lc_ldap] Création de factures 2013-10-11 18:46:26 +02:00
Valentin Samir
9eb1a76851 [lc_ldap] ressucite -_o 2013-08-20 17:49:48 +02:00
Pierre-Elliott Bécue
c2968c6b15 [lc_ldap] On met en place un système de propagation de certaines modifications.
* Quand on modifie un attribut qui devrait en modifier d'autres, on peut
 invoquer check_changes pour voir ce qui devrait être changé, puis
 validate_changes pour rendre ces changements effectifs. Il ne reste plus
 qu'à appeler save pour enregistrer le tout.
 * Correction de petits problèmes sur les locks : quand save réussissait,
 ils n'étaient pas virés.
2013-07-04 02:06:13 +02:00
Valentin Samir
9540bc572c Search by unicode 2013-07-02 14:42:59 +02:00
Pierre-Elliott Bécue
e18e5222b7 [Oops] J'ai oublié de commiter un de mes débugs. 2013-06-13 20:34:59 +02:00
Valentin Samir
80929daddd [lc_ldap] search by unicode string 2013-06-13 00:52:54 +02:00
Pierre-Elliott Bécue
616acdbb7a [global] On diminue le risque de lock résiduel, et on corrige une faille des fonctions new[A-Z]*
* En cas d'erreur au create ou au save, on supprime les locks malgré tout
    * Les fonctions new* modifiaient directement le dico qu'on leur passait en
    argument, on fait désormais une copie de celui-ci, de façon à ce que test.py
    n'instancie pas toujours le même objet en croyant instancier des objets
    différents à chaque fois
    * Cela permet de trouver une typo dans services.py
    * crans_utils a été un peu corrigé.
2013-05-30 18:44:15 +02:00
Pierre-Elliott Bécue
d6efff30de [ldap_locks] Mise en place des locks. Cf commentaires pour les détails.
* Malheureusement lc_ldap._create_entity et objet.create sont un peu
 sales, mais j'ai pas trouvé mieux.
 * L'historique contient désormais les secondes.
2013-05-30 15:22:11 +02:00
Pierre-Elliott Bécue
48c8e7d603 [lc_ldap] Putain de merge conflict à la con que j'ai mal résolu. 2013-05-30 01:36:56 +02:00
Pierre-Elliott Bécue
cd75ed7bd4 [global/rid] Commit associé à http://git.crans.org/?p=usr-scripts.git;a=commit;h=a442fd6b22c400800e7c5bd870e83e4027a1d76f
* Maintenant, on va pouvoir identifier formellement les machines v6-only et les autres, sans perdre
 la possibilité de passer de l'une à l'autre rapidement (avec les changements qui vont bien)
2013-05-30 01:20:49 +02:00
Pierre-Elliott Bécue
60ded9f830 [global] Passage à tout unicode et quelques corrections mineures.
* Typos
 * Docstrings unicode
 * Erreurs unicode
 * Ajout de _post_delete et _post_create
 * ?
2013-05-27 23:26:53 +02:00
Vincent Le Gallic
645b931736 Tout ce dont on a besoin c'est du current_login. On fait confiance aux gens qui ont le mdp LDAP pour fourni le bon username. 2013-05-16 17:03:06 +02:00
Vincent Le Gallic
db7d41d967 Split de lc_ldap.py en lc_ldap.py et objets.py + création du wrapper shortcuts.py
Ça permet de faire les choses sales du genre os.getenv("SUDO_USER") ou import_secrets
dans le wrapper et pas dans le binding même.
2013-05-16 07:00:47 +02:00
Vincent Le Gallic
a620f5b5e9 On vire le kludge qui récupère le login dans la variable d'environnement.
C'est plus le rôle d'un wrapper (à venir) que du binding itself.
2013-05-16 03:53:00 +02:00
Pierre-Elliott Bécue
3663d877cc [lc_ldap/test] fil-adherents -> /dev/null 2013-05-16 03:01:11 +02:00
Vincent Le Gallic
a6c5f66aee On ne save/ressuscite pas le Cr@ns. 2013-05-16 02:45:44 +02:00
Vincent Le Gallic
debaa31bf3 On place la fonction escape dans crans_utils 2013-05-16 01:35:58 +02:00
Vincent Le Gallic
c392a2a986 On utilise un champ ldap_name pour savoir quelle classe doit être utilisée pour instancier quel objet/attribut LDAP.
Et comme ça on fiche à la poubelle le dégueulasse globals() et on décorrelle les noms
des classes des noms LDAP.
2013-05-15 23:00:17 +02:00
Valentin Samir
90ec85b1a2 [lc_ldap] Les fichiers dans le cimetière sont plus facile à manipuler sans espace 2013-05-14 23:47:07 +02:00
Valentin Samir
22ba5c1d38 [lc_ldap] Ajout de attributs.loginShell pour cransAccount 2013-05-14 23:30:50 +02:00
Valentin Samir
75839564e5 [lc_ldap] des modes sur allMachinesAdherents 2013-05-14 23:28:39 +02:00
Valentin Samir
ac19266cbf [lc_ldap] dn invité 2013-05-14 18:01:07 +02:00
Valentin Samir
cc0f6e0a91 Antagonisme entre un attribut et sa valeur textuelle 2013-05-14 18:00:00 +02:00
Valentin Samir
1d61048828 [lc_ldap, services] On ajoute ce qui faut à la base de service pour que generete régénère la conf
C'est un début, ça vise surtout à être compatible avec ce qui est existant.
2013-05-10 01:39:03 +02:00
Valentin Samir
bec801fbea [lc_ldap] Petit problème de dépendance cyclique
Lors de la création d'un nouvel objets :
 * On à besoin des attributs pour le créer
 * On a besoin de l'objet pour créer ses attributs
(si on veux faire la vérification commentée)
À priori, c'est juste temporaire.
2013-05-08 04:07:55 +02:00
Valentin Samir
0fb3c19242 [lc_ldap] Tests d'unicités avant de ressuciter, à affiner. 2013-05-08 04:06:46 +02:00
Valentin Samir
68ba8ebd9f [attributs, lc_ldap] Gros hack sale. Ça serait peut être mieux d'avoir des unicodes vraiment partout. 2013-05-08 04:05:42 +02:00
Valentin Samir
4d550e734b [lc_ldap, attributs] Oublis 2013-05-08 04:05:04 +02:00
Pierre-Elliott Bécue
215f01c281 [lc_ldap] Easter egg 2013-05-08 02:22:09 +02:00
Pierre-Elliott Bécue
0cee8dbcb6 [lc_ldap] bury devient méthode à part entière (ça pourrait servir), delete est fragmentée
* Par défaut, on préfère que le binding crashe si des enfants d'un adhérent ne sont pas
 des machines et ne sont pas gérés par le binding que de les détruire
 * objet.delete ne permet donc par défaut que de détruire l'objet, et pour proprio, on
 surcharge pour détruire les machines
2013-05-08 02:20:03 +02:00
Pierre-Elliott Bécue
b5a6062c44 [lc_ldap] Changement de protocole dans la création des objets
* _create_entity a été changée pour récupérer des dicos de valeurs encodées,
 on adapte les méthodes new* en virant les uldifs, et en rendant l'historique
 non unicode.
 * Ipsec est facultatif, donc on le crée après avoir instancié la machine, que
 l'on souhaite instancier le plus tôt possible, et on en laisse la gestion
 à attributs, pour le parsage etc
2013-05-08 02:18:13 +02:00