#!/usr/bin/perl # DNS Config Parser # Copyright (C) 2002 MandrakeSoft Arnaud Desmons # # 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 # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. package Dnsconf; require "__WIZ_HOME__/common/scripts/Vareqval.pm"; require "__WIZ_HOME__/common/scripts/DrakconnectConf.pm"; use MDK::Common; use strict; use standalone; my $o = DrakconnectConf->new(); my $dns1; my $dns2; sub get_root { my $file = "/etc/sysconfig/named"; if (-f $file) { my %mdk = Vareqval->get($file); return $mdk{ROOTDIR}; } ""; } my $file = "/etc/named.conf"; if (-f $file) { open (NEW, "< $file"); DNS : while () { $dns2 = ""; if (m/^\s*options\s*\{/s...m/^\s*\}\;/s ) { if (m/^\s*forwarders\s*\{/s...m/^\s*\}\;/s ) { if (/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/) { $dns2 = "$1.$2.$3.$4"; $dns1 and next DNS; $dns1 = $dns2; } } } } close (NEW); } sub get_dns1 { $dns1; } sub get_dns2 { $dns2; } sub up_serial { my ($file) = @_; my $serial_nbm = `date +%Y%m%d00` or die "date not found: $!"; output($file, map { my $line = $_; if (/^(\s*)(\d*)(\s*;\s*Serial.*)$/) { my $serial_f = $2; $serial_f++; if ($serial_f <= $serial_nbm) { $serial_f = $serial_nbm; chomp($serial_f); $line = "$1$serial_f$3\n"; } } $line; } cat_($file)); } sub do_it { my $wiz_ip_server = $o->get_from_known_dev("IP"); my $wiz_domain_name = $o->get("DomainName"); my $wiz_host_name = $o->get("SystemName"); my $s_trunc = "$1.$2.$3" if $wiz_ip_server =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; my $ds = "$4" if $wiz_ip_server =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; my $host = "$1" if $wiz_host_name =~ /(.*?)\..*/; my $reversnet = "$3$2$1" if $wiz_ip_server =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; my $file = "/etc/host.conf"; MDK::Common::cp_af($file, $file.".orig"); MDK::Common::cp_af("__WIZ_HOME__/dns_wizard/scripts/host.conf.default", $file); $file = "/etc/named.conf"; -f $file and MDK::Common::cp_af($file, $file.".orig"); my $ispns1 = $ENV{wiz_ext_dns1} || "// __ISPN1__"; my $ispns2 = $ENV{wiz_ext_dns2} || "// __ISPN2__"; output($file, map { s|__ISPNS1__|$ispns1|g; s|__ISPNS2__|$ispns2|g; s|__dname__|$wiz_domain_name|g; s|__revnet__|$reversnet|g; s|__net__|$s_trunc|g; $_; } cat_("__WIZ_HOME__/dns_wizard/scripts/named.conf.default")); standalone::explanations("$file : DNS1: $ispns1 DNS2: $ispns2"); # Bug fix for bind 9: if (! -f "/etc/rndc.key") { system("touch /etc/rndc.key") or die "can not touch /etc/rndc.key"}; # root.hints $file="/var/named/root.hints"; -f $file and MDK::Common::cp_af($file, $file . ".orig"); MDK::Common::cp_af("__WIZ_HOME__/dns_wizard/scripts/root.hints.default", $file); standalone::explanations("$file clobbered"); # 127.0.0.rev $file="/var/named/127.0.0.rev"; -f $file and MDK::Common::cp_af($file, $file . ".orig"); output($file, map { s|__hname__|$wiz_host_name|g; $_; } cat_("__WIZ_HOME__/dns_wizard/scripts/127.0.0.rev.default")); standalone::explanations("$file : hostname: $wiz_host_name"); up_serial($file); # $ipnet.rev $file = "/var/named/$s_trunc.rev"; -f $file and MDK::Common::cp_af($file, $file.".orig"); output($file, map { s|__dname__|$wiz_domain_name|g; s|__hname__|$wiz_host_name|g; s|__revnet__|$reversnet|g; s|__nb__|$ds|g; $_; } cat_("__WIZ_HOME__/dns_wizard/scripts/ipnet.rev.default")); up_serial($file); standalone::explanations("$file : domain: $wiz_domain_name hostname: $wiz_host_name revnet: $reversnet nb: $ds"); # $domain.db $file = "/var/named/$wiz_domain_name.db"; -f $file and MDK::Common::cp_af($file, $file.".orig"); output($file, map { s|__dname__|$wiz_domain_name|g; s|__hname__|$wiz_host_name|g; s|__ip__|$wiz_ip_server|g; s|__host__|$host|g; s|__nb__|$ds|g; $_; } cat_("__WIZ_HOME__/dns_wizard/scripts/domain.db.default")); up_serial($file); standalone::explanations("$file : domain: $wiz_domain_name hostname: $wiz_host_name revnet: $reversnet nb: $ds"); # resolv.conf $file = "/etc/resolv.conf"; -f $file and MDK::Common::cp_af($file, $file.".orig"); open(NEW, "> $file"); print NEW "domain $wiz_domain_name\n"; print NEW "nameserver $wiz_ip_server\n"; standalone::explanations("$file : domain: $wiz_domain_name nameserver: $wiz_ip_server"); system("/sbin/chkconfig --level 235 named on"); system("/etc/rc.d/init.d/named restart"); 10; } 1;