+END
+;
+&Header::closebox();
+
+# DHCP DNS update support (RFC2136)
+&Header::openbox('100%', 'left', $Lang::tr{'dhcp dns update'});
+
+my %checked = ();
+$checked{'DNS_UPDATE_ENABLED'}{'on'} = ( $dhcpsettings{'DNS_UPDATE_ENABLED'} ne 'on') ? '' : "checked='checked'";
+
+print <
+
+
$Lang::tr{'dhcp dns enable update'}
+
+
+
+
+
+
+END
+;
+ my @domains = ();
+
+ # Print options for each interface.
+ foreach my $itf (@ITFs) {
+ # Check if DHCP for this interface is enabled.
+ if ($dhcpsettings{"ENABLE_${itf}"} eq 'on') {
+ # Check for same domain name.
+ next if ($dhcpsettings{"DOMAIN_NAME_${itf}"} ~~ @domains);
+ my $lc_itf = lc($itf);
+
+ # Select previously configured update algorithm.
+ my %selected = ();
+ $selected{'DNS_UPDATE_ALGO_${inf}'}{$dhcpsettings{'DNS_UPDATE_ALGO_${inf}'}} = 'selected';
+
+print <
+
+
+
+
$dhcpsettings{"DOMAIN_NAME_${itf}"}
+
+
+
$Lang::tr{'dhcp dns key name'}:
+
+
$Lang::tr{'dhcp dns update secret'}:
+
+
$Lang::tr{'dhcp dns update algo'}:
+
+
+
+
+END
+;
+ }
+
+ # Store configured domain based on the interface
+ # in the temporary variable.
+ push(@domains, $dhcpsettings{"DOMAIN_NAME_${itf}"});
+}
+print <
+
+
+
+
+
+
END
;
@@ -622,13 +703,13 @@ if ($opt ne '') {
}
print <
-
$Lang::tr{'dhcp advopt name'}:
+
$Lang::tr{'dhcp advopt name'}:
-
$Lang::tr{'dhcp advopt value'}:
+
$Lang::tr{'dhcp advopt value'}:
$opt
$Lang::tr{'enabled'}
-
$Lang::tr{'dhcp advopt scope'}:
+
$Lang::tr{'dhcp advopt scope'}:
END
;
@@ -649,7 +730,7 @@ print <
-
$Lang::tr{'dhcp advopt scope help'}
+
$Lang::tr{'dhcp advopt scope help'}
@@ -827,29 +908,29 @@ if ($dhcpsettings{'KEY2'} ne '') {
}
print <
-
$Lang::tr{'mac address'}:
+
$Lang::tr{'mac address'}:
-
$Lang::tr{'ip address'}:
+
$Lang::tr{'ip address'}:
-
$Lang::tr{'remark'}:
+
$Lang::tr{'remark'}:
$Lang::tr{'enabled'}
$Lang::tr{'dhcp bootp pxe data'}
-
next-server:
+
next-server:
-
filename:
+
filename:
-
root path:
+
root path:
-
$Lang::tr{'this field may be blank'}
+
$Lang::tr{'required field'}
@@ -857,7 +938,6 @@ print <
-
END
;
#Edited line number (KEY2) passed until cleared by 'save' or 'remove' or 'new sort order'
@@ -939,7 +1019,10 @@ foreach my $line (@current2) {
# Skip all entries that do not match the search query
if ($search_query ne "") {
- next if (!grep(/$search_query/, @temp));
+ if (!grep(/$search_query/, @temp)) {
+ $key++;
+ next;
+ }
}
if ($dhcpsettings{'KEY2'} eq $key) {
@@ -1126,9 +1209,19 @@ sub buildconf {
flock(FILE, 2);
# Global settings
- print FILE "ddns-update-style none;\n";
print FILE "deny bootp; #default\n";
print FILE "authoritative;\n";
+
+ # DNS Update settings
+ if ($dhcpsettings{'DNS_UPDATE_ENABLED'} eq 'on') {
+ print FILE "ddns-updates on;\n";
+ print FILE "ddns-update-style interim;\n";
+ print FILE "ddns-ttl 60; # 1 min\n";
+ print FILE "ignore client-updates;\n";
+ print FILE "update-static-leases on;\n";
+ } else {
+ print FILE "ddns-update-style none;\n";
+ }
# Write first new option definition
foreach my $line (@current1) {
@@ -1157,12 +1250,13 @@ sub buildconf {
}
}# on
}# foreach line
+ print FILE "\n";
#Subnet range definition
foreach my $itf (@ITFs) {
my $lc_itf=lc($itf);
if ($dhcpsettings{"ENABLE_${itf}"} eq 'on' ){
- print FILE "\nsubnet " . $netsettings{"${itf}_NETADDRESS"} . " netmask ". $netsettings{"${itf}_NETMASK"} . " #$itf\n";
+ print FILE "subnet " . $netsettings{"${itf}_NETADDRESS"} . " netmask ". $netsettings{"${itf}_NETMASK"} . " #$itf\n";
print FILE "{\n";
print FILE "\trange " . $dhcpsettings{"START_ADDR_${itf}"} . ' ' . $dhcpsettings{"END_ADDR_${itf}"}.";\n" if ($dhcpsettings{"START_ADDR_${itf}"});
print FILE "\toption subnet-mask " . $netsettings{"${itf}_NETMASK"} . ";\n";
@@ -1199,7 +1293,18 @@ sub buildconf {
}
}# on
}# foreach line
- print FILE "} #$itf\n";
+ print FILE "} #$itf\n\n";
+
+ if (($dhcpsettings{"DNS_UPDATE_ENABLED"} eq "on") && ($dhcpsettings{"DNS_UPDATE_KEY_NAME_${itf}"} ne "")) {
+ print FILE "key " . $dhcpsettings{"DNS_UPDATE_KEY_NAME_${itf}"} . " {\n";
+ print FILE "\talgorithm " . $dhcpsettings{"DNS_UPDATE_KEY_ALGO_${itf}"} . ";\n";
+ print FILE "\tsecret \"" . $dhcpsettings{"DNS_UPDATE_KEY_SECRET_${itf}"} . "\";\n";
+ print FILE "};\n\n";
+
+ print FILE "zone " . $dhcpsettings{"DOMAIN_NAME_${itf}"} . ". {\n";
+ print FILE "\tkey " . $dhcpsettings{"DNS_UPDATE_KEY_NAME_${itf}"} . ";\n";
+ print FILE "}\n\n";
+ }
system ('/usr/bin/touch', "${General::swroot}/dhcp/enable_${lc_itf}");
&General::log("DHCP on ${itf}: " . $Lang::tr{'dhcp server enabled'})