[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:
parent
70f5ff906a
commit
2a7dd72069
9 changed files with 150 additions and 138 deletions
|
@ -522,32 +522,32 @@ NETs = { 'serveurs' : [ '138.231.136.0/24' ],
|
|||
|
||||
NETs_regexp = { 'all' : '^138\.231\.1(3[6789]|4[0123456789]|5[01])\.\d+$' }
|
||||
|
||||
# Classes de mid
|
||||
# Classes de rid
|
||||
# Merci d'essayer de les faire correspondre avec les réseaux
|
||||
# ci-dessus...
|
||||
mid = {
|
||||
# Mid pour les machines fixes
|
||||
rid = {
|
||||
# Rid pour les machines fixes
|
||||
'fil' : (256, 2047),
|
||||
# Mid pour les machines fixes ipv6-only
|
||||
# Rid pour les machines fixes ipv6-only
|
||||
'fil-v6' : (32768, 34815),
|
||||
# Mid pour les machines wifi
|
||||
# Rid pour les machines wifi
|
||||
'wifi' : (2048, 4095),
|
||||
# Mid pour les machines du vlan adm
|
||||
# Rid pour les machines du vlan adm
|
||||
'adm' : (51200, 53247),
|
||||
# Mid pour les machines des personnels ens
|
||||
# Rid pour les machines des personnels ens
|
||||
'personnel-ens' : (55296, 55551),
|
||||
# Mid pour machines spéciales
|
||||
# Rid pour machines spéciales
|
||||
'special' : (4096, 6143),
|
||||
# Mid pour les filaires v6-only
|
||||
# Rid pour les filaires v6-only
|
||||
'fil-v6' : (16384, 24575),
|
||||
# Mid pour les wifi v6-only
|
||||
# Rid pour les wifi v6-only
|
||||
'wifi-v6' : (24576, 32767),
|
||||
# Mid pour les servers crans
|
||||
# Rid pour les servers crans
|
||||
'serveurs' : (0, 255),
|
||||
}
|
||||
|
||||
# mid pour les machines spéciales (classe 'special' ci-dessus)
|
||||
mid_machines_speciales = {
|
||||
# rid pour les machines spéciales (classe 'special' ci-dessus)
|
||||
rid_machines_speciales = {
|
||||
# freebox.crans.org
|
||||
4096: '82.225.39.54',
|
||||
# ovh.crans.org
|
||||
|
|
|
@ -25,7 +25,7 @@ import sys, re, os, pwd
|
|||
sys.path.append('/usr/scripts/gestion')
|
||||
|
||||
from ldap_crans import hostname
|
||||
from config import conf_fw, mid, prefix, role, file_pickle, open_ports
|
||||
from config import conf_fw, rid, prefix, role, file_pickle, open_ports
|
||||
from config import authorized_icmpv6, mac_wifi, adm_only, adm_users
|
||||
from config import udp_torrent_tracker
|
||||
from ipt import *
|
||||
|
@ -47,8 +47,8 @@ def ports(dev_ip6, dev_crans):
|
|||
''' Ouvre les ports '''
|
||||
for machine in machines :
|
||||
for type_machine in ['fil', 'fil-v6', 'wifi', 'wifi-v6']:
|
||||
if int(machine.id()) in range(mid[type_machine][0],
|
||||
mid[type_machine][1]):
|
||||
if int(machine.rid()) in range(rid[type_machine][0],
|
||||
rid[type_machine][1]):
|
||||
ports_io(ip6tables, machine, type_machine, dev_ip6, dev_crans)
|
||||
|
||||
#Protection contre les attaques brute-force
|
||||
|
|
|
@ -22,7 +22,7 @@ from lock import *
|
|||
from affich_tools import anim, cprint, OK
|
||||
from time import localtime, strftime, time, sleep
|
||||
import config
|
||||
import midtools
|
||||
import ridtools
|
||||
from inspect import getargspec
|
||||
from syslog import *
|
||||
import platform
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -22,7 +22,7 @@ from email_tools import send_email
|
|||
from syslog import openlog, closelog, syslog
|
||||
from numeros_disponibles import lister_ip_dispo
|
||||
from unicodedata import normalize
|
||||
import midtools
|
||||
import ridtools
|
||||
|
||||
date_format = '%d/%m/%Y %H:%M'
|
||||
hostname = gethostname().split(".")[0]
|
||||
|
@ -366,7 +366,7 @@ class CransLdap:
|
|||
non_auto_search_machines_champs = \
|
||||
['mid', 'historique', 'blacklist', 'info', 'exempt', 'mblacklist',
|
||||
'portTCPin', 'portTCPout', 'portUDPin', 'portUDPout', 'dnsIpv6', 'machineAlias',
|
||||
'sshFingerprint']
|
||||
'sshFingerprint', 'rid']
|
||||
|
||||
non_auto_search_champs = { \
|
||||
'adherent': \
|
||||
|
@ -481,7 +481,7 @@ class CransLdap:
|
|||
peuvent être :
|
||||
|
||||
aid $ chbre $ mail $ mailAlias $ canonicalAlias $
|
||||
mid $ macAddress $ host $ hostAlias $ ipHostNumber $
|
||||
mid $ rid $ macAddress $ host $ hostAlias $ ipHostNumber $
|
||||
gpgFingerprint
|
||||
|
||||
Retourne le dn du lock
|
||||
|
@ -1275,14 +1275,6 @@ class BaseClasseCrans(CransLdap):
|
|||
|
||||
if not self._init_data:
|
||||
### Nouvel enregistrement
|
||||
# Forcage de mid correspondant à l'ip.
|
||||
if self.idn == 'mid':
|
||||
my_mid = midtools.Mid(ipv4=self._data["ipHostNumber"][0])
|
||||
self.dn = '%s=%d,%s' % (self.idn, my_mid, self.dn)
|
||||
self._data[self.idn] = [ '%d' % my_mid ]
|
||||
modlist = ldap.modlist.addModlist(self._data)
|
||||
self.conn.add_s(self.dn, modlist)
|
||||
else:
|
||||
# L'enregistrement peut échouer en cas de choix de dn concurrents
|
||||
# (il n'y a pas de lock sur les dn)
|
||||
for i in range(0, 5): # 5 tentatives
|
||||
|
@ -1296,7 +1288,7 @@ class BaseClasseCrans(CransLdap):
|
|||
r = r[0].split(',')[0]
|
||||
if r[:4] != '%s=' % self.idn: continue
|
||||
vidns.append(int(r[4:]))
|
||||
if self.idn == 'fid' or self.idn == 'aid':
|
||||
if self.idn == 'fid' or self.idn == 'aid' or self.idn == 'mid':
|
||||
# Pour une facture on prend un nouveau numéro
|
||||
vidn = max([0] + vidns) + 1
|
||||
else:
|
||||
|
@ -1330,16 +1322,14 @@ class BaseClasseCrans(CransLdap):
|
|||
champ = c.args[0]['info'].split(':')[0]
|
||||
raise RuntimeError(u'Entrée en double dans le champ %s' % champ)
|
||||
|
||||
# l'ip change, le mid aussi...
|
||||
# l'ip change, le rid aussi...
|
||||
if 'ipHostNumber' in self.modifs:
|
||||
try:
|
||||
mid = midtools.Mid(ipv4 = self._data["ipHostNumber"][0])
|
||||
rid = ridtools.Rid(ipv4 = self._data["ipHostNumber"][0])
|
||||
except ValueError:
|
||||
pass
|
||||
else:
|
||||
self.conn.rename_s(self.dn, "%s=%d" % (self.idn, mid))
|
||||
self.dn = "%s=%d,%s" % (self.idn, mid, self.dn.split(',', 1)[1])
|
||||
self._data[self.idn] = [ '%d' % mid ]
|
||||
self.rid('%d' % rid)
|
||||
|
||||
|
||||
### Génération de la liste de services à redémarrer
|
||||
|
@ -3106,12 +3096,30 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
|
|||
if self.exist('ipHostNumber=%s' % ip):
|
||||
raise ValueError(u'IP déjà prise.')
|
||||
|
||||
my_rid = ridtools.Rid(ipv4=self._data["ipHostNumber"][0])
|
||||
|
||||
# Lock ip
|
||||
self.lock('ipHostNumber', ip)
|
||||
|
||||
self._set('ipHostNumber', [ip])
|
||||
|
||||
self.rid("%d" % my_rid)
|
||||
return ip
|
||||
|
||||
def rid(self, rid=None):
|
||||
"""
|
||||
Retourne le rid si rid == None, l'affecte sinon.
|
||||
"""
|
||||
if rid == None:
|
||||
return self._data.get('rid', [''])[0]
|
||||
|
||||
rid_t = ridtools.Rid(ipv4=self.ip())
|
||||
|
||||
if int(rid_t) != int(rid):
|
||||
raise ValueError('L\'ip et le rid doivent correspondre.')
|
||||
|
||||
self.lock('rid', '%s' % rid)
|
||||
self._set('rid', ['%s' % rid])
|
||||
|
||||
def exempt(self, new=None):
|
||||
"""
|
||||
Liste des réseaux vers lesquels on ne compte pas l'upload
|
||||
|
|
|
@ -6,6 +6,8 @@ Restauration d'un objet précédement détruit dans la base.
|
|||
|
||||
Copyright (C) Frédéric Pauget
|
||||
Licence : GPLv2
|
||||
|
||||
Attention, ce fichier est osbolète
|
||||
"""
|
||||
|
||||
import cPickle, sys
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# MIDTOOLS.PY -- Gestion de la conversion mid <-> IP
|
||||
# RIDTOOLS.PY -- Gestion de la conversion rid <-> IP
|
||||
#
|
||||
# Copyright (C) 2010 Olivier Iffrig
|
||||
# (c) 2010 Nicolas Dandrimont
|
||||
# Authors: Olivier Iffrig <iffrig@crans.org>
|
||||
# Nicolas Dandrimont <olasd@crans.org>
|
||||
# Adapté par Pierre-Elliott Bécue pour cause de changement de schéma.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -25,53 +26,53 @@ import netaddr
|
|||
|
||||
import config
|
||||
|
||||
class Mid(object):
|
||||
class Rid(object):
|
||||
"""
|
||||
Permet de décortiquer un mid et d'obtenir les IP correspondantes
|
||||
Permet de décortiquer un rid et d'obtenir les IP correspondantes
|
||||
|
||||
Variables d'instance :
|
||||
- mid : le mid
|
||||
- type : type de mid (cf. config.mid et [1])
|
||||
- reste : le "reste" du mid (permettant de calculer l'IP par exemple)
|
||||
- ipv4_dispo : une IPv4 existe pour ce mid
|
||||
- rid : le rid
|
||||
- type : type de rid (cf. config.rid et [1])
|
||||
- reste : le "reste" du rid (permettant de calculer l'IP par exemple)
|
||||
- ipv4_dispo : une IPv4 existe pour ce rid
|
||||
- priv : cette machine ne doit pas être accessible de l'extérieur
|
||||
|
||||
[1] http://wiki.crans.org/CransTechnique/PlanAdressage#Machines
|
||||
"""
|
||||
|
||||
def __init__(self, mid=None, ipv4=None):
|
||||
self.mid = None
|
||||
def __init__(self, rid=None, ipv4=None):
|
||||
self.rid = None
|
||||
self.reste = False
|
||||
self.type = None
|
||||
self.ipv4_dispo = False
|
||||
self.priv = False
|
||||
|
||||
if mid is not None:
|
||||
self.__parse(mid)
|
||||
if rid is not None:
|
||||
self.__parse(rid)
|
||||
elif ipv4 is not None:
|
||||
self.__from_ipv4(ipv4)
|
||||
else:
|
||||
raise ValueError("Un des champs mid et ipv4 doit être défini")
|
||||
raise ValueError("Un des champs rid et ipv4 doit être défini")
|
||||
|
||||
def __parse(self, mid):
|
||||
"""Peuple les champs de l'instance par rapport au mid"""
|
||||
self.mid = mid
|
||||
def __parse(self, rid):
|
||||
"""Peuple les champs de l'instance par rapport au rid"""
|
||||
self.rid = rid
|
||||
|
||||
for tp, (start, end) in config.mid.iteritems():
|
||||
if start <= mid <= end:
|
||||
for tp, (start, end) in config.rid.iteritems():
|
||||
if start <= rid <= end:
|
||||
self.type = tp
|
||||
break
|
||||
else:
|
||||
raise ValueError("mid inconnu : %d" % mid)
|
||||
raise ValueError("rid inconnu : %d" % rid)
|
||||
|
||||
self.ipv4_dispo = (mid & (1 << 15)) == 0 and self.type != 'special' or self.mid in config.mid_machines_speciales
|
||||
self.ipv4_dispo = (rid & (1 << 15)) == 0 and self.type != 'special' or self.rid in config.rid_machines_speciales
|
||||
|
||||
self.priv = (mid & (1 << 14)) != 0
|
||||
self.priv = (rid & (1 << 14)) != 0
|
||||
|
||||
if self.type == 'personnel-ens':
|
||||
self.reste = mid & 0xff
|
||||
self.reste = rid & 0xff
|
||||
else:
|
||||
self.reste = mid & 0x7ff
|
||||
self.reste = rid & 0x7ff
|
||||
|
||||
def __from_ipv4(self, ip):
|
||||
"""Peuple les champs à partir de l'ipv4 donnée"""
|
||||
|
@ -93,25 +94,25 @@ class Mid(object):
|
|||
if self.type:
|
||||
break
|
||||
else:
|
||||
for mid, ip_speciale in config.mid_machines_speciales.items():
|
||||
for rid, ip_speciale in config.rid_machines_speciales.items():
|
||||
if ip == netaddr.IPAddress(ip_speciale):
|
||||
self.mid = mid
|
||||
self.rid = rid
|
||||
self.type = "special"
|
||||
break
|
||||
else:
|
||||
raise ValueError("%s dans aucun des réseaux gérés par le Cr@ns..." % ip)
|
||||
|
||||
if not self.mid:
|
||||
self.mid = config.mid[self.type][0] + ip.value - netaddr.IPNetwork(config.NETs[self.type][0]).value
|
||||
if not self.rid:
|
||||
self.rid = config.rid[self.type][0] + ip.value - netaddr.IPNetwork(config.NETs[self.type][0]).value
|
||||
|
||||
if self.mid > config.mid[self.type][1]:
|
||||
if self.rid > config.rid[self.type][1]:
|
||||
raise ValueError("%s trop élevée pour le réseau '%s'" % (ip, self.type))
|
||||
|
||||
if self.type == 'personnel-ens':
|
||||
self.reste = self.mid & 0xff
|
||||
self.reste = self.rid & 0xff
|
||||
else:
|
||||
self.reste = self.mid & 0x7ff
|
||||
return self.mid
|
||||
self.reste = self.rid & 0x7ff
|
||||
return self.rid
|
||||
|
||||
def ipv4(self):
|
||||
"""
|
||||
|
@ -125,7 +126,7 @@ class Mid(object):
|
|||
net = netaddr.IPNetwork(config.NETs[self.type][0])
|
||||
self.__ipv4 = netaddr.IPAddress(net.first + self.reste)
|
||||
else:
|
||||
self.__ipv4 = netaddr.IPAddress(config.mid_machines_speciales[self.mid])
|
||||
self.__ipv4 = netaddr.IPAddress(config.rid_machines_speciales[self.rid])
|
||||
|
||||
return self.__ipv4
|
||||
|
||||
|
@ -138,13 +139,13 @@ class Mid(object):
|
|||
|
||||
global_net = netaddr.IPNetwork(config.prefix["subnet"][0])
|
||||
global_net.prefixlen = 64
|
||||
return global_net.next(self.mid)
|
||||
return global_net.next(self.rid)
|
||||
|
||||
def __repr__(self):
|
||||
if self.ipv4_dispo:
|
||||
return "<Mid(mid=%s, ipv4='%s')>" % (self.mid, self.ipv4())
|
||||
return "<Rid(rid=%s, ipv4='%s')>" % (self.rid, self.ipv4())
|
||||
else:
|
||||
return "<Mid(%s)>" % self.mid
|
||||
return "<Rid(%s)>" % self.rid
|
||||
|
||||
def __int__(self):
|
||||
return self.mid
|
||||
return self.rid
|
|
@ -37,7 +37,7 @@ le mode d'affichage condensé au lieu du mode détaillé (défaut %(limit_aff_de
|
|||
d'historique affichées (défaut %(limit_aff_historique)i)
|
||||
-d <num> ou --limit-blacklist=<num> : limitation du nombre de lignes
|
||||
d'historique des déconnexions affichées (défaut %(limit_aff_blacklist)i)
|
||||
-s ou --ssh : affiche les fingerpring ssh des machines
|
||||
-s ou --ssh : affiche les fingerprint ssh des machines
|
||||
"""
|
||||
|
||||
try:
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- encoding: utf-8 -*-
|
||||
#
|
||||
# CHECK_MID.PY -- Vérification et application de la correspondance mid <-> IP
|
||||
# CHECK_RID.PY -- Vérification et application de la correspondance rid <-> IP
|
||||
#
|
||||
# Copyright (c) 2010 Nicolas Dandrimont
|
||||
# Authors: Nicolas Dandrimont <olasd@crans.org>
|
||||
# Adapté par Pierre-Elliott Bécue pour cause de changement de schéma.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
|
@ -22,13 +23,13 @@
|
|||
import sys
|
||||
sys.path.append('/usr/scripts/gestion')
|
||||
|
||||
from midtools import Mid
|
||||
from ridtools import Rid
|
||||
from ldap_crans import crans_ldap
|
||||
|
||||
from optparse import OptionParser
|
||||
|
||||
def check_mid(normalize):
|
||||
"""Vérifie que les mid correspondent bien aux IP.
|
||||
def check_rid(normalize):
|
||||
"""Vérifie que les rid correspondent bien aux IP.
|
||||
|
||||
Si normalize = True, modifie la base pour que la correspondance
|
||||
soit bien vérifiée"""
|
||||
|
@ -38,24 +39,24 @@ def check_mid(normalize):
|
|||
s = cl.search("ipHostNumber=*")
|
||||
for m in s["machine"]:
|
||||
counter += 1
|
||||
mid = int(m.id())
|
||||
rid = int(m.rid())
|
||||
ip = m.ip()
|
||||
try:
|
||||
mid_t = Mid(ipv4=ip)
|
||||
rid_t = Rid(ipv4=ip)
|
||||
except ValueError, e:
|
||||
print e
|
||||
else:
|
||||
if mid != int(mid_t):
|
||||
print "%s: %s!=%s" % (m.Nom(), mid, int(mid_t))
|
||||
if rid != int(rid_t):
|
||||
print "%s: %s!=%s" % (m.Nom(), rid, int(rid_t))
|
||||
if normalize:
|
||||
m.conn.rename_s(m.dn, "%s=%d" % (m.idn, mid_t))
|
||||
m.rid(int(rid_t))
|
||||
print counter
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = OptionParser()
|
||||
parser.set_defaults(normalize=False)
|
||||
parser.add_option("-n", "--normalize", action="store_true", help="Modifie les mid pour les faire conformer au schema")
|
||||
parser.add_option("-n", "--normalize", action="store_true", help="Modifie les rid pour les faire conformer au schema")
|
||||
|
||||
(options, args) = parser.parse_args()
|
||||
|
||||
check_mid(options.normalize)
|
||||
check_rid(options.normalize)
|
Loading…
Add table
Add a link
Reference in a new issue