mirror of
https://github.com/webmin/webmin.git
synced 2026-06-19 19:00:22 +01:00
Mass record deletion button
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
61
bind8/mass_rdelete.cgi
Executable 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
42
bind8/mass_rdelete_form.cgi
Executable 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'});
|
||||
Reference in New Issue
Block a user