Skip to content

Commit

Permalink
Allow muliple lease deletion
Browse files Browse the repository at this point in the history
  • Loading branch information
jcameron committed Feb 21, 2011
1 parent 92deb54 commit 2594f3c
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 44 deletions.
2 changes: 2 additions & 0 deletions dhcpd/CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,5 @@ When applying the configuration fails with an error mentioning a line in the con
Added support for multi-value options, thanks to a patch from Luke Suchocki.
Also added support for multi-value options within a bracketed expression.
Hostname, IP address and MAC address clashes are now only checked for in the same shared network.
---- Changes since 1.530 ----
Multiple leases can now be deleted at once, thanks to a suggestion from Berni Elbourn.
32 changes: 0 additions & 32 deletions dhcpd/delete_lease.cgi

This file was deleted.

38 changes: 38 additions & 0 deletions dhcpd/delete_leases.cgi
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/local/bin/perl
# Delete multiple leases

require './dhcpd-lib.pl';
&ReadParse();

%access = &get_module_acl();
&error_setup($text{'listl_err'});
if( !($access{'w_leases'} && $access{'r_leases'}) ) {
&error("$text{'eacl_np'} $text{'eacl_pdl'}");
}
@d = split(/\0/, $in{'d'});
@d || &error($text{'listl_enone'});

# Find the leases to remove
&tokenize_file($config{'lease_file'}, \@tok);
$i = $j = 0;
while($i < @tok) {
$lease = &parse_struct(\@tok, \$i, $j++, $config{'lease_file'});
if (&indexof($lease->{'index'}, @d) >= 0) {
push(@todelete, $lease);
}
}

# Delete them, in reverse order so that line numbers aren't messed up
&lock_file($config{'lease_file'});
$lref = &read_file_lines($config{'lease_file'});
foreach $lease (reverse(@todelete)) {
splice(@$lref, $lease->{'line'},
$lease->{'eline'} - $lease->{'line'} + 1);
}
&flush_file_lines($config{'lease_file'});
&unlock_file($config{'lease_file'});

&restart_dhcpd();
&webmin_log("delete", "lease", $lease->{'values'}->[0]);
&redirect("list_leases.cgi?all=$in{'all'}&network=$in{'network'}&netmask=$in{'netmask'}");

4 changes: 3 additions & 1 deletion dhcpd/lang/en
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ listl_start=Start Date
listl_end=End Date
listl_return=network and host list
listl_all=List all active and expired leases
listl_delete2=Click on a lease IP address from the list below to delete it.
listl_delete=Delete Selected Leases
listl_unknown=Unknown
listl_allocs=$1 IP addresses available, $2 allocated ($3 %)
listl_mode=Display mode :
Expand All @@ -161,6 +161,8 @@ listl_mode_1=Subnets and usage
listl_size=Total IPs
listl_used=Allocated
listl_pc=Percentage
listl_err=Failed to deleted leases
listl_enone=None selected

restart_errmsg1=Failed to restart dhcpd
restart_errmsg2=Failed to signal process
Expand Down
26 changes: 15 additions & 11 deletions dhcpd/list_leases.cgi
Original file line number Diff line number Diff line change
Expand Up @@ -163,25 +163,29 @@ else {
}

# Table header, with sorting
print "<b>$text{'listl_delete2'}</b><br>\n";
@tds = ( "width=5" );
print &ui_form_start("delete_leases.cgi", "post");
print &ui_hidden("all", $in{'all'});
print &ui_hidden("network", $in{'network'});
print &ui_hidden("netmask", $in{'netmask'});
@links = ( &select_all_link("d"), &select_invert_link("d") );
print &ui_links_row(\@links);
print &ui_columns_start([
"",
&sort_link("ipaddr"),
&sort_link("ether"),
&sort_link("host"),
&sort_link("start"),
&sort_link("end"),
]);
], 100, 0, \@tds);

foreach $lease (@leases) {
local @cols;
local $mems = $lease->{'members'};
local $starts = &find('starts', $mems);
local $ends = &find('ends', $mems);
local $ht = $lease->{'expired'} ? "i" : "tt";
push(@cols, "<$ht><a href='delete_lease.cgi?".
"idx=$lease->{'index'}&all=$in{all}&".
"network=$in{'network'}&netmask=$in{'netmask'}'>".
"$lease->{'values'}->[0]</a></$ht>");
push(@cols, "<$ht>$lease->{'values'}->[0]</$ht>");
local $hard = &find('hardware', $mems);
push(@cols,$hard->{'values'}->[1] ?
"<tt>$hard->{'values'}->[1]</tt>" :
Expand All @@ -191,10 +195,8 @@ else {
$client->{'values'}->[0])."</tt>"
: undef);
if ($config{'lease_tz'}) {
local @st = localtime($lease->{'stime'});
local @et = localtime($lease->{'etime'});
$s = sprintf "%4.4d/%2.2d/%2.2d %2.2d:%2.2d:%2.2d", $st[5]+1900, $st[4]+1, $st[3], $st[2], $st[1], $st[0];
$e = sprintf "%4.4d/%2.2d/%2.2d %2.2d:%2.2d:%2.2d", $et[5]+1900, $et[4]+1, $et[3], $et[2], $et[1], $et[0];
$s = &make_date($lease->{'stime'});
$e = &make_date($lease->{'etime'});
}
else {
$s = $starts->{'values'}->[1]." ".
Expand All @@ -205,9 +207,11 @@ else {

push(@cols, "<tt>$s</tt>");
push(@cols, "<tt>$e</tt>");
print &ui_columns_row(\@cols);
print &ui_checked_columns_row(\@cols, \@tds, "d",
$lease->{'index'});
}
print &ui_columns_end();
print &ui_form_end([ [ undef, $text{'listl_delete'} ] ]);
}
else {
print "<b>",&text($in{'all'} ? 'listl_lfnotcont' :
Expand Down

0 comments on commit 2594f3c

Please sign in to comment.