Handle hostnames with upper-case letters
[webmin.git] / bind8 / save_zonedef.cgi
1 #!/usr/local/bin/perl
2 # save_zonedef.cgi
3 # Save zone defaults
4
5 require './bind8-lib.pl';
6 &ReadParse();
7 &error_setup($text{'zonedef_err'});
8 $access{'defaults'} || &error($text{'zonedef_ecannot'});
9
10 &lock_file(&make_chroot($config{'named_conf'}));
11 &lock_file("$module_config_directory/zonedef");
12 $conf = &get_config();
13 $options = &find("options", $conf);
14 foreach $c ("master", "slave", "response") {
15         push(@check, { 'name' => 'check-names',
16                        'values' => [ $c, $in{$c} ] }) if ($in{$c});
17         }
18 &save_directive($options, 'check-names', \@check, 1);
19 &save_addr_match("allow-transfer", $options, 1);
20 &save_addr_match("allow-query", $options, 1);
21 &save_choice("notify", $options, 1);
22
23 $in{'refresh'} =~ /^\d+$/ || &error(&text('master_erefresh', $in{'refresh'}));
24 $in{'retry'} =~ /^\d+$/ || &error(&text('master_eretry', $in{'retry'}));
25 $in{'expiry'} =~ /^\d+$/ || &error(&text('master_eexpiry', $in{'expiry'}));
26 $in{'minimum'} =~ /^\d+$/ || &error(&text('master_eminimum', $in{'minimum'}));
27 %zonedef = ( 'refresh', $in{'refresh'},
28              'retry', $in{'retry'},
29              'expiry', $in{'expiry'},
30              'minimum', $in{'minimum'},
31              'refunit', $in{'refunit'},
32              'retunit', $in{'retunit'},
33              'expunit', $in{'expunit'},
34              'minunit', $in{'minunit'} );
35
36 &lock_file("$module_config_directory/config");
37 foreach $k (keys %config) {
38         delete($config{$k}) if ($k =~ /^tmpl_/);
39         }
40 $j=0;
41 for($i=0; defined($in{"name_$i"}); $i++) {
42         next if (!$in{"name_$i"});
43         $in{"type_$i"} eq 'A' || !$in{"def_$i"} ||
44                 &error($text{'master_eiptmpl'});
45         $config{"tmpl_$j"} = join(' ', $in{"name_$i"}, $in{"type_$i"},
46                           $in{"value_${i}_def"} ? () : ( $in{"value_$i"} ) );
47         $j++;
48         }
49 $config{'tmpl_email'} = $in{'email'};
50 if ($in{'include_def'}) {
51         delete($config{'tmpl_include'});
52         }
53 else {
54         -r $in{'include'} && !-d $in{'include'} ||
55                 &error($text{'master_einclude'});
56         $config{'tmpl_include'} = $in{'include'};
57         }
58 if ($in{'prins_def'}) {
59         delete($config{'default_prins'});
60         }
61 else {
62         $in{'prins'} =~ /^[a-z0-9\.\-\_]+$/i ||
63                 &error($text{'zonedef_eprins'});
64         $config{'default_prins'} = $in{'prins'};
65         }
66 if (defined($in{'dnssec'})) {
67         $config{'tmpl_dnssec'} = $in{'dnssec'};
68         $config{'tmpl_dnssecalg'} = $in{'alg'};
69         ($ok, $err) = &compute_dnssec_key_size($in{'alg'}, $in{'size_def'},
70                                                $in{'size'});
71         &error($err) if (!$ok);
72         $config{'tmpl_dnssecsizedef'} = $in{'size_def'};
73         $config{'tmpl_dnssecsize'} = $in{'size'};
74         $config{'tmpl_dnssecsingle'} = $in{'single'};
75         }
76 &save_module_config();
77 &unlock_file("$module_config_directory/config");
78
79 &save_zone_defaults(\%zonedef);
80 &flush_file_lines();
81 &unlock_file(&make_chroot($config{'named_conf'}));
82 &unlock_file("$module_config_directory/zonedef");
83 &webmin_log("zonedef", undef, undef, \%in);
84 &redirect("");
85