From c21e75fea8f0d13c934007a9ef4cc9630edaa18a Mon Sep 17 00:00:00 2001 From: pauget Date: Wed, 23 Nov 2005 19:56:09 +0100 Subject: [PATCH] Simplification, peut-tre la fin des locks rsiduels. darcs-hash:20051123185609-41617-74b288bf0adbbf86ae54dcab589795d6f68b1ac8.gz --- gestion/ldap_crans.py | 84 ++++++++----------------------------------- 1 file changed, 14 insertions(+), 70 deletions(-) diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 5f680100..bf9e7a37 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -28,25 +28,13 @@ except: date_format='%d/%m/%Y %H:%M' hostname = gethostname().split(".")[0] -if hostname == "vert": - anon_bind = 1 # Anonyme pour lecture seule - uri = 'ldapi://%2fvar%2frun%2fldapi/' - rw_uri = uri -elif hostname in [ 'sila' , 'pegase' ]: - anon_bind = 1 # Anonyme pour lecture seule - uri = 'ldapi://%2fvar%2frun%2fldapi/' - rw_uri = 'ldap://ldap.adm.crans.org/' -elif hostname == 'egon' and not '/usr/scripts/gestion/' in sys.argv[0]: +if hostname == 'egon' and not '/usr/scripts/gestion/' in sys.argv[0]: # pour les tests, les séminaires... sur egon - anon_bind = 1 # Anonyme pour lecture seule uri = 'ldapi://%2fvar%2frun%2fldapi/' - rw_uri = uri ldap_auth_dn='cn=admin,dc=crans,dc=org' ldap_password='75bdb64f32' else: - anon_bind = 0 uri = 'ldap://ldap.adm.crans.org/' - rw_uri = uri smtpserv = "rouge.crans.org" @@ -239,63 +227,20 @@ class crans_ldap: self.remove_lock(lock) def connect(self): - """ Initialisation des connexion vers le serveur LDAP """ - - def bind(conn,anon_bind=0): - """ Authentification auprès du serveur ldap """ - nbessais = 0 - ok = False - while not ok: - try: - if anon_bind: - conn.bind_s('','',ldap.AUTH_SIMPLE) - else: - conn.bind_s(ldap_auth_dn,ldap_password,ldap.AUTH_SIMPLE) - ok = True - - except ldap.SERVER_DOWN: - nbessais += 1 - if nbessais > 2: - sys.stderr.write("ERREUR : serveur LDAP injoignable\n") - sys.exit(1) - else: - sleep(0.3) - - def select_conn(methode_base, methode_alternative): - """ Retoune une fonction qui : - 1) bind sur la connection self.conn si necessaire - 2) fait ce que ferai methode_base - 3) si échoue bind sur la connexion self.rw_conn - 4) fait ce que ferai methode_alternative """ - - def new_methode(*args): - try: - if not self.__conn_binded: - bind(self.conn,anon_bind) - self.__conn_binded = True - return methode_base(*args) - except ldap.STRONG_AUTH_REQUIRED: - # On a pas les droits necessaires ici - if not self.__rw_conn_binded: - bind(self.rw_conn) - self.__rw_conn_binded = True - return methode_alternative(*args) - - return new_methode - - # Les objets ldap necessaires + """ Initialisation la connexion vers le serveur LDAP """ self.conn = ldap.initialize(uri) - self.__conn_binded = False - - self.rw_conn = ldap.initialize(rw_uri) - self.__rw_conn_binded = False - - # Modification des méthodes utilisées - self.conn.search_s = select_conn(self.conn.search_s,self.rw_conn.search_s) - self.conn.add_s = select_conn(self.conn.add_s,self.rw_conn.add_s) - self.conn.modify_s = select_conn(self.conn.modify_s,self.rw_conn.modify_s) - self.conn.delete_s = select_conn(self.conn.delete_s,self.rw_conn.delete_s) - + while True : + try: + self.conn.bind_s(ldap_auth_dn,ldap_password,ldap.AUTH_SIMPLE) + break + except ldap.SERVER_DOWN: + nbessais += 1 + if nbessais > 2: + sys.stderr.write("ERREUR : serveur LDAP injoignable\n") + sys.exit(1) + else: + sleep(0.3) + def exist(self,arg): """ Vérifie l'existence d'une entrée dans la base et que cette entrée @@ -1046,7 +991,6 @@ class base_classes_crans(crans_ldap): t = str(self.__class__).split('.')[-1] fd = open('%s/%s/%s_%s' % (config.cimetiere, t, time.strftime('%Y-%m-%d-%H:%M'), self.nom()),'wb') self.conn = None # Fermeture des connexions à la base sinon cPickle ne marchera pas - self.rw_conn = None cPickle.dump(self,fd,2) fd.close() index = u"%s, %s : %s %s # %s\n" % (time.strftime(date_format), script_utilisateur, t, self.Nom() , decode(comment))