Subnet moving
authorJamie Cameron <jcameron@webmin.com>
Mon, 21 Jan 2008 21:01:17 +0000 (21:01 +0000)
committerJamie Cameron <jcameron@webmin.com>
Mon, 21 Jan 2008 21:01:17 +0000 (21:01 +0000)
dhcp-dns/config.info
dhcp-dns/dhcp-dns-lib.pl
dhcp-dns/index.cgi
dhcp-dns/save.cgi

index 1484505..1a1ca10 100644 (file)
@@ -1,2 +1,3 @@
 domain=DNS domain for hosts,0
+rev=DNS domain for IP addresses,0
 subnets=DHCP subnets for hosts<br>(In network/netmask format),0
index b1fe1fc..7e35403 100644 (file)
@@ -127,13 +127,21 @@ $rv .= &ui_hidden("indom", $indom);
 # Fixed IP address
 local $fixed = &dhcpd::find("fixed-address", $h->{'members'});
 $rv .= &ui_hidden("oldip", $fixed->{'values'}->[0]) if ($fixed);
-local @subnets = $new ? &list_dhcp_subnets() : ( );
+local @subnets = &list_dhcp_subnets();
+local $parsub;
+if (!$new) {
+       ($parsub) = grep { $_ eq $h->{'parent'} } @subnets;
+       }
+elsif (@subnets) {
+       $parsub = $subnets[0];
+       }
 $rv .= &ui_table_row($text{'form_ip'},
        &ui_textbox("ip", $fixed ? $fixed->{'values'}->[0] : undef, 20).
-       (@subnets ? " ".$text{'form_subnet'}." ".
-                       &ui_select("subnet", $subnets[0]->{'values'}->[0],
-                         [ [ undef, $text{'form_nosubnet'} ],
-                           map { [ $_->{'values'}->[0] ] } @subnets ]) : ""));
+       " ".$text{'form_subnet'}." ".
+       &ui_select("subnet", $parsub ? $parsub->{'values'}->[0] : '',
+                  [ $parsub ? ( ) : ( [ '', $text{'form_nosubnet'} ] ),
+                    map { [ $_->{'values'}->[0] ] } @subnets ]));
+$rv .= &ui_hidden("oldsubnet", $parsub ? $parsub->{'values'}->[0] : '');
 
 # MAC address
 local $hard = &dhcpd::find("hardware", $h->{'members'});
@@ -187,11 +195,20 @@ return ( $fn, \@recs );
 
 sub apply_configuration
 {
-local $err = &dhcpd::restart_dhcpd();
-return "DHCPD failed : $err" if ($err);
-$err = &bind8::restart_bind();
-return "BIND failed : $err" if ($err);
-return undef;
+&lock_file("$module_config_directory/apply");
+local $err;
+$err = &dhcpd::restart_dhcpd();
+if ($err) {
+       $err = "DHCPD failed : $err";
+       }
+else {
+       $err = &bind8::restart_bind();
+       if ($err) {
+               $err = "BIND failed : $err";
+               }
+       }
+&unlock_file("$module_config_directory/apply");
+return $err;
 }
 
 1;
index 49b54b2..864930c 100644 (file)
@@ -44,7 +44,8 @@ if (@hosts) {
                                  $text{'index_mac'},
                                  $text{'index_desc'},
                                ], 100, 0, \@tds);
-       foreach $h (@hosts) {
+       foreach $h (sort { lc($a->{'values'}->[0]) cmp
+                          lc($b->{'values'}->[0]) } @hosts) {
                $fixed = &dhcpd::find("fixed-address", $h->{'members'});
                $hard = &dhcpd::find("hardware", $h->{'members'});
                my $parentdesc;
index 720bd24..cc214ff 100644 (file)
@@ -10,8 +10,16 @@ if (!$in{'new'}) {
        # Get existing host object
        ($host) = grep { $_->{'values'}->[0] eq $in{'old'} } @hosts;
        $host || &error($text{'edit_egone'});
-       $par = $host->{'parent'};
+       $oldpar = $host->{'parent'};
        ($old) = grep { lc($_->{'name'}) eq lc($in{'old'}).'.' } @$recs;
+       if ($in{'subnet'} eq $in{'oldsubnet'}) {
+               $par = $oldpar;
+               }
+       else {
+               # Moving subnet
+               ($par) = grep { $_->{'values'}->[0] eq $in{'subnet'} }
+                             &list_dhcp_subnets();
+               }
        }
 else {
        # Create new, and work out parent
@@ -96,8 +104,16 @@ else {
        &bind8::bump_soa_record($fn, $recs);
 
        # Save DHCP host
-       &dhcpd::save_directive($par, $in{'new'} ? [ ] : [ $host ],
-                               [ $host ], $indent);
+       if (!$in{'new'} && $oldpar ne $par) {
+               # Move to new parent
+               &dhcpd::save_directive($oldpar, [ $host ], [ ], 0);
+               &dhcpd::save_directive($par, [ ], [ $host ], $indent);
+               }
+       else {
+               # Just save
+               &dhcpd::save_directive($par, $in{'new'} ? [ ] : [ $host ],
+                                       [ $host ], $indent);
+               }
        }
 &flush_file_lines();
 &redirect("");