Nouveau systme de destruction d'objets.
darcs-hash:20040911232457-41617-acc80a0d56d11a346497d0aef68fd4b5c0b13a00.gz
This commit is contained in:
parent
6020d212db
commit
d0ba7705d9
4 changed files with 114 additions and 50 deletions
|
@ -25,7 +25,7 @@ smtpserv = "localhost"
|
|||
import smtplib, sre, os, random, string, time, sys
|
||||
import ldap, ldap.modlist
|
||||
|
||||
import config, annuaires, iptools, chgpass, user_tests
|
||||
import config, annuaires, iptools, chgpass, user_tests, cPickle
|
||||
from chgpass import chgpass
|
||||
from affich_tools import coul, prompt
|
||||
from time import sleep,localtime
|
||||
|
@ -41,8 +41,8 @@ random.seed() # On initialise le g
|
|||
##################################################################################
|
||||
### Items de la blackliste
|
||||
blacklist_items = { u'bloq' : u'Bloquage total de tout services' ,
|
||||
u'bl_virus' : u'Bloquage sur squid',
|
||||
u'bl_upload' : u'Bloquage total accès extérieur' }
|
||||
u'virus' : u'Bloquage sur squid',
|
||||
u'upload' : u'Bloquage total accès extérieur' }
|
||||
|
||||
##################################################################################
|
||||
### Droits possibles
|
||||
|
@ -749,7 +749,6 @@ class base_classes_crans(crans_ldap) :
|
|||
except ldap.TYPE_OR_VALUE_EXISTS , c :
|
||||
champ = c.args[0]['info'].split(':')[0]
|
||||
raise RuntimeError(u'Entrée en double dans le champ %s' % champ)
|
||||
|
||||
|
||||
### Génération de la liste de services à redémarrer
|
||||
|
||||
|
@ -762,21 +761,16 @@ class base_classes_crans(crans_ldap) :
|
|||
'ipsec' : [ 'conf_wifi' ],
|
||||
'hostAlias' : [ 'dns' ] ,
|
||||
'droits' : [ 'droits' ] ,
|
||||
'ports' : [ 'firewall-komaz' ]
|
||||
'ports' : [ 'firewall-komaz' ] ,
|
||||
'blacklist' : [ 'blacklistes' ] ,
|
||||
}
|
||||
|
||||
serv = []
|
||||
for m in self.modifs :
|
||||
for s in annuaire_modif_service.get(m,[]) :
|
||||
if s not in serv :
|
||||
serv.append(s)
|
||||
|
||||
# Regénération blackliste nécessaire ?
|
||||
bl = self.blacklist_actif()
|
||||
if bl and ( 'host' in self.modifs or 'blacklist' in self.modifs ):
|
||||
for s in bl :
|
||||
if s not in serv :
|
||||
serv.append(s)
|
||||
|
||||
# Reinitialisation
|
||||
self._init_data = self._data.copy()
|
||||
|
||||
|
@ -785,24 +779,33 @@ class base_classes_crans(crans_ldap) :
|
|||
|
||||
def _delete(self,dn,comment='') :
|
||||
""" Sauvegarde puis destruction du dn (et des sous-dn) fourni """
|
||||
if not self.conn : self.connect()
|
||||
# Commentaires
|
||||
self.modifs.append('destruction (%s)' % comment)
|
||||
self._save()
|
||||
|
||||
# Sauvegarde
|
||||
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 de la connexion à la base sinon cPickle ne marchera pas
|
||||
cPickle.dump(self,fd,2)
|
||||
fd.close()
|
||||
index = "%s, %s : %s %s # %s\n" % (time.strftime(date_format), script_utilisateur, t, self.Nom() , comment)
|
||||
|
||||
# Destruction
|
||||
self.connect()
|
||||
data = self.conn.search_s(dn,2)
|
||||
txt = "%s # Destruction le %s par %s" % (data, time.strftime(date_format), script_utilisateur)
|
||||
if comment :
|
||||
txt += ' (%s)' % comment
|
||||
txt += '\n'
|
||||
|
||||
data.reverse() # Necessaire pour détruire d'abord les sous-dn
|
||||
for r in data :
|
||||
self.conn.delete_s(r[0])
|
||||
|
||||
|
||||
try :
|
||||
log = open(config.delete_log,'a')
|
||||
log.write(txt)
|
||||
log = open(config.cimetiere + '/index','a')
|
||||
log.write(index)
|
||||
log.close()
|
||||
except :
|
||||
pass
|
||||
|
||||
|
||||
def _set(self,champ,val) :
|
||||
""" Met à jour les données de data et modifie modifs si besoin """
|
||||
if not self._data.has_key(champ) \
|
||||
|
@ -895,18 +898,16 @@ class base_proprietaire(base_classes_crans) :
|
|||
"""Destruction du proprietaire"""
|
||||
done = 0
|
||||
for m in self.machines() :
|
||||
if m.ipsec() :
|
||||
self.services_to_restart('conf_wifi')
|
||||
elif not done :
|
||||
done = 1
|
||||
self.services_to_restart('switch',[self.chbre()])
|
||||
if self.machines() :
|
||||
self.services_to_restart('dhcp')
|
||||
self.services_to_restart('dns')
|
||||
self.services_to_restart('firewall',[ self.nom() ])
|
||||
|
||||
# Destruction machines
|
||||
m.delete(comment)
|
||||
|
||||
self._delete(self.dn,comment)
|
||||
|
||||
if self.compte() :
|
||||
args = self._data['uid'][0] + ','
|
||||
args+= self._data['homeDirectory'][0]
|
||||
self.services_to_restart('del_user',[ args ] )
|
||||
|
||||
def save(self) :
|
||||
"""
|
||||
Enregistre l'adhérent ou le club courant dans la base LDAP
|
||||
|
@ -1524,7 +1525,7 @@ class club(base_proprietaire) :
|
|||
class machine(base_classes_crans) :
|
||||
""" Classe de définition d'une machine """
|
||||
idn = 'mid'
|
||||
|
||||
|
||||
def __init__(self,parent_or_tuple,typ='fixe',conn=None) :
|
||||
"""
|
||||
parent_or_tuple est :
|
||||
|
@ -1876,7 +1877,13 @@ class machine(base_classes_crans) :
|
|||
if self.__typ == 'wifi' and ( 'ipHostNumber' in self.modifs or 'host' in self.modifs ) :
|
||||
# Reconfiguration clients wifi necessaire
|
||||
self.services_to_restart('conf_wifi')
|
||||
|
||||
|
||||
# Regénération blackliste nécessaire ?
|
||||
bl = self.blacklist_actif()
|
||||
if bl and ( 'ipHostNumber' in self.modifs or 'host' in self.modifs ):
|
||||
for s in bl :
|
||||
self.services_to_restart(s,[ self.ip() ] )
|
||||
|
||||
# Remise à zéro
|
||||
self.modifs=[]
|
||||
|
||||
|
@ -1895,6 +1902,8 @@ class machine(base_classes_crans) :
|
|||
elif self.__typ == 'fixe' :
|
||||
self.services_to_restart('switch',[ self.proprietaire().chbre() ])
|
||||
|
||||
self.proprio = self.__proprietaire.Nom() # On met dans un coin le nom du proprio
|
||||
self.__proprietaire = None # On oublie le propriétaire
|
||||
self._delete(self.dn,comment)
|
||||
|
||||
self.services_to_restart('dhcp')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue