Simplification, peut-tre la fin des locks rsiduels.

darcs-hash:20051123185609-41617-74b288bf0adbbf86ae54dcab589795d6f68b1ac8.gz
This commit is contained in:
pauget 2005-11-23 19:56:09 +01:00
parent b894f1867f
commit c21e75fea8

View file

@ -28,25 +28,13 @@ except:
date_format='%d/%m/%Y %H:%M' date_format='%d/%m/%Y %H:%M'
hostname = gethostname().split(".")[0] hostname = gethostname().split(".")[0]
if hostname == "vert": if hostname == 'egon' and not '/usr/scripts/gestion/' in sys.argv[0]:
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]:
# pour les tests, les séminaires... sur egon # pour les tests, les séminaires... sur egon
anon_bind = 1 # Anonyme pour lecture seule
uri = 'ldapi://%2fvar%2frun%2fldapi/' uri = 'ldapi://%2fvar%2frun%2fldapi/'
rw_uri = uri
ldap_auth_dn='cn=admin,dc=crans,dc=org' ldap_auth_dn='cn=admin,dc=crans,dc=org'
ldap_password='75bdb64f32' ldap_password='75bdb64f32'
else: else:
anon_bind = 0
uri = 'ldap://ldap.adm.crans.org/' uri = 'ldap://ldap.adm.crans.org/'
rw_uri = uri
smtpserv = "rouge.crans.org" smtpserv = "rouge.crans.org"
@ -239,63 +227,20 @@ class crans_ldap:
self.remove_lock(lock) self.remove_lock(lock)
def connect(self): def connect(self):
""" Initialisation des connexion vers le serveur LDAP """ """ Initialisation la 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
self.conn = ldap.initialize(uri) self.conn = ldap.initialize(uri)
self.__conn_binded = False while True :
try:
self.rw_conn = ldap.initialize(rw_uri) self.conn.bind_s(ldap_auth_dn,ldap_password,ldap.AUTH_SIMPLE)
self.__rw_conn_binded = False break
except ldap.SERVER_DOWN:
# Modification des méthodes utilisées nbessais += 1
self.conn.search_s = select_conn(self.conn.search_s,self.rw_conn.search_s) if nbessais > 2:
self.conn.add_s = select_conn(self.conn.add_s,self.rw_conn.add_s) sys.stderr.write("ERREUR : serveur LDAP injoignable\n")
self.conn.modify_s = select_conn(self.conn.modify_s,self.rw_conn.modify_s) sys.exit(1)
self.conn.delete_s = select_conn(self.conn.delete_s,self.rw_conn.delete_s) else:
sleep(0.3)
def exist(self,arg): def exist(self,arg):
""" """
Vérifie l'existence d'une entrée dans la base et que cette entrée 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] 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') 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.conn = None # Fermeture des connexions à la base sinon cPickle ne marchera pas
self.rw_conn = None
cPickle.dump(self,fd,2) cPickle.dump(self,fd,2)
fd.close() fd.close()
index = u"%s, %s : %s %s # %s\n" % (time.strftime(date_format), script_utilisateur, t, self.Nom() , decode(comment)) index = u"%s, %s : %s %s # %s\n" % (time.strftime(date_format), script_utilisateur, t, self.Nom() , decode(comment))