Si pas sur zamok ouverture d'une connexion pour lecture sur sila et une pour
criture sur zamok. darcs-hash:20041003151936-41617-699e21bd1ab937fd1e9ea54041fe04a2bfa6d0ac.gz
This commit is contained in:
parent
6c454d6b2b
commit
43deffd0e2
1 changed files with 71 additions and 36 deletions
|
@ -15,8 +15,11 @@ date_format='%d/%m/%Y %H:%M'
|
||||||
hostname = gethostname().split(".")[0]
|
hostname = gethostname().split(".")[0]
|
||||||
if hostname == "zamok":
|
if hostname == "zamok":
|
||||||
uri = 'ldapi://%2fvar%2frun%2fldapi/'
|
uri = 'ldapi://%2fvar%2frun%2fldapi/'
|
||||||
|
rw_uri = uri
|
||||||
else:
|
else:
|
||||||
uri = 'ldaps://zamok.crans.org:636/'
|
uri = 'ldaps://sila.crans.org:636/'
|
||||||
|
rw_uri = 'ldaps://zamok.crans.org:636/'
|
||||||
|
|
||||||
smtpserv = "localhost"
|
smtpserv = "localhost"
|
||||||
|
|
||||||
# TODO :
|
# TODO :
|
||||||
|
@ -30,7 +33,13 @@ from chgpass import chgpass
|
||||||
from affich_tools import coul, prompt
|
from affich_tools import coul, prompt
|
||||||
from time import sleep,localtime
|
from time import sleep,localtime
|
||||||
|
|
||||||
|
try :
|
||||||
from secrets import ldap_password, ldap_auth_dn
|
from secrets import ldap_password, ldap_auth_dn
|
||||||
|
except :
|
||||||
|
print coul('Warning : impossible de lire le fichier de secret !','jaune')
|
||||||
|
sleep(2)
|
||||||
|
ldap_password = ''
|
||||||
|
ldap_auth_dn = ''
|
||||||
|
|
||||||
random.seed() # On initialise le générateur aléatoire
|
random.seed() # On initialise le générateur aléatoire
|
||||||
|
|
||||||
|
@ -194,14 +203,17 @@ class crans_ldap :
|
||||||
self.connect()
|
self.connect()
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
# Ouverture de la connexion
|
""" Initialisation des connexion vers le serveur LDAP """
|
||||||
|
|
||||||
|
def bind(conn) :
|
||||||
|
""" Authentification auprès du serveur ldap """
|
||||||
nbessais = 0
|
nbessais = 0
|
||||||
ok = False
|
ok = False
|
||||||
while not ok:
|
while not ok:
|
||||||
try:
|
try:
|
||||||
self.conn = ldap.initialize(uri)
|
conn.bind_s(ldap_auth_dn,ldap_password,ldap.AUTH_SIMPLE)
|
||||||
self.conn.bind_s(ldap_auth_dn,ldap_password,ldap.AUTH_SIMPLE)
|
|
||||||
ok = True
|
ok = True
|
||||||
|
|
||||||
except ldap.SERVER_DOWN :
|
except ldap.SERVER_DOWN :
|
||||||
nbessais += 1
|
nbessais += 1
|
||||||
if nbessais > 2:
|
if nbessais > 2:
|
||||||
|
@ -210,7 +222,40 @@ class crans_ldap :
|
||||||
else:
|
else:
|
||||||
sleep(0.3)
|
sleep(0.3)
|
||||||
|
|
||||||
#self.conn.start_tls_s()
|
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)
|
||||||
|
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_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)
|
||||||
|
|
||||||
def exist(self,arg) :
|
def exist(self,arg) :
|
||||||
"""
|
"""
|
||||||
|
@ -221,7 +266,6 @@ class crans_ldap :
|
||||||
Sinon retourne une liste vide
|
Sinon retourne une liste vide
|
||||||
Exemple : exist('chbre=Z345') vérifie si il y a un adhérent en Z345
|
Exemple : exist('chbre=Z345') vérifie si il y a un adhérent en Z345
|
||||||
"""
|
"""
|
||||||
if not self.conn : self.connect()
|
|
||||||
r=[]
|
r=[]
|
||||||
|
|
||||||
# Premier test : dans les objets déja inscrits
|
# Premier test : dans les objets déja inscrits
|
||||||
|
@ -261,7 +305,6 @@ class crans_ldap :
|
||||||
mid $ macAddress $ host $ hostAlias $ ipHostNumber
|
mid $ macAddress $ host $ hostAlias $ ipHostNumber
|
||||||
retourne le dn du lock
|
retourne le dn du lock
|
||||||
"""
|
"""
|
||||||
if not self.conn : self.connect()
|
|
||||||
|
|
||||||
valeur = valeur.encode('utf-8')
|
valeur = valeur.encode('utf-8')
|
||||||
|
|
||||||
|
@ -296,7 +339,6 @@ class crans_ldap :
|
||||||
def remove_lock(self,lockdn) :
|
def remove_lock(self,lockdn) :
|
||||||
""" Destruction d'un lock
|
""" Destruction d'un lock
|
||||||
Destruction de tous les locks si lockdn=*"""
|
Destruction de tous les locks si lockdn=*"""
|
||||||
if not self.conn : self.connect()
|
|
||||||
# Mettre des verifs ?
|
# Mettre des verifs ?
|
||||||
if lockdn!='*' :
|
if lockdn!='*' :
|
||||||
self.conn.delete_s(lockdn)
|
self.conn.delete_s(lockdn)
|
||||||
|
@ -307,7 +349,6 @@ class crans_ldap :
|
||||||
|
|
||||||
def list_locks(self) :
|
def list_locks(self) :
|
||||||
""" Liste les locks """
|
""" Liste les locks """
|
||||||
if not self.conn : self.connect()
|
|
||||||
return self.conn.search_s(self.base_lock,1,'objectClass=lock')
|
return self.conn.search_s(self.base_lock,1,'objectClass=lock')
|
||||||
|
|
||||||
def services_to_restart(self,new=None,args=[]) :
|
def services_to_restart(self,new=None,args=[]) :
|
||||||
|
@ -316,7 +357,6 @@ class crans_ldap :
|
||||||
avec les arguments args (args doit être une liste).
|
avec les arguments args (args doit être une liste).
|
||||||
Si new est founi et ne comence par - supprime le service de la liste
|
Si new est founi et ne comence par - supprime le service de la liste
|
||||||
"""
|
"""
|
||||||
if not self.conn : self.connect()
|
|
||||||
|
|
||||||
if new and new[0] == '-' :
|
if new and new[0] == '-' :
|
||||||
serv_dn = 'cn=%s,%s' % ( new[1:], self.base_services )
|
serv_dn = 'cn=%s,%s' % ( new[1:], self.base_services )
|
||||||
|
@ -370,7 +410,6 @@ class crans_ldap :
|
||||||
soit un seul terme, dans ce cas cherche sur les champs de auto_search_champs
|
soit un seul terme, dans ce cas cherche sur les champs de auto_search_champs
|
||||||
Si mode ='w' les instances crées seront en mode d'écriture
|
Si mode ='w' les instances crées seront en mode d'écriture
|
||||||
"""
|
"""
|
||||||
if not self.conn : self.connect()
|
|
||||||
|
|
||||||
if type(expression)==str :
|
if type(expression)==str :
|
||||||
# Transformation de l'expression en utf-8
|
# Transformation de l'expression en utf-8
|
||||||
|
@ -695,8 +734,6 @@ class base_classes_crans(crans_ldap) :
|
||||||
# Rien à faire
|
# Rien à faire
|
||||||
return []
|
return []
|
||||||
|
|
||||||
if not self.conn : self.connect()
|
|
||||||
|
|
||||||
if not self.dn :
|
if not self.dn :
|
||||||
# Enregistrement à placer en tête de base
|
# Enregistrement à placer en tête de base
|
||||||
self.dn = self.base_dn
|
self.dn = self.base_dn
|
||||||
|
@ -800,7 +837,6 @@ class base_classes_crans(crans_ldap) :
|
||||||
index = "%s, %s : %s %s # %s\n" % (time.strftime(date_format), script_utilisateur, t, self.Nom() , comment)
|
index = "%s, %s : %s %s # %s\n" % (time.strftime(date_format), script_utilisateur, t, self.Nom() , comment)
|
||||||
|
|
||||||
# Destruction
|
# Destruction
|
||||||
self.connect()
|
|
||||||
data = self.conn.search_s(dn,2)
|
data = self.conn.search_s(dn,2)
|
||||||
|
|
||||||
data.reverse() # Necessaire pour détruire d'abord les sous-dn
|
data.reverse() # Necessaire pour détruire d'abord les sous-dn
|
||||||
|
@ -838,7 +874,9 @@ class base_proprietaire(base_classes_crans) :
|
||||||
|
|
||||||
conn est une instance de la classe de connexion à la base LDAP
|
conn est une instance de la classe de connexion à la base LDAP
|
||||||
"""
|
"""
|
||||||
if not self.conn : self.conn = conn
|
self.conn = conn
|
||||||
|
if not self.conn : self.connect()
|
||||||
|
|
||||||
if type(data) != tuple :
|
if type(data) != tuple :
|
||||||
raise TypeError
|
raise TypeError
|
||||||
|
|
||||||
|
@ -867,8 +905,6 @@ class base_proprietaire(base_classes_crans) :
|
||||||
|
|
||||||
def machines(self) :
|
def machines(self) :
|
||||||
""" Retourne les machines (instances) appartenant à la classe """
|
""" Retourne les machines (instances) appartenant à la classe """
|
||||||
if not self.conn :
|
|
||||||
self.connect()
|
|
||||||
if self.id() :
|
if self.id() :
|
||||||
res = []
|
res = []
|
||||||
try :
|
try :
|
||||||
|
@ -1550,7 +1586,8 @@ class machine(base_classes_crans) :
|
||||||
|
|
||||||
conn est une instance de la classe de connexion à la base LDAP
|
conn est une instance de la classe de connexion à la base LDAP
|
||||||
"""
|
"""
|
||||||
if not self.conn : self.conn = conn
|
self.conn = conn
|
||||||
|
if not self.conn : self.connect()
|
||||||
self.modifs=[]
|
self.modifs=[]
|
||||||
self._locks=[]
|
self._locks=[]
|
||||||
t = parent_or_tuple.__class__
|
t = parent_or_tuple.__class__
|
||||||
|
@ -1804,8 +1841,6 @@ class machine(base_classes_crans) :
|
||||||
retroune le propriétaire de la machine (classe adherent, club ou crans)
|
retroune le propriétaire de la machine (classe adherent, club ou crans)
|
||||||
"""
|
"""
|
||||||
if not self.__proprietaire :
|
if not self.__proprietaire :
|
||||||
if not self.conn : self.connect()
|
|
||||||
|
|
||||||
res = self.conn.search_s(','.join(self.dn.split(',')[1:]),0)
|
res = self.conn.search_s(','.join(self.dn.split(',')[1:]),0)
|
||||||
if 'adherent' in res[0][1]['objectClass'] :
|
if 'adherent' in res[0][1]['objectClass'] :
|
||||||
self.__proprietaire = adherent(res[0],self._modifiable,self.conn)
|
self.__proprietaire = adherent(res[0],self._modifiable,self.conn)
|
||||||
|
@ -1955,7 +1990,8 @@ class crans(crans_ldap) :
|
||||||
""" Classe définissant l'assoce (pour affichage de ses machines) """
|
""" Classe définissant l'assoce (pour affichage de ses machines) """
|
||||||
idn = ''
|
idn = ''
|
||||||
def __init__(s,conn=None):
|
def __init__(s,conn=None):
|
||||||
if not s.conn : s.conn = conn
|
self.conn = conn
|
||||||
|
if not self.conn : self.connect()
|
||||||
s.dn = s.base_dn
|
s.dn = s.base_dn
|
||||||
def id(s) :
|
def id(s) :
|
||||||
return ''
|
return ''
|
||||||
|
@ -1972,7 +2008,6 @@ class crans(crans_ldap) :
|
||||||
def blacklist_actif(s) :
|
def blacklist_actif(s) :
|
||||||
return []
|
return []
|
||||||
def machines(s) :
|
def machines(s) :
|
||||||
if not s.conn : s.connect()
|
|
||||||
res = s.conn.search_s(s.dn,1,'objectClass=machine')
|
res = s.conn.search_s(s.dn,1,'objectClass=machine')
|
||||||
m = []
|
m = []
|
||||||
for r in res :
|
for r in res :
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue