X-Git-Url: http://git.ipfire.org/?p=ipfire-2.x.git;a=blobdiff_plain;f=html%2Fcgi-bin%2Fdhcp.cgi;h=3eb5349a9f70ec7efee12ff0a40f2f5ae11041c7;hp=9157cac01f7675aa5fe13948ebfc2b94dc7d3878;hb=5fbd7b29829caf0bcadcccd6f56ead51e2fb812e;hpb=943a96faed4fb515259c18d04b330ba622490b7b diff --git a/html/cgi-bin/dhcp.cgi b/html/cgi-bin/dhcp.cgi index 9157cac01f..3eb5349a9f 100644 --- a/html/cgi-bin/dhcp.cgi +++ b/html/cgi-bin/dhcp.cgi @@ -70,11 +70,17 @@ foreach my $itf (@ITFs) { $dhcpsettings{"NTP2_${itf}"} = ''; $dhcpsettings{"NEXT_${itf}"} = ''; $dhcpsettings{"FILE_${itf}"} = ''; + $dhcpsettings{"DNS_UPDATE_KEY_NAME_${itf}"} = ''; + $dhcpsettings{"DNS_UPDATE_KEY_SECRET_${itf}"} = ''; + $dhcpsettings{"DNS_UPDATE_KEY_ALGO_${itf}"} = ''; } $dhcpsettings{'SORT_FLEASELIST'} = 'FIPADDR'; $dhcpsettings{'SORT_LEASELIST'} = 'IPADDR'; +# DNS Update settings +$dhcpsettings{'DNS_UPDATE_ENABLED'} = 'off'; + #Settings2 for editing the multi-line list #Must not be saved with writehash ! $dhcpsettings{'FIX_MAC'} = ''; @@ -244,7 +250,7 @@ if ($dhcpsettings{'ACTION'} eq $Lang::tr{'save'}) { } # enabled }#loop interface verify - map (delete ($dhcpsettings{$_}) ,@nosaved,'ACTION','KEY1','KEY2'); # Must not be saved + map (delete ($dhcpsettings{$_}) ,@nosaved,'ACTION','KEY1','KEY2','q'); # Must not be saved &General::writehash($setting, \%dhcpsettings); # Save good settings $dhcpsettings{'ACTION'} = $Lang::tr{'save'}; # create an 'ACTION' map ($dhcpsettings{$_} = '',@nosaved,'KEY1','KEY2'); # and reinit vars to empty @@ -267,7 +273,7 @@ if ($ENV{'QUERY_STRING'} =~ /^FETHER|^FIPADDR/ ) { $newsort.=$Rev; } $dhcpsettings{'SORT_FLEASELIST'}=$newsort; - map (delete ($dhcpsettings{$_}) ,@nosaved,'ACTION','KEY1','KEY2'); # Must never be saved + map (delete ($dhcpsettings{$_}) ,@nosaved,'ACTION','KEY1','KEY2', 'q'); # Must never be saved &General::writehash($setting, \%dhcpsettings); &sortcurrent2; $dhcpsettings{'ACTION'} = 'SORT'; # create an 'ACTION' @@ -438,6 +444,9 @@ if ($dhcpsettings{'ACTION'} eq $Lang::tr{'add'}.'2') { if ($dhcpsettings{'KEY2'} eq '') { #add or edit ? unshift (@current2, "$dhcpsettings{'FIX_MAC'},$dhcpsettings{'FIX_ADDR'},$dhcpsettings{'FIX_ENABLED'},$dhcpsettings{'FIX_NEXTADDR'},$dhcpsettings{'FIX_FILENAME'},$dhcpsettings{'FIX_ROOTPATH'},$dhcpsettings{'FIX_REMARK'}\n"); &General::log($Lang::tr{'fixed ip lease added'}); + + # Enter edit mode + $dhcpsettings{'KEY2'} = $key; } else { @current2[$dhcpsettings{'KEY2'}] = "$dhcpsettings{'FIX_MAC'},$dhcpsettings{'FIX_ADDR'},$dhcpsettings{'FIX_ENABLED'},$dhcpsettings{'FIX_NEXTADDR'},$dhcpsettings{'FIX_FILENAME'},$dhcpsettings{'FIX_ROOTPATH'},$dhcpsettings{'FIX_REMARK'}\n"; $dhcpsettings{'KEY2'} = ''; # End edit mode @@ -544,39 +553,39 @@ print < $Lang::tr{'ip address'}
$Lang::tr{'netmask'}:$netsettings{"${itf}_ADDRESS"}
$netsettings{"${itf}_NETMASK"}
- $Lang::tr{'start address'} + $Lang::tr{'start address'} * - $Lang::tr{'end address'} + $Lang::tr{'end address'} * - $Lang::tr{'default lease time'} + $Lang::tr{'default lease time'} * - $Lang::tr{'max lease time'} + $Lang::tr{'max lease time'} * - $Lang::tr{'domain name suffix'} * + $Lang::tr{'domain name suffix'} $Lang::tr{'dhcp allow bootp'}: - $Lang::tr{'primary dns'} + $Lang::tr{'primary dns'} * - $Lang::tr{'secondary dns'} * + $Lang::tr{'secondary dns'} - $Lang::tr{'primary ntp server'}: * + $Lang::tr{'primary ntp server'}: - $Lang::tr{'secondary ntp server'}: * + $Lang::tr{'secondary ntp server'}: - $Lang::tr{'primary wins server address'}: * + $Lang::tr{'primary wins server address'}: - $Lang::tr{'secondary wins server address'}: * + $Lang::tr{'secondary wins server address'}: - next-server: * + next-server: - filename: * + filename: @@ -588,12 +597,83 @@ END print < - * $Lang::tr{'this field may be blank'} + * $Lang::tr{'required field'} $warnNTPmessage - -   + +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 < + + + + + + + + + + + + + +END +; + } + + # Store configured domain based on the interface + # in the temporary variable. + push(@domains, $dhcpsettings{"DOMAIN_NAME_${itf}"}); +} +print < +
+
 
$dhcpsettings{"DOMAIN_NAME_${itf}"}
$Lang::tr{'dhcp dns key name'}:$Lang::tr{'dhcp dns update secret'}:  $Lang::tr{'dhcp dns update algo'}:   + +
+ + + +
END ; @@ -623,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 ; @@ -650,8 +730,8 @@ print < - - + + - + - + - + - + - +
* $Lang::tr{'dhcp advopt scope help'} + $Lang::tr{'dhcp advopt scope help'} @@ -828,30 +908,30 @@ 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:

- - + @@ -862,8 +942,26 @@ END ; #Edited line number (KEY2) passed until cleared by 'save' or 'remove' or 'new sort order' +# Search for static leases +my $search_query = $dhcpsettings{'q'}; + +if (scalar @current2 >= 10) { + print < + +
* $Lang::tr{'this field may be blank'} + * $Lang::tr{'required field'}
+ + + +
+ + +
+ +END +} + print < @@ -919,6 +1017,14 @@ foreach my $line (@current2) { $gdesc = $Lang::tr{'click to enable'}; } + # Skip all entries that do not match the search query + if ($search_query ne "") { + if (!grep(/$search_query/, @temp)) { + $key++; + next; + } + } + if ($dhcpsettings{'KEY2'} eq $key) { print ""; $col="bgcolor='${Header::colouryellow}'"; @@ -1103,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) { @@ -1134,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"; @@ -1176,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'})
$Lang::tr{'mac address'}