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