[Scripts] On rajoute un champ rid qui fait le lien avec les plages d'ip, et on rend le mid strictement croissant.

Ignore-this: 199e9ff5f09e1fe600c1066179f4e47b
Ce patch est un test, il ne restera en prod que si ça fonctionne. L'idée est qu'on souhaiterait conserver les vieilles machines comme les vieux adhérents, sauf demande explicite de suppression, par ailleurs, l'association mid <=> ip est très utile pour pas mal de choses. Pour la conserver, on crée un identifiant rid, qui supplante le mid, qui est lui choisi comme l'aid ou le fid, en incrémentant.

Ce patch vise à implémenter cela. S'il génère des bugs, il subira un rollback.

darcs-hash:20130123021650-b6762-347428d75f066f7f4821ca067d8c9bb6a4396bf5.gz
This commit is contained in:
Pierre-Elliott Bécue 2013-01-23 03:16:50 +01:00
parent 70f5ff906a
commit 2a7dd72069
9 changed files with 150 additions and 138 deletions

View file

@ -24,10 +24,10 @@ import os, re, syslog, cPickle, socket
from ldap_crans import crans_ldap, hostname
from commands import getstatusoutput
from config import NETs, role, prefix, mid, output_file, filter_policy
from config import NETs, role, prefix, rid, output_file, filter_policy
from config import blacklist_sanctions, blacklist_sanctions_soft, file_pickle, ann_scol, periode_transitoire
from iptools import AddrInNet
from midtools import Mid
from ridtools import Rid
import subprocess
import netaddr
@ -157,8 +157,8 @@ ACCEPT' % (dev, proto, ip, port))
vers et à partir de la machine considérée '''
ident = int(machine.id())
ip = ""
for type_m in mid.keys():
if ident in range(mid[type_m][0], mid[type_m][1]):
for type_m in rid.keys():
if ident in range(rid[type_m][0], rid[type_m][1]):
ip = ipv6_addr(machine.mac(), type_m)
mac=machine.mac()
break
@ -179,9 +179,9 @@ icmp6-adm-prohibited' % ip)
class Update(object):
''' Cette classe comprend toutes les méthodes nécessaires
à une mise-à-jour ou un régénération partielle du firewall'''
def ports(self, mids, ip_proto = 4):
def ports(self, rids, ip_proto = 4):
''' Met à jour les autorisations par machine sur l'ouverture des ports.
Prend en argument une liste de mid (entier(s)) de machines à changer'''
Prend en argument une liste de rid (entier(s)) de machines à changer'''
check_ip_proto(ip_proto)
ipt_p = open_pickle(ip_proto)
dev_crans = iface6('fil')
@ -190,22 +190,22 @@ class Update(object):
elif ip_proto == 6:
dev_ext = iface6('sixxs2')
net = ""
for m in mids:
for type_m in mid.keys():
if int(m) in range(mid[type_m][0], mid[type_m][1]):
for r in rids:
for type_m in rid.keys():
if int(r) in range(rid[type_m][0], rid[type_m][1]):
net = type_m
if net == "":
raise MidError("Il n'y a pas de réseau associé au mid %i" % m)
raise RidError("Il n'y a pas de réseau associé au rid %i" % m)
if '-v6' in net and ip_proto == 4:
raise MismatchMidIpProto(m, ip_proto, net)
machine = db.search('mid=%i' % m)['machine']
raise MismatchRidIpProto(r, ip_proto, net)
machine = db.search('rid=%i' % r)['machine']
if len(machine) != 1:
msg = "Il y a %i machines associée(s) au mid %i" % (
len(machine), m)
raise MidError(msg)
msg = "Il y a %i machines associée(s) au rid %i" % (
len(machine), r)
raise RidError(msg)
else:
if ip_proto == 4:
ip = Mid(int(m)).to_ipv4()
ip = Rid(int(m)).to_ipv4()
elif ip_proto == 6:
ip = ipv6_addr(machine[0].mac(), net)
# On vérifie si la machine a déjà des entrées dans les chaînes
@ -370,23 +370,23 @@ class Ip6tablesError(Exception):
def __str__(self):
return "%s: %s %s" % ( self.cmd, self.code, self.msg)
class MidError(Exception):
''' Exception invoquée lorsqu'il y a un soucis avec un mid fourni '''
class RidError(Exception):
''' Exception invoquée lorsqu'il y a un soucis avec un rid fourni '''
def __init__(self, msg):
self.msg = msg
syslog.syslog(syslog.LOG_ERR,"%s" % self.msg)
def __str__(self):
return "%s" % self.msg
class MismatchMidIpProto(Exception):
''' Exception invoquée lorsqu'il y a un défaut d'appariement entre le mid
class MismatchRidIpProto(Exception):
''' Exception invoquée lorsqu'il y a un défaut d'appariement entre le rid
et le protocole ip concerné'''
def __init__(self, mmid, ip_proto, net):
self.mmid = mmid
def __init__(self, mrid, ip_proto, net):
self.mrid = mrid
self.ip_proto = ip_proto
self.net = net
self.msg = "Défaut d'appariement entre le mid %i (%s) \
et le protocole ip %i" % (self.mmid, self.net, self.ip_proto)
self.msg = "Défaut d'appariement entre le rid %i (%s) \
et le protocole ip %i" % (self.mrid, self.net, self.ip_proto)
syslog.syslog(syslog.LOG_ERR, self.msg)
def __str__(self):
return self.msg
@ -747,7 +747,7 @@ def macips(ipt, machines, types_machines):
''' Construit la chaîne MAC '''
for machine in machines:
for type_m in types_machines:
if int(machine.id()) in range(mid[type_m][0], mid[type_m][1]):
if int(machine.rid()) in range(rid[type_m][0], rid[type_m][1]):
ipt.macip(machine.mac(), type_m)
break
for type_m in types_machines: