Project

General

Profile

Bug #14808 ยป dhcp_isc_main.rb__regexp.patch

managa block {} into subnet statement - David PORTE, 10/06/2016 03:27 PM

View differences:

foreman-proxy__patched/usr/share/foreman-proxy/modules/dhcp_isc/dhcp_isc_main.rb 2016-10-06 21:12:22.874460014 +0200
initialize_memory_store_with_dhcp_records(parse_config_and_leases_for_records)
end
SUBNET_BLOCK_REGEX = /subnet\s+([\d\.]+)\s+netmask\s+([\d\.]+)\s*\{\s*([\w-]+\s*\{[^{}]*\}\s*|[\w-][^{}]*;\s*)*\}/
SUBNET_BLOCK_REGEX = /subnet\s+([\d\.]+)\s+netmask\s+([\d\.]+)\s+<<(.*?)>>/
def parse_config_for_subnets
ret_val = []
# Extract subnets config block
......
return {} unless subnet_config_lines
options = {}
subnet_config_lines.split(';').each do |option|
subnet_config_lines.split(/;|\{/).each do |option|
case option
when /^option\s+routers\s+[\d\.]+/
options[:routers] = get_ip_list_from_config_line(option)
when /^option\s+domain\-name\-servers\s+[\d\.]+/
options[:domain_name_servers] = get_ip_list_from_config_line(option)
when /^range\s+[\d\.]+\s+[\d\.]+/
when /^range\s+(|dynamic\-bootp\s+)[\d\.]+\s+[\d\.]+/
# get IP addr range used for this subnet
options[:range] = get_range_from_config_line(option)
end
......
def read_config file, ignore_includes=false
logger.debug "Reading config file #{file}"
to_return = []
o_bracket = {subnet: 0}
File.readlines(file).each do |line|
line = line.split('#').first.strip # remove comments, left and right whitespace
next if line.empty? # remove blank lines
......
# and does not create a multidimensional array
to_return.concat(read_config(conf, ignore_includes))
else
# subnet statement 'subnet subnet-number netmask netmask {'
if /^(subnet.+?netmask.+?)\{$/ =~ line
o_bracket[:subnet] = 1
line = $1 + "<<"
end
if o_bracket[:subnet] > 0
new_line = ""
line.split(/({|})/).each do |word|
case word
when /^\}$/
o_bracket[:subnet] -= 1
word = ">>" if o_bracket[:subnet] == 0
when /^\{$/
o_bracket[:subnet] += 1
end
new_line += word
end
line = new_line
end
to_return << line
end
end
    (1-1/1)