diff options
Diffstat (limited to 'client_wizard')
-rwxr-xr-x | client_wizard/Bind_client.pm | 181 | ||||
-rw-r--r-- | client_wizard/Makefile | 15 |
2 files changed, 184 insertions, 12 deletions
diff --git a/client_wizard/Bind_client.pm b/client_wizard/Bind_client.pm new file mode 100755 index 00000000..4eff26d8 --- /dev/null +++ b/client_wizard/Bind_client.pm @@ -0,0 +1,181 @@ +#!/usr/bin/perl + +# Drakwizard + +# Copyright (C) 2002 Arnaud Desmons <adesmons@mandrakesoft.com> +# 2003 Florent Villard <warly@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 Bind_client; +use strict; + +use standalone; +use interactive; +use common; +use MDK::Wizard::Wizcommon; + +my $wiz = new Wizcommon; +my $wiz_ip_server = $wiz->{net}->itf_get("IPADDR"); +my $wiz_domain_name = $wiz->{net}->network_get("DOMAINNAME"); + +my $o = { + name => N('DNS Client Wizard'), + var => { + client_ip => '', + client_name => '' + }, + needed_rpm => [ ] + }; + +$o->{pages} = { + welcome => { + name => N('DNS Client Wizard') . "\n\n" . N('A client of your local network is a machine connected to the network having its own name and IP number.') . "\n\n" . N('This wizard will help you in adding a new client in your local DNS.') . "\n\n" . N('The server will use the informations you enter here to make the name of the client available to other machines into your network.') . "\n\n" . N('Press next to begin, or Cancel to leave this wizard.'), + post => sub { $wiz->check_dhcp }, + no_back => 1, + next => 'client_id' + }, + client_id => { + name => N('Client identification:') . "\n\n" . N('Your client on the network will be identified by name, as in clientname.company.net. Every machine on the network must have a (unique) IP address, in the usual dotted syntax.') . "\n\n" . N("(you don't need to type the domain after the name)") . "\n\n" . N('Note that the given IP number and client name should be unique in the network.'), + pre => sub { + $o->{var}{client_ip} = ip(); + $o->{var}{client_name} = name(); + }, + post => \&check, + data => [ + { label => '' }, + { label => N('Name of the machine:'), val => \$o->{var}{client_name} }, + { label => N('IP number of the machine:'), val => \$o->{var}{client_ip} }, + ], + next => 'summary' + }, + dhcp_warning => { + name => N('Warning'), + data => [ { label => N('You are in dhcp, server may not work with your configuration.') } ], + next => 'client_id' + }, + system_error => { + name => N('Error'), + data => [ { label => N('System error, no configuration done') } ], + next => 'client_id' + }, + error => { + name => N('Error'), + data => [ { label => N('This is not a valid address... press next to continue') } ], + next => 'client_id' + }, + summary => { + name => N('Adding a new client to your network') . "\n\n" . N('The wizard collected the following parameters needed to add a client to your network:') . "\n\n" . N('To accept these values, and add your client, click the Next button or use the Back button to correct them.'), + data => [ + { label => N('Client name'), fixed_val => \$o->{var}{client_name} }, + { label => '' }, + { label => N('Client IP:'), fixed_val => \$o->{var}{client_ip} }, + ], + post => \&do_it, + next => 'end' + }, + end => { + name => N('Congratulations'), + data => [ { label => N('The wizard successfully added the client.') } ], + end => 1, + next => 0 + }, +}; + +sub check_dhcp { + $wiz->{net}->is_dhcp() and return 'dhcp_warning'; +} + +sub name { + $wiz->{net}->network_get("HOSTNAME"); +} + +sub ip { + $wiz_ip_server; +} + +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 (undef, undef, undef, $mday, $mon, $year) = gmtime(time); + $year += 1900; + my $serial_nbm = sprintf "%4dY%2dm%2d00", $year, $mon, $mday; + 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 { + !$o->{client_name} and return 1; + !$o->{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 || !$dc || !$ds || !$s_trunc || ($s_trunc != $sc_trunc) || ($dc == $ds || $dc < 0 || $dc > 255)) and return 'error'; +} + +sub do_it { + $::DEBUG and return; + 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"); +} + +sub new { + my ($class, $conf) = @_; + bless { + o => $o, + }, $class; +} + +1; diff --git a/client_wizard/Makefile b/client_wizard/Makefile index 24472efe..bf0d1746 100644 --- a/client_wizard/Makefile +++ b/client_wizard/Makefile @@ -1,17 +1,8 @@ - install2: su -c 'make install' install: - mkdir -p --mode=u=rwx,g=rx,o=rx ${prefix}/share/wizards - mkdir -p --mode=u=rwx,g=rx,o=rx ${prefix}/share/wizards/client_wizard - mkdir -p --mode=u=rwx,g=rx,o=rx ${prefix}/share/wizards/client_wizard/scripts mkdir -p --mode=u=rwx,g=rx,o=rx ${prefix}/share/wizards/client_wizard/images - install --mode=u=rw,g=r,o=r -p client.wiz ${prefix}/share/wizards/client_wizard - - - - install --mode=a=r -p ./images/DNS.png ${prefix}/share/wizards/client_wizard/images - install --mode=u=rwx,g=rx,o=rx -p scripts/*.sh ${prefix}/share/wizards/client_wizard/scripts - install --mode=u=rw,g=r,o=r -p scripts/Clientconf.pm ${prefix}/share/wizards/client_wizard/scripts - + mkdir -p --mode=u=rwx,g=rx,o=rx ${prefix}/$(PERL_VENDORLIB)/MDK/Wizard + install --mode=u=rw,g=r,o=r -p *.pm ${prefix}/$(PERL_VENDORLIB)/MDK/Wizard/ + install --mode=a=r -p ./images/*.png ${prefix}/share/wizards/client_wizard/images |