2 # Change all instances of some IP
4 require './bind8-lib.pl';
7 &error_setup($text{'umass_err'});
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'});
18 $access{'ro'} && &error($text{'master_ero'});
21 $in{'old'} =~ s/\s+/ /g;
22 $in{'old_def'} || $in{'old'} || &error($text{'umass_eold'});
23 $in{'new'} || &error($text{'umass_enew'});
24 if ($in{'type'} eq 'A') {
25 &check_ipaddress($in{'new'}) ||
26 &error(&text('edit_eip', $in{'new'}));
28 elsif ($in{'type'} eq 'AAAA') {
29 &check_ip6address($in{'new'}) ||
30 &error(&text('edit_eip6', $in{'new'}));
32 elsif ($in{'type'} eq 'NS') {
33 &valname($in{'new'}) ||
34 &error(&text('edit_ens', $in{'new'}));
36 elsif ($in{'type'} eq 'CNAME') {
37 &valname($in{'new'}) || $in{'new'} eq '@' ||
38 &error(&text('edit_ecname', $in{'new'}));
40 elsif ($in{'type'} eq 'MX') {
41 $in{'new'} =~ /^(\d+)\s+(\S+)$/ && &valname("$2") ||
42 &error(&text('emass_emx', $in{'new'}));
44 elsif ($in{'type'} eq 'TXT' || $in{'type'} eq 'SPF') {
45 $in{'new'} = "\"$in{'new'}\"";
47 elsif ($in{'type'} eq 'PTR') {
48 &valname($in{'new'}) ||
49 &error(&text('edit_eptr', $in{'new'}));
51 elsif ($in{'type'} eq 'ttl') {
52 $in{'new'} =~ /^\d+$/ ||
53 &error(&text('master_edefttl', $in{'new'}));
57 &ui_print_unbuffered_header(undef, $text{'umass_title'}, "");
59 foreach $zi (@zones) {
60 print &text('umass_doing', "<tt>$zi->{'name'}</tt>"),"<br>\n";
61 if ($zi->{'type'} ne 'master') {
62 # Skip - not a master zone
63 print $text{'umass_notmaster'},"<p>\n";
67 @recs = &read_zone_file($zi->{'file'}, $zi->{'name'});
68 $realfile = &make_chroot(&absolute_path($zi->{'file'}));
70 $v = join(" ", @{$r->{'values'}});
71 if ($r->{'type'} eq $in{'type'} &&
72 ($v eq $in{'old'} || $in{'old_def'})) {
73 # Found a regular record to fix
74 &lock_file($realfile);
75 &modify_record($zi->{'file'}, $r, $r->{'name'},
76 $r->{'ttl'}, $r->{'class'}, $r->{'type'},
77 $in{'new'}, $r->{'cmt'});
80 elsif ($in{'type'} eq 'ttl' && $r->{'defttl'}) {
81 # Found default TTL to fix
82 &lock_file($realfile);
83 &modify_defttl($zi->{'file'}, $r, $in{'new'});
88 &bump_soa_record($zi->{'file'}, \@recs);
89 &sign_dnssec_zone_if_key($zi, \@recs);
90 print &text('umass_done', $rcount, scalar(@recs)),"<p>\n";
93 print &text('umass_none', scalar(@recs)),"<p>\n";
98 &webmin_log("update", "zones", scalar(@zones));
100 &ui_print_footer("", $text{'index_return'});
105 return valdnsname($_[0], 0, $in{'origin'});