mirror of
https://github.com/webmin/webmin.git
synced 2025-07-25 01:23:45 +00:00
72 lines
2.0 KiB
Perl
Executable File
72 lines
2.0 KiB
Perl
Executable File
#!/usr/local/bin/perl
|
|
# create_slave.cgi
|
|
# Create a new slave zone
|
|
|
|
require './dns-lib.pl';
|
|
&ReadParse();
|
|
$whatfailed = "Failed to create slave zone";
|
|
%access = &get_module_acl();
|
|
$access{'slave'} || &error("You are not allowed to create slave zones");
|
|
|
|
# validate inputs
|
|
if ($in{'rev'}) {
|
|
$in{'zone'} =~ /^[\d\.]+$/ ||
|
|
&error("'$in{'zone'}' is not a valid network");
|
|
$in{'zone'} = &ip_to_arpa($in{'zone'});
|
|
}
|
|
else {
|
|
$in{'zone'} =~ /^[A-z0-9\-\.]+$/ ||
|
|
&error("'$in{'zone'}' is not a valid domain name");
|
|
}
|
|
$in{'zone'} =~ s/\.$//g;
|
|
@masters = split(/\s+/, $in{'masters'});
|
|
foreach $m (@masters) {
|
|
&check_ipaddress($m) ||
|
|
&error("'$m' is not a valid master server address");
|
|
}
|
|
if (!@masters) {
|
|
&error("You must enter at least one master server");
|
|
}
|
|
$base = $access{'dir'} eq '/' ? &base_directory($conf) : $access{'dir'};
|
|
if ($in{'file_def'} == 0) {
|
|
$in{'file'} =~ /^\S+$/ ||
|
|
&error("'$in{'file'}' is not a valid filename");
|
|
if ($in{'file'} !~ /^\//) {
|
|
$file = $base."/".$in{'file'};
|
|
}
|
|
else { $file = $in{'file'}; }
|
|
&allowed_zone_file(\%access, $file) ||
|
|
&error("'$file' is not an allowable zone file");
|
|
if (!-r $file) {
|
|
&lock_file($file);
|
|
open(ZONE, "> $file") ||
|
|
&error("Failed to create '$file' : $?");
|
|
close(ZONE);
|
|
&unlock_file($file);
|
|
}
|
|
}
|
|
elsif ($in{'file_def'} == 2) {
|
|
if ($in{'rev'}) {
|
|
$file = $base."/".&arpa_to_ip($in{'zone'}).".rev";
|
|
}
|
|
else {
|
|
$file = $base."/".$in{'zone'}.".hosts";
|
|
}
|
|
}
|
|
|
|
|
|
@vals = ($in{'zone'}, @masters);
|
|
if ($file) { push(@vals, $file); }
|
|
&lock_file($config{'named_boot_file'});
|
|
&create_zone({ 'name' => 'secondary', 'values' => \@vals });
|
|
&unlock_file($config{'named_boot_file'});
|
|
&webmin_log("create", "slave", $in{'zone'}, \%in);
|
|
|
|
# Add the new zone to the access list
|
|
if ($access{'zones'} ne '*') {
|
|
$access{'zones'} .= " ".$in{'zone'};
|
|
&save_module_acl(\%access);
|
|
}
|
|
&redirect("");
|
|
|