diff options
Diffstat (limited to 'dhcp_wizard/scripts/Dhcpconf.pm')
-rw-r--r-- | dhcp_wizard/scripts/Dhcpconf.pm | 158 |
1 files changed, 0 insertions, 158 deletions
diff --git a/dhcp_wizard/scripts/Dhcpconf.pm b/dhcp_wizard/scripts/Dhcpconf.pm deleted file mode 100644 index e75cd855..00000000 --- a/dhcp_wizard/scripts/Dhcpconf.pm +++ /dev/null @@ -1,158 +0,0 @@ -#!/usr/bin/perl - -# DHCP Conf Parser - -# Copyright (C) 2002 MandrakeSoft Arnaud Desmons <adesmons@mandrakesoft.com> -# -# 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 Dhcpconf; -require "__WIZ_HOME__/common/scripts/IFCFG.pm"; -#require "__WIZ_HOME__/common/scripts/DrakconnectConf.pm"; -use MDK::Common; -use strict; -use standalone; - -my $o = IFCFG->new(); -my $wiz_ip_server = $o->itf_get("IPADDR"); -my $d = "$4" if $wiz_ip_server =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; -my $s = "$1.$2.$3" if $wiz_ip_server =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; - -sub compute_range { - my $n; - if ($d <= 64) { $n = "65" } - elsif ($d <= 128) { $n = "129" } - else { $n = "1"} - "$s.$n"; -} - -sub compute_range2 { - my $n; - if ($d <= 128) { $n = "254" } - elsif ($d > 192) { $n = "192" } - else { $n = "128"} - "$s.$n"; -} - -sub check { -# FIXME : see check_range.sh - my $r1_trunc = "$1.$2.$3" if $o->{var}{ip1} =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; - my $r2_trunc = "$1.$2.$3" if $o->{var}{ip2} =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; - my $d1 = "$4" if $ENV{wiz_ip_range1} =~ /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/; - my $d2 = "$4" if $ENV{wiz_ip_range2} =~ /(\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})/; - if (!$r1_trunc) { standalone::explanations("DHCP wizard : incorrect adress range 1"); return 1} - if (!$r2_trunc) { standalone::explanations("DHCP wizard : incorrect adress range 2"); return 1} - if ($r1_trunc ne $s_trunc || $r2_trunc ne $s_trunc) { - standalone::explanations("DHCP wizard : range not in network"); - return 2; - } - if (!$d1 || !$d2 || $d1 > $d2) { standalone::explanations("DHCP wizard : bad range"); return 1} - if ($ds >= $d1 && $ds <= $d2) { standalone::explanations("DHCP wizard : server in range"); return 3} - 10; -} - -sub check_dhcp { - $o->is_dhcp() and return 1; - 0; -} - -sub do_it { - my $wiz_domain_name = $o->network_get("DOMAINNAME"); - my $wiz_host_name = $o->network_get("HOSTNAME"); - my $wiz_gateway = $o->network_get("GATEWAY"); - my $wiz_dns = $o->network_get("dnsServer"); - if ($wiz_dns eq '127.0.0.1') { - $wiz_dns = $wiz_ip_server - } - if (!$wiz_gateway) { - my $t = `LC_ALL=C /sbin/ip route list scope global`; - ($wiz_gateway) = $t =~ /default via (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) dev/; - } - 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 $err = check(); - return $err if $err != 10; - my $wiz_ip_range1 = $ENV{wiz_ip_range1}; - my $wiz_ip_range2 = $ENV{wiz_ip_range2}; - my $wiz_ip_netmask = $o->itf_get("NETMASK"); - my $wiz_device = $o->default_itf(); -# patch to rewrite when got new file about dhcp with INTERFACES value -# currently, I put the device to configure as dhcp server -# in /etc/sysconfig/dhcpd - -#[ -f /etc/sysconfig/dhcpd ] && cp -f /etc/sysconfig/dhcpd /var/tmp/wiz_bck/orig/dhcpd - my $file = "/etc/sysconfig/dhcpd"; - -f $file and MDK::Common::cp_af($file, $file.".orig"); - - $file = "/etc/rc.d/init.d/dhcpd"; -# now patching etc/rc.d/init.d/dhcpd - standalone::explanations("now patching etc/rc.d/init.d/dhcpd"); - if (!`grep INTERFACES $file`){ - MDK::Common::append_to_file($file, "\nINTERFACES=$wiz_device"); - MDK::Common::cp_af($file, $file . ".orig"); - my $tmp = `/bin/mktemp /tmp/Dhcpconf.XXXXXX` or die "can't make a temp file: $!"; - open(NEW, "> $tmp") or die "can't open $tmp: $!"; - open(OLD, "< $file") or die "can't open default: $!"; - while (<OLD>) { - if (m|daemon\s*/usr/sbin/dhcp|) { - print NEW "\tif [ -f /etc/sysconfig/dhcpd ]; then -\t\t. /etc/sysconfig/dhcpd -\t\tDEV=\$INTERFACES -\tfi\n"; - } - print NEW $_; - } - close(OLD); - close(NEW); - chomp($tmp); - system("mv $tmp $file"); - } - $file = "/etc/dhcpd.conf"; - -f $file and MDK::Common::cp_af($file, $file.".orig"); - output($file, map { - s|__hname__|$wiz_host_name|g; - s|__dns__|$wiz_dns|g; - s|__net__|$wiz_ip_net|g; - s|__ip__|$wiz_ip_server|g; - s|__mask__|$wiz_ip_netmask|g; - s|__rng1__|$wiz_ip_range1|g; - s|__rng2__|$wiz_ip_range2|g; - s|__dname__|$wiz_domain_name|g; - s|__gateway__|$wiz_gateway|g; - $_; - } cat_ ("__WIZ_HOME__/dhcp_wizard/scripts/dhcpd.conf.default")); - standalone::explanations("$file: hname = $wiz_host_name, net = $wiz_ip_net, ip = $wiz_ip_server, -mask = $wiz_ip_netmask, rng1 = $wiz_ip_range1, rng2 = $wiz_ip_range2, dname = $wiz_domain_name"); - MDK::Common::touch("/var/dhcpd/dhcpd.leases"); -# modifying webmin config - $file="/etc/webmin/dhcpd/config"; - if (-f $file) { - my %mdk = Vareqval->get($file); - $mdk{lease_file} = "/var/dhcpd/dhcpd.leases"; - $mdk{interfaces} = $wiz_device; - standalone::explanations("$file: lease_file = $mdk{lease_file}, interfaces = $mdk{interfaces}"); - Vareqval->commit($file, \%mdk); - !$ENV{wiz_authoritative} and output($file, map { - s|^\s*not\s*authoritative.*|\#$&|i; - $_ - } cat_ ("/etc/dhcpd.conf")); - } - - system("/etc/rc.d/init.d/dhcpd restart"); - 10; -} -1; - |