Handle hostnames with upper-case letters
[webmin.git] / dnsadmin / save_master.cgi
1 #!/usr/local/bin/perl
2 # save_master.cgi
3 # Save changes to an SOA record
4
5 require './dns-lib.pl';
6 &ReadParse();
7 $whatfailed = "Failed to update zone";
8 %access = &get_module_acl();
9 &can_edit_zone(\%access, $in{'origin'}) ||
10         &error("You are not allowed to edit this zone");
11
12 # check inputs
13 $in{'master'} =~ /^[A-z0-9\-\.]+$/ ||
14         &error("'$in{'master'}' is not a valid master server");
15 $in{'email'} =~ /^\S+\@\S+$/ ||
16         &error("'$in{'email'}' is not a valid email address");
17 $in{'refresh'} =~ /^\S+$/ ||
18         &error("'$in{'refresh'}' is not a valid refresh time");
19 $in{'retry'} =~ /^\S+$/ ||
20         &error("'$in{'retry'}' is not a valid transfer retry time");
21 $in{'expiry'} =~ /^\S+$/ ||
22         &error("'$in{'expiry'}' is not a valid expiry time");
23 $in{'minimum'} =~ /^\S+$/ ||
24         &error("'$in{'minimum'}' is not a valid default TTL");
25 $in{'email'} =~ s/\@/\./; $in{'email'} .= ".";
26
27 @recs = &read_zone_file($in{'file'}, $in{'origin'});
28 $old = $recs[$in{'num'}];
29 if ($config{'soa_style'} == 1 && $old->{'values'}->[2] =~ /^(\d{8})(\d\d)$/) {
30         if ($1 eq &date_serial()) { $serial = sprintf "%d%2.2d", $1, $2+1; }
31         else { $serial = &date_serial()."00"; }
32         }
33 else {
34         $serial = $old->{'values'}->[2]+1;
35         }
36 $vals = "$in{'master'} $in{'email'} (\n".
37         "\t\t\t$serial\n".
38         "\t\t\t$in{'refresh'}\n".
39         "\t\t\t$in{'retry'}\n".
40         "\t\t\t$in{'expiry'}\n".
41         "\t\t\t$in{'minimum'} )";
42 &lock_file($in{'file'});
43 &modify_record($in{'file'}, $old, $old->{'name'},
44               $old->{'ttl'}, $old->{'class'}, "SOA", $vals);
45 &unlock_file($in{'file'});
46 &webmin_log("soa", undef, $in{'origin'}, \%in);
47 &redirect("edit_master.cgi?index=$in{'index'}");
48