Handle hostnames with upper-case letters
[webmin.git] / bind8 / mass_rdelete.cgi
1 #!/usr/local/bin/perl
2 # Delete all records of some type with some name
3
4 require './bind8-lib.pl';
5 &ReadParse();
6 $conf = &get_config();
7 &error_setup($text{'umass_err'});
8
9 # Get the zones
10 foreach $d (split(/\0/, $in{'d'})) {
11         ($idx, $viewidx) = split(/\s+/, $d);
12         $zone = &get_zone_name($idx, $viewidx);
13         $zone || &error($text{'umass_egone'});
14         &can_edit_zone($zone) ||
15                 &error($text{'master_edelete'});
16         push(@zones, $zone);
17         }
18 $access{'ro'} && &error($text{'master_ero'});
19 $in{'name_def'} || $in{'name'} || &error($text{'rdmass_ename'});
20
21 # Do each one
22 &ui_print_unbuffered_header(undef, $text{'rdmass_title'}, "");
23
24 foreach $zi (@zones) {
25         print &text('rdmass_doing', "<tt>$zi->{'name'}</tt>"),"<br>\n";
26         if ($zi->{'type'} ne 'master') {
27                 # Skip - not a master zone
28                 print $text{'umass_notmaster'},"<p>\n";
29                 next;
30                 }
31         $rcount = 0;
32         @recs = &read_zone_file($zi->{'file'}, $zi->{'name'});
33         $realfile = &make_chroot(&absolute_path($zi->{'file'}));
34         foreach $r (reverse(@recs)) {
35                 $shortname = $r->{'name'};
36                 $shortname =~ s/\.$zi->{'name'}\.$//;
37                 $v = join(" ", @{$r->{'values'}});
38                 if ($r->{'type'} eq $in{'type'} &&
39                     ($shortname eq $in{'name'} || $in{'name_def'}) &&
40                     ($v eq $in{'value'} || $in{'value_def'})) {
41                         # Found a record to delete
42                         &lock_file($realfile);
43                         &delete_record($zi->{'file'}, $r);
44                         $rcount++;
45                         }
46                 }
47         if ($rcount) {
48                 &bump_soa_record($zi->{'file'}, \@recs);
49                 &sign_dnssec_zone_if_key($zi, \@recs);
50                 print &text('rdmass_done', $rcount, scalar(@recs)),"<p>\n";
51                 }
52         else {
53                 print &text('rdmass_none', scalar(@recs)),"<p>\n";
54                 }
55         }
56
57 &unlock_all_files();
58 &webmin_log("rdelete", "zones", scalar(@zones));
59
60 &ui_print_footer("", $text{'index_return'});
61