From d8491177be6cc2682d0c5474cd7cfb6b1a4571f3 Mon Sep 17 00:00:00 2001 From: pauget Date: Tue, 7 Sep 2004 19:30:17 +0200 Subject: [PATCH] Changement dans les locks darcs-hash:20040907173017-41617-08936952494ae0d19ea5725ae2e0e5c9ca95d0cd.gz --- gestion/ldap_crans.py | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 2a910e04..b52f4890 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -217,20 +217,38 @@ class crans_ldap : """ if not self.conn : self.connect() r=[] - ret = self.conn.search_s(self.base_dn,2,arg) - ret += self.conn.search_s(self.base_lock,1,arg) + # Premier test : dans les objets déja inscrits + ret = self.conn.search_s(self.base_dn,2,arg) for res in ret : # C'est peut être l'objet courant try : # Si ce n'est pas une classe fille avec l'attribu dn => erreur - if res[0] == self.dn or res[1]['lockid'][0] == '%s-%s' % (hostname, os.getpid()) : - return [] + if res[0] == self.dn : + continue except : - None + pass r.append(res[0]) - return r - + # Deuxième test : lock ? + ret = self.conn.search_s(self.base_lock,1,arg) + lockid = '%s-%s' % (hostname, os.getpid() ) + for res in ret : + # Lock encore actif ? + l = res[1]['lockid'][0] + if l == lockid : continue + # C'est locké par un autre process que le notre + # il tourne encore ? + try : + if l.split('-')[0] == hostname and os.system('ps %s > /dev/null 2>&1' % l.split('-')[1] ) : + # Il ne tourne plus + self.remove_lock(res[0]) # delock + continue + except : + pass + r.append(res[0]) + + return [] + def lock(self,item,valeur) : """ Lock un item avec la valeur valeur, les items possibles peuvent être : aid $ chbre $ mail $ mailAlias $ cannonicalAlias $ @@ -259,7 +277,7 @@ class crans_ldap : # C'est locké par un autre process que le notre # il tourne encore ? try : - if os.system('ps %s > /dev/null 2>&1' % l.split('-')[1] ) : + if l.split('-')[0] == hostname and os.system('ps %s > /dev/null 2>&1' % l.split('-')[1] ) : # Il ne tourne plus self.remove_lock(res[0]) # delock return self.lock(item,valeur) # relock