commit 9de6a7c11d

@ -19383,10 +19383,13 @@ eth0, eth1, ... etc."%net)
return False
return True
def createDNSHost(self, fullHostName, ip, delDNSRecord=True):
def createDNSHost(self, fullHostName,ip,delDNSRecord=True,checkName=True):
"""Добавляет A и PTR записи в DNS сервис
Если запись существует - удаляет ее (delDNSRecord=True)
Если запись существует и не в динамическом диапазоне -
не делает никаких действий
(checkName=True совместно с delDNSRecord=True)
"""
# Ищем А запись в DNS
flagCreateARecord = True
@ -19402,6 +19405,19 @@ eth0, eth1, ... etc."%net)
if ip in aRecords:
flagCreateARecord = False
flagDelARecord = False
if delDNSRecord and checkName:
flagFoundIpNotRanges = False
dhcpObj = dncpTxt()
for ipAdr in aRecords:
# Проверка на диапазон адресов
flagCorrect, flagError =\
self.isCorrectDynamicIP(\
fullHostName.partition(".")[0], ipAdr, dhcpObj,
False)
if flagError:
return False
if not flagCorrect:
return True
else:
if delDNSRecord:
# Удаляем A записи имеющие этот IP в прямой зоне
@ -19561,12 +19577,17 @@ incompatible, use one of the options"))
domain = listDomain[0].strip()
host = options['host']
fullHostName = "%s.%s"%(host,domain)
# Проверка на диапазон адресов
flagCorrect, flagError = self.isCorrectDynamicIP(host, ip)
if flagError:
return False
if not flagCorrect:
return True
# устанавливаем переменные в объекте сервиса DHCP
self.createClVars()
self.clVars.Set("sr_dhcp_set","on",True)
self.clVars.Set("sr_dns_set","on",True)
self.servDnsObj.clVars = self.clVars
if not self.addDNSHost(fullHostName, ip, adminDn, adminPw, baseDN):
return False
return True
@ -20013,6 +20034,7 @@ network %s")%net)
break
return flagCorrect
def isCorrectNetRange(self, net, listRangeNew, dhcpObj=False):
"""Проверяет корректность нового диапазона динамических адресов"""
if not dhcpObj:
@ -20065,6 +20087,100 @@ network %s")%net)
break
return flagCorrect
def isCorrectDynamicIP(self, host, ip, dhcpObj=False, printErr=True):
"""Проверяет имя хоста и ip при добавлении при помощи демона"""
flagError = False
if not dhcpObj:
dhcpObj = dncpTxt()
dataNets = dhcpObj.getDataInAllSubnet()
dataHosts = dhcpObj.getDataInAllHost()
getPar = lambda opt, data: map(lambda x: opt in x[1].keys() and\
(x[0],x[1][opt]) or (), data)
ranges = getPar('range', dataNets)
# сеть без последнего октета
rpIP = ip.rpartition(".")[0]
try:
numIP = int(ip.rpartition(".")[2])
except:
if printErr:
self.printERROR(_("IP address %s incorrect")%ip)
return (False, True)
flagCorrect = False
if not ranges:
if printErr:
self.printERROR(_("Can not found 'range' in config file %s")\
%dhcpObj.nameConfigFile)
return (False, True)
# Флаг ip найден в одной из сетей
flagFoundIpInNet = False
# Флаг ошибки в конфигурационном файле
flagErrorConfig = False
# Проверка на сеть
for data in ranges:
flagCorrect = False
if not data:
break
net, r = data
rpIPA = r[0].rpartition(".")[0]
rpIPB = r[1].rpartition(".")[0]
if rpIPA != rpIPB:
flagErrorConfig = True
break
if len(r) != 2:
flagErrorConfig = True
break
if rpIP == rpIPA:
try:
numA = int(r[0].rpartition(".")[2])
numB = int(r[1].rpartition(".")[2])
except:
flagErrorConfig = True
break
# ip найден в существующих сетях
if not flagFoundIpInNet:
flagFoundIpInNet = True
numA, numB = [max([numA,numB]), min([numA,numB])]
if numA > numB:
if numIP <= numA and numIP >= numB:
flagCorrect = True
break
else:
flagErrorConfig = True
break
# Проверка на статические хосты
if not flagCorrect:
# Если ip не найден в существующих сетях
if not flagFoundIpInNet:
flagError = True
if printErr:
self.printERROR(_("Can not found %s in networks") %ip+" " +\
_("in config file %s")%dhcpObj.nameConfigFile)
# Если ошибка в конфигурационном файле
elif flagErrorConfig:
flagError = True
if printErr:
self.printErrConfig(dhcpObj, net)
if not flagError:
staticIPs = getPar('fixed-address', dataHosts)
flagFoundHost = False
for data in staticIPs:
if not data:
break
hostname, stIP = data
if host == hostname:
flagFoundHost = True
break
if not flagFoundHost:
if printErr:
self.printERROR(\
_("Can not found %s in dynamic ip range")\
%ip+" "+_("in config file %s")%\
dhcpObj.nameConfigFile)
return (flagCorrect, flagError)
def isCorrectStaticIP(self, ip, dhcpObj=False):
"""Проверяет ip на существующие сети и диапазон динамических адресов"""
if not dhcpObj:

Loading…
Cancel
Save