Simplification, peut-tre la fin des locks rsiduels.
darcs-hash:20051123185609-41617-74b288bf0adbbf86ae54dcab589795d6f68b1ac8.gz
This commit is contained in:
parent
b894f1867f
commit
c21e75fea8
1 changed files with 14 additions and 70 deletions
|
@ -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))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue