#!/usr/bin/perl # Drakwizard # 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 Clientconf; require "__WIZ_HOME__/common/scripts/Vareqval.pm"; require "__WIZ_HOME__/common/scripts/IFCFG.pm"; use MDK::Common; use strict; use standalone; my $o = IFCFG->new(); my $wiz_domain_name = $o->network_get("DOMAINNAME"); my $wiz_ip_server = $o->itf_get("IPADDR"); sub name { $o->network_get("HOSTNAME"); } sub ip { $wiz_ip_server; } sub check { $> and return 1; $o->is_dhcp() and return 2; 0; } sub get_root { my $file = "/etc/sysconfig/named"; if (-f $file) { my %mdk = Vareqval->get($file); return $mdk{ROOTDIR}; } ""; } 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 test { !$ENV{wiz_client_name} and return 1; !$ENV{wiz_client_ip} and return 1; 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 $dc = "$4" if $ENV{wiz_client_ip} =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; my $sc_trunc = "$1.$2.$3" if $ENV{wiz_client_ip} =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; !$sc_trunc and return 1; !$dc and return 1; !$ds and return 1; !$s_trunc and return 1; ($s_trunc != $sc_trunc) and return 1; ($dc == $ds || $dc < 0 || $dc > 255) and return 1; 10; } sub do_it { my $date = `date`; chomp($date); my $wiz_ip_net = "$1.$2.$3.0" if $wiz_ip_server =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; 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 $dc = "$4" if $ENV{wiz_client_ip} =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; my $file="/var/named/$wiz_domain_name.db"; MDK::Common::cp_af($file, $file.".orig"); open(NEW, ">> $file") or die "can not open $file"; print NEW "\n$ENV{wiz_client_name} IN A $ENV{wiz_client_ip} ; $date"; close(NEW) or die "can not close $file"; up_serial($file); my $file="/var/named/$s_trunc.rev"; MDK::Common::cp_af($file, $file.".orig"); open(NEW, ">> $file") or die "can not open $file"; print NEW "\n$dc IN PTR $ENV{wiz_client_name}. ; $date"; close(NEW) or die "can not close $file"; up_serial($file); system("/etc/rc.d/init.d/named restart"); 10; } 1;