Mass record deletion button

This commit is contained in:
Jamie Cameron
2010-11-09 00:44:27 -08:00
parent 8e9defe4de
commit 425c04d339
6 changed files with 136 additions and 6 deletions

View File

@@ -119,3 +119,5 @@ Added new NSEC3 algorithms for DNSSEC.
Changed the default DNSSEC algorithm from DSA to the stronger RSASHA1.
---- Changes since 1.510 ----
On Linux systems, /dev/urandom is used for generating entropy for DNSSEC.
---- Changes since 1.520 ----
Added the Delete Records In Selected button to the main page, for removing the same record in multiple domains at once.

View File

@@ -237,7 +237,8 @@ elsif (@zones && (!@views || !$config{'by_view'})) {
print &ui_form_end([ $access{'delete'} ?
( [ "delete", $text{'index_massdelete'} ] ) : ( ),
[ "update", $text{'index_massupdate'} ],
[ "create", $text{'index_masscreate'} ] ]);
[ "create", $text{'index_masscreate'} ],
[ "rdelete", $text{'index_massrdelete'} ] ]);
}
elsif (@zones) {
# Show zones under views
@@ -304,7 +305,8 @@ elsif (@zones) {
$access{'delete'} ?
( [ "delete", $text{'index_massdelete'} ] ) : ( ),
[ "update", $text{'index_massupdate'} ],
[ "create", $text{'index_masscreate'} ] ]);
[ "create", $text{'index_masscreate'} ],
[ "rdelete", $text{'index_massrdelete'} ], ]);
}
}
else {

View File

@@ -57,6 +57,7 @@ index_all=All zones
index_massdelete=Delete Selected
index_massupdate=Update Records in Selected
index_masscreate=Add Record to Selected
index_massrdelete=Delete Records in Selected
index_bind=BIND
master_title=Edit Master Zone
@@ -760,6 +761,7 @@ log_rndc=Setup RNDC
log_delete_recs=Deleted $1 records
log_delete_zones=Deleted $1 zones
log_update_zones=Updated records in $1 zones
log_rdelete_zones=Deleted records in $1 zones
log_freeze=Froze zone $1
log_thaw=Un-froze zone $1
log_zonekeyon=Enabled DNSSEC for zone $1
@@ -981,6 +983,23 @@ umass_none=.. no matching records out of $1 to update found.
umass_egone=Zone does not exist
emass_emx='$1' is not a mail server priority number followed by a valid hostname
rdmass_err=Failed to delete records in zones
rdmass_enone=None selected
rdmass_title=Delete Records in Zones
rdmass_header=Mass record delete details
rdmass_type=Record type to delete
rdmass_name=Name of record to delete
rdmass_all=All records of this type
rdmass_value=Value of records to delete
rdmass_vall=All matching name and type
rdmass_vsel=Records with value
rdmass_doing=Deleting records in zone $1 ..
rdmass_ename=No record name to delete entered
rdmass_done=.. deleted $1 matching records out of $2.
rdmass_none=.. no matching records out of $1 to delete found.
rdmass_ok=Delete Records
rdmass_sel=Records named
rmass_err=Failed to add records
rmass_enone=None selected
rmass_title=Add Record to Zones

View File

@@ -5,16 +5,20 @@ require './bind8-lib.pl';
&ReadParse();
$conf = &get_config();
$dparams = join("&", map { "d=".&urlize($_) } split(/\0/, $in{'d'}));
if ($in{'update'}) {
# Redirect to mass update form
&redirect("mass_update_form.cgi?".
join("&", map { "d=".&urlize($_) } split(/\0/, $in{'d'})));
&redirect("mass_update_form.cgi?".$dparams);
exit;
}
elsif ($in{'create'}) {
# Redirect to mass create form
&redirect("mass_rcreate_form.cgi?".
join("&", map { "d=".&urlize($_) } split(/\0/, $in{'d'})));
&redirect("mass_rcreate_form.cgi?".$dparams);
exit;
}
elsif ($in{'rdelete'}) {
# Redirect to mass record delete form
&redirect("mass_rdelete_form.cgi?".$dparams);
exit;
}

61
bind8/mass_rdelete.cgi Executable file
View File

@@ -0,0 +1,61 @@
#!/usr/local/bin/perl
# Delete all records of some type with some name
require './bind8-lib.pl';
&ReadParse();
$conf = &get_config();
&error_setup($text{'umass_err'});
# Get the zones
foreach $d (split(/\0/, $in{'d'})) {
($idx, $viewidx) = split(/\s+/, $d);
$zone = &get_zone_name($idx, $viewidx);
$zone || &error($text{'umass_egone'});
&can_edit_zone($zone) ||
&error($text{'master_edelete'});
push(@zones, $zone);
}
$access{'ro'} && &error($text{'master_ero'});
$in{'name_def'} || $in{'name'} || &error($text{'rdmass_ename'});
# Do each one
&ui_print_unbuffered_header(undef, $text{'rdmass_title'}, "");
foreach $zi (@zones) {
print &text('rdmass_doing', "<tt>$zi->{'name'}</tt>"),"<br>\n";
if ($zi->{'type'} ne 'master') {
# Skip - not a master zone
print $text{'umass_notmaster'},"<p>\n";
next;
}
$rcount = 0;
@recs = &read_zone_file($zi->{'file'}, $zi->{'name'});
$realfile = &make_chroot(&absolute_path($zi->{'file'}));
foreach $r (reverse(@recs)) {
$shortname = $r->{'name'};
$shortname =~ s/\.$zi->{'name'}\.$//;
$v = join(" ", @{$r->{'values'}});
if ($r->{'type'} eq $in{'type'} &&
($shortname eq $in{'name'} || $in{'name_def'}) &&
($v eq $in{'value'} || $in{'value_def'})) {
# Found a record to delete
&lock_file($realfile);
&delete_record($zi->{'file'}, $r);
$rcount++;
}
}
if ($rcount) {
&bump_soa_record($zi->{'file'}, \@recs);
&sign_dnssec_zone_if_key($zi, \@recs);
print &text('rdmass_done', $rcount, scalar(@recs)),"<p>\n";
}
else {
print &text('rdmass_none', scalar(@recs)),"<p>\n";
}
}
&unlock_all_files();
&webmin_log("rdelete", "zones", scalar(@zones));
&ui_print_footer("", $text{'index_return'});

42
bind8/mass_rdelete_form.cgi Executable file
View File

@@ -0,0 +1,42 @@
#!/usr/local/bin/perl
# Show a form for deleting a record in multiple zones
require './bind8-lib.pl';
&ReadParse();
&error_setup($text{'rdmass_err'});
@d = split(/\0/, $in{'d'});
@d || &error($text{'rdmass_enone'});
&ui_print_header(undef, $text{'rdmass_title'}, "");
print &ui_form_start("mass_rdelete.cgi", "post");
foreach $d (@d) {
print &ui_hidden("d", $d),"\n";
$dc++;
}
print &ui_table_start($text{'rdmass_header'}, undef, 2);
# Number of domains selected
print &ui_table_row($text{'umass_sel'}, $dc);
# Type to delete
@rtypes = ( 'A', 'CNAME', 'NS', 'MX', 'PTR', 'TXT', 'SPF',
$config{'support_aaaa'} ? ( "AAAA" ) : ( ) );
print &ui_table_row($text{'rdmass_type'},
&ui_select("type", "A",
[ map { [ $_, $text{'recs_'.$_} ] } @rtypes ]));
# Name to delete
print &ui_table_row($text{'rdmass_name'},
&ui_opt_textbox("name", undef, 30, $text{'rdmass_all'}."<br>",
$text{'rdmass_sel'}));
# Value to delete
print &ui_table_row($text{'rdmass_value'},
&ui_opt_textbox("value", undef, 30, $text{'rdmass_vall'}."<br>",
$text{'rdmass_vsel'}));
print &ui_table_end();
print &ui_form_end([ [ "rdelete", $text{'rdmass_ok'} ] ]);
&ui_print_footer("", $text{'index_return'});