Revision 9fbd8f71
Added by Viktor Gurov over 5 years ago
src/etc/inc/services.inc | ||
---|---|---|
1278 | 1278 |
$dhcpdifs[] = get_real_interface($dhcpif); |
1279 | 1279 |
if ($newzone['domain-name']) { |
1280 | 1280 |
if ($need_ddns_updates) { |
1281 |
$newzone['dns-servers'] = array($dhcpifconf['ddnsdomainprimary']); |
|
1281 |
$newzone['dns-servers'] = array($dhcpifconf['ddnsdomainprimary'], $dhcpifconf['ddnsdomainsecondary']);
|
|
1282 | 1282 |
$newzone['ddnsdomainkeyname'] = $dhcpifconf['ddnsdomainkeyname']; |
1283 | 1283 |
$newzone['ddnsdomainkeyalgorithm'] = $dhcpifconf['ddnsdomainkeyalgorithm']; |
1284 | 1284 |
$newzone['ddnsdomainkey'] = $dhcpifconf['ddnsdomainkey']; |
... | ... | |
1350 | 1350 |
$primary = $zone['dns-servers'][0]; |
1351 | 1351 |
$secondary = empty($zone['dns-servers'][1]) ? "" : $zone['dns-servers'][1]; |
1352 | 1352 |
|
1353 |
// Make sure we aren't using any invalid or IPv6 DNS servers.
|
|
1354 |
if (!is_ipaddrv4($primary)) {
|
|
1355 |
if (is_ipaddrv4($secondary)) {
|
|
1353 |
// Make sure we aren't using any invalid servers. |
|
1354 |
if (!is_ipaddr($primary)) { |
|
1355 |
if (is_ipaddr($secondary)) { |
|
1356 | 1356 |
$primary = $secondary; |
1357 | 1357 |
$secondary = ""; |
1358 | 1358 |
} else { |
... | ... | |
1363 | 1363 |
// We don't need to add zones multiple times. |
1364 | 1364 |
if ($zone['domain-name'] && !in_array($zone['domain-name'], $added_zones)) { |
1365 | 1365 |
$dhcpdconf .= "zone {$zone['domain-name']}. {\n"; |
1366 |
$dhcpdconf .= " primary {$primary};\n"; |
|
1366 |
if (is_ipaddrv4($primary)) { |
|
1367 |
$dhcpdconf .= " primary {$primary};\n"; |
|
1368 |
} else { |
|
1369 |
$dhcpdconf .= " primary6 {$primary};\n"; |
|
1370 |
} |
|
1367 | 1371 |
if (is_ipaddrv4($secondary)) { |
1368 | 1372 |
$dhcpdconf .= " secondary {$secondary};\n"; |
1373 |
} elseif (is_ipaddrv6($secondary)) { |
|
1374 |
$dhcpdconf .= " secondary6 {$secondary};\n"; |
|
1369 | 1375 |
} |
1370 | 1376 |
if ($zone['ddnsdomainkeyname'] <> "" && $zone['ddnsdomainkey'] <> "") { |
1371 | 1377 |
$dhcpdconf .= " key {$zone['ddnsdomainkeyname']};\n"; |
... | ... | |
1375 | 1381 |
} |
1376 | 1382 |
if ($zone['ptr-domain'] && !in_array($zone['ptr-domain'], $added_zones)) { |
1377 | 1383 |
$dhcpdconf .= "zone {$zone['ptr-domain']} {\n"; |
1378 |
$dhcpdconf .= " primary {$primary};\n"; |
|
1384 |
if (is_ipaddrv4($primary)) { |
|
1385 |
$dhcpdconf .= " primary {$primary};\n"; |
|
1386 |
} else { |
|
1387 |
$dhcpdconf .= " primary6 {$primary};\n"; |
|
1388 |
} |
|
1379 | 1389 |
if (is_ipaddrv4($secondary)) { |
1380 | 1390 |
$dhcpdconf .= " secondary {$secondary};\n"; |
1391 |
} elseif (is_ipaddrv6($secondary)) { |
|
1392 |
$dhcpdconf .= " secondary6 {$secondary};\n"; |
|
1381 | 1393 |
} |
1382 | 1394 |
if ($zone['ddnsdomainkeyname'] <> "" && $zone['ddnsdomainkey'] <> "") { |
1383 | 1395 |
$dhcpdconf .= " key {$zone['ddnsdomainkeyname']};\n"; |
... | ... | |
1550 | 1562 |
!empty($dhcpv6ifconf['ddnsdomain'])) { |
1551 | 1563 |
$newzone = array(); |
1552 | 1564 |
$newzone['domain-name'] = $dhcpv6ifconf['ddnsdomain']; |
1553 |
$newzone['dns-servers'][] = $dhcpv6ifconf['ddnsdomainprimary'];
|
|
1565 |
$newzone['dns-servers'] = array($dhcpv6ifconf['ddnsdomainprimary'], $dhcpv6ifconf['ddnsdomainsecondary']);
|
|
1554 | 1566 |
$newzone['ddnsdomainkeyname'] = $dhcpv6ifconf['ddnsdomainkeyname']; |
1555 | 1567 |
$newzone['ddnsdomainkey'] = $dhcpv6ifconf['ddnsdomainkey']; |
1556 | 1568 |
$ddns_zones[] = $newzone; |
... | ... | |
1559 | 1571 |
foreach ($ptr_zones as $ptr_zone) { |
1560 | 1572 |
$reversezone = array(); |
1561 | 1573 |
$reversezone['ptr-domain'] = $ptr_zone; |
1562 |
$reversezone['dns-servers'][] = $dhcpv6ifconf['ddnsdomainprimary'];
|
|
1574 |
$reversezone['dns-servers'] = array($dhcpv6ifconf['ddnsdomainprimary'], $dhcpv6ifconf['ddnsdomainsecondary']);
|
|
1563 | 1575 |
$reversezone['ddnsdomainkeyname'] = $dhcpv6ifconf['ddnsdomainkeyname']; |
1564 | 1576 |
$reversezone['ddnsdomainkey'] = $dhcpv6ifconf['ddnsdomainkey']; |
1565 | 1577 |
$ddns_zones[] = $reversezone; |
src/usr/local/www/services_dhcp.php | ||
---|---|---|
174 | 174 |
$pconfig['nonak'] = isset($dhcpdconf['nonak']); |
175 | 175 |
$pconfig['ddnsdomain'] = $dhcpdconf['ddnsdomain']; |
176 | 176 |
$pconfig['ddnsdomainprimary'] = $dhcpdconf['ddnsdomainprimary']; |
177 |
$pconfig['ddnsdomainsecondary'] = $dhcpdconf['ddnsdomainsecondary']; |
|
177 | 178 |
$pconfig['ddnsdomainkeyname'] = $dhcpdconf['ddnsdomainkeyname']; |
178 | 179 |
$pconfig['ddnsdomainkeyalgorithm'] = $dhcpdconf['ddnsdomainkeyalgorithm']; |
179 | 180 |
$pconfig['ddnsdomainkey'] = $dhcpdconf['ddnsdomainkey']; |
... | ... | |
386 | 387 |
if ($_POST['maxtime'] && (!is_numeric($_POST['maxtime']) || ($_POST['maxtime'] < 60) || ($_POST['maxtime'] <= $_POST['deftime']))) { |
387 | 388 |
$input_errors[] = gettext("The maximum lease time must be at least 60 seconds and higher than the default lease time."); |
388 | 389 |
} |
389 |
if ($_POST['ddnsupdate'] && !is_domain($_POST['ddnsdomain'])) { |
|
390 |
$input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration."); |
|
391 |
} |
|
392 |
if ($_POST['ddnsupdate'] && !is_ipaddrv4($_POST['ddnsdomainprimary'])) { |
|
393 |
$input_errors[] = gettext("A valid primary domain name server IP address must be specified for the dynamic domain name."); |
|
394 |
} |
|
395 |
if ($_POST['ddnsupdate'] && (!$_POST['ddnsdomainkeyname'] || !$_POST['ddnsdomainkeyalgorithm'] || !$_POST['ddnsdomainkey'])) { |
|
396 |
$input_errors[] = gettext("A valid domain key name, algorithm and secret must be specified."); |
|
390 |
if ($_POST['ddnsupdate']) { |
|
391 |
if (!is_domain($_POST['ddnsdomain'])) { |
|
392 |
$input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration."); |
|
393 |
} |
|
394 |
if (!is_ipaddr($_POST['ddnsdomainprimary'])) { |
|
395 |
$input_errors[] = gettext("A valid primary domain name server IP address must be specified for the dynamic domain name."); |
|
396 |
} |
|
397 |
if (!empty($_POST['ddnsdomainsecondary']) && !is_ipaddr($_POST['ddnsdomainsecondary'])) { |
|
398 |
$input_errors[] = gettext("A valid secondary domain name server IP address must be specified for the dynamic domain name."); |
|
399 |
} |
|
400 |
if (!$_POST['ddnsdomainkeyname'] || !$_POST['ddnsdomainkeyalgorithm'] || !$_POST['ddnsdomainkey']) { |
|
401 |
$input_errors[] = gettext("A valid domain key name, algorithm and secret must be specified."); |
|
402 |
} |
|
403 |
if (preg_match('/[^A-Za-z0-9\-_]/', $_POST['ddnsdomainkeyname'])) { |
|
404 |
$input_errors[] = gettext("The domain key name may only contain the characters a-z, A-Z, 0-9, '-' and '_'"); |
|
405 |
} |
|
406 |
if ($_POST['ddnsdomainkey'] && !base64_decode($_POST['ddnsdomainkey'], true)) { |
|
407 |
$input_errors[] = gettext("The domain key secret must be a Base64 encoded value."); |
|
408 |
} |
|
397 | 409 |
} |
398 | 410 |
if ($_POST['domainsearchlist']) { |
399 | 411 |
$domain_array = preg_split("/[ ;]+/", $_POST['domainsearchlist']); |
... | ... | |
678 | 690 |
$dhcpdconf['nonak'] = ($_POST['nonak']) ? true : false; |
679 | 691 |
$dhcpdconf['ddnsdomain'] = $_POST['ddnsdomain']; |
680 | 692 |
$dhcpdconf['ddnsdomainprimary'] = $_POST['ddnsdomainprimary']; |
693 |
$dhcpdconf['ddnsdomainsecondary'] = (!empty($_POST['ddnsdomainsecondary'])) ? $_POST['ddnsdomainsecondary'] : ''; |
|
681 | 694 |
$dhcpdconf['ddnsdomainkeyname'] = $_POST['ddnsdomainkeyname']; |
682 | 695 |
$dhcpdconf['ddnsdomainkeyalgorithm'] = $_POST['ddnsdomainkeyalgorithm']; |
683 | 696 |
$dhcpdconf['ddnsdomainkey'] = $_POST['ddnsdomainkey']; |
... | ... | |
1287 | 1300 |
'ddnsdomainprimary', |
1288 | 1301 |
'Primary DDNS address', |
1289 | 1302 |
$pconfig['ddnsdomainprimary'], |
1290 |
'V4'
|
|
1303 |
'BOTH'
|
|
1291 | 1304 |
))->setHelp('Primary domain name server IP address for the dynamic domain name.'); |
1292 | 1305 |
|
1306 |
$section->addInput(new Form_IpAddress( |
|
1307 |
'ddnsdomainsecondary', |
|
1308 |
'Secondary DDNS address', |
|
1309 |
$pconfig['ddnsdomainsecondary'], |
|
1310 |
'BOTH' |
|
1311 |
))->setHelp('Secondary domain name server IP address for the dynamic domain name.'); |
|
1312 |
|
|
1293 | 1313 |
$section->addInput(new Form_Input( |
1294 | 1314 |
'ddnsdomainkeyname', |
1295 | 1315 |
'DNS Domain key', |
... | ... | |
1316 | 1336 |
'DNS Domain key secret', |
1317 | 1337 |
'text', |
1318 | 1338 |
$pconfig['ddnsdomainkey'] |
1319 |
))->setHelp('Dynamic DNS domain key secret which will be used to register client names in the DNS server.'); |
|
1339 |
))->setAttribute('placeholder', 'Base64 encoded string') |
|
1340 |
->setHelp('Dynamic DNS domain key secret which will be used to register client names in the DNS server.'); |
|
1320 | 1341 |
|
1321 | 1342 |
$section->addInput(new Form_Select( |
1322 | 1343 |
'ddnsclientupdates', |
... | ... | |
1741 | 1762 |
!$pconfig['ddnsforcehostname'] && |
1742 | 1763 |
empty($pconfig['ddnsdomain']) && |
1743 | 1764 |
empty($pconfig['ddnsdomainprimary']) && |
1765 |
empty($pconfig['ddnsdomainsecondary']) && |
|
1744 | 1766 |
empty($pconfig['ddnsdomainkeyname']) && |
1745 | 1767 |
(empty($pconfig['ddnsdomainkeyalgorithm']) || ($pconfig['ddnsdomainkeyalgorithm'] == "hmac-md5")) && |
1746 | 1768 |
(empty($pconfig['ddnsclientupdates']) || ($pconfig['ddnsclientupdates'] == "allow")) && |
... | ... | |
1760 | 1782 |
hideInput('ddnsdomain', !showadvdns); |
1761 | 1783 |
hideCheckbox('ddnsforcehostname', !showadvdns); |
1762 | 1784 |
hideInput('ddnsdomainprimary', !showadvdns); |
1785 |
hideInput('ddnsdomainsecondary', !showadvdns); |
|
1763 | 1786 |
hideInput('ddnsdomainkeyname', !showadvdns); |
1764 | 1787 |
hideInput('ddnsdomainkeyalgorithm', !showadvdns); |
1765 | 1788 |
hideInput('ddnsdomainkey', !showadvdns); |
src/usr/local/www/services_dhcp_edit.php | ||
---|---|---|
274 | 274 |
if (($_POST['ddnsdomain'] && !is_domain($_POST['ddnsdomain']))) { |
275 | 275 |
$input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration."); |
276 | 276 |
} |
277 |
if (($_POST['ddnsdomain'] && !is_ipaddrv4($_POST['ddnsdomainprimary']))) {
|
|
278 |
$input_errors[] = gettext("A valid primary domain name server IPv4 address must be specified for the dynamic domain name.");
|
|
277 |
if (($_POST['ddnsdomain'] && !is_ipaddr($_POST['ddnsdomainprimary']))) { |
|
278 |
$input_errors[] = gettext("A valid primary domain name server IP address must be specified for the dynamic domain name."); |
|
279 | 279 |
} |
280 |
if (($_POST['ddnsdomainkey'] && !$_POST['ddnsdomainkeyname']) || |
|
281 |
($_POST['ddnsdomainkeyname'] && !$_POST['ddnsdomainkey'])) { |
|
282 |
$input_errors[] = gettext("Both a valid domain key and key name must be specified."); |
|
280 |
if ($_POST['ddnsupdate']) { |
|
281 |
if (!is_domain($_POST['ddnsdomain'])) { |
|
282 |
$input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration."); |
|
283 |
} |
|
284 |
if (!is_ipaddr($_POST['ddnsdomainprimary'])) { |
|
285 |
$input_errors[] = gettext("A valid primary domain name server IP address must be specified for the dynamic domain name."); |
|
286 |
} |
|
287 |
if (preg_match('/[^A-Za-z0-9\-_]/', $_POST['ddnsdomainkeyname'])) { |
|
288 |
$input_errors[] = gettext("The domain key name may only contain the characters a-z, A-Z, 0-9, '-' and '_'"); |
|
289 |
} |
|
290 |
if ($_POST['ddnsdomainkey'] && !base64_decode($_POST['ddnsdomainkey'], true)) { |
|
291 |
$input_errors[] = gettext("The domain key secret must be a Base64 encoded value."); |
|
292 |
} |
|
283 | 293 |
} |
284 | 294 |
if ($_POST['domainsearchlist']) { |
285 | 295 |
$domain_array=preg_split("/[ ;]+/", $_POST['domainsearchlist']); |
... | ... | |
641 | 651 |
'ddnsdomainprimary', |
642 | 652 |
'DDNS Server IP', |
643 | 653 |
$pconfig['ddnsdomainprimary'], |
644 |
'V4'
|
|
654 |
'BOTH'
|
|
645 | 655 |
))->setHelp('Enter the primary domain name server IP address for the dynamic domain name.'); |
646 | 656 |
|
647 | 657 |
$section->addInput(new Form_Input( |
src/usr/local/www/services_dhcpv6.php | ||
---|---|---|
145 | 145 |
$pconfig['enable'] = isset($config['dhcpdv6'][$if]['enable']); |
146 | 146 |
$pconfig['ddnsdomain'] = $config['dhcpdv6'][$if]['ddnsdomain']; |
147 | 147 |
$pconfig['ddnsdomainprimary'] = $config['dhcpdv6'][$if]['ddnsdomainprimary']; |
148 |
$pconfig['ddnsdomainsecondary'] = $config['dhcpdv6'][$if]['ddnsdomainsecondary']; |
|
148 | 149 |
$pconfig['ddnsdomainkeyname'] = $config['dhcpdv6'][$if]['ddnsdomainkeyname']; |
149 | 150 |
$pconfig['ddnsdomainkeyalgorithm'] = $config['dhcpdv6'][$if]['ddnsdomainkeyalgorithm']; |
150 | 151 |
$pconfig['ddnsdomainkey'] = $config['dhcpdv6'][$if]['ddnsdomainkey']; |
... | ... | |
310 | 311 |
if ($_POST['maxtime'] && (!is_numeric($_POST['maxtime']) || ($_POST['maxtime'] < 60) || ($_POST['maxtime'] <= $_POST['deftime']))) { |
311 | 312 |
$input_errors[] = gettext("The maximum lease time must be at least 60 seconds and higher than the default lease time."); |
312 | 313 |
} |
313 |
if ($_POST['ddnsupdate'] && !is_domain($_POST['ddnsdomain'])) { |
|
314 |
$input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration."); |
|
315 |
} |
|
316 |
if ($_POST['ddnsupdate'] && !is_ipaddrv4($_POST['ddnsdomainprimary'])) { |
|
317 |
$input_errors[] = gettext("A valid primary domain name server IPv4 address must be specified for the dynamic domain name."); |
|
318 |
} |
|
319 |
if ($_POST['ddnsupdate'] && (!$_POST['ddnsdomainkeyname'] || !$_POST['ddnsdomainkeyalgorithm'] || !$_POST['ddnsdomainkey'])) { |
|
320 |
$input_errors[] = gettext("A valid domain key name, algorithm and secret must be specified."); |
|
314 |
if ($_POST['ddnsupdate']) { |
|
315 |
if (!is_domain($_POST['ddnsdomain'])) { |
|
316 |
$input_errors[] = gettext("A valid domain name must be specified for the dynamic DNS registration."); |
|
317 |
} |
|
318 |
if (!is_ipaddr($_POST['ddnsdomainprimary'])) { |
|
319 |
$input_errors[] = gettext("A valid primary domain name server IP address must be specified for the dynamic domain name."); |
|
320 |
} |
|
321 |
if (!empty($_POST['ddnsdomainsecondary']) && !is_ipaddr($_POST['ddnsdomainsecondary'])) { |
|
322 |
$input_errors[] = gettext("A valid secondary domain name server IP address must be specified for the dynamic domain name."); |
|
323 |
} |
|
324 |
if (!$_POST['ddnsdomainkeyname'] || !$_POST['ddnsdomainkeyalgorithm'] || !$_POST['ddnsdomainkey']) { |
|
325 |
$input_errors[] = gettext("A valid domain key name, algorithm and secret must be specified."); |
|
326 |
} |
|
327 |
if (preg_match('/[^A-Za-z0-9\-_]/', $_POST['ddnsdomainkeyname'])) { |
|
328 |
$input_errors[] = gettext("The domain key name may only contain the characters a-z, A-Z, 0-9, '-' and '_'"); |
|
329 |
} |
|
330 |
if ($_POST['ddnsdomainkey'] && !base64_decode($_POST['ddnsdomainkey'], true)) { |
|
331 |
$input_errors[] = gettext("The domain key secret must be a Base64 encoded value."); |
|
332 |
} |
|
321 | 333 |
} |
322 | 334 |
if ($_POST['domainsearchlist']) { |
323 | 335 |
$domain_array = preg_split("/[ ;]+/", $_POST['domainsearchlist']); |
... | ... | |
450 | 462 |
$config['dhcpdv6'][$if]['enable'] = ($_POST['enable']) ? true : false; |
451 | 463 |
$config['dhcpdv6'][$if]['ddnsdomain'] = $_POST['ddnsdomain']; |
452 | 464 |
$config['dhcpdv6'][$if]['ddnsdomainprimary'] = $_POST['ddnsdomainprimary']; |
465 |
$config['dhcpdv6'][$if]['ddnsdomainsecondary'] = (!empty($_POST['ddnsdomainsecondary'])) ? $_POST['ddnsdomainsecondary'] : ''; |
|
453 | 466 |
$config['dhcpdv6'][$if]['ddnsdomainkeyname'] = $_POST['ddnsdomainkeyname']; |
454 | 467 |
$config['dhcpdv6'][$if]['ddnsdomainkeyalgorithm'] = $_POST['ddnsdomainkeyalgorithm']; |
455 | 468 |
$config['dhcpdv6'][$if]['ddnsdomainkey'] = $_POST['ddnsdomainkey']; |
... | ... | |
798 | 811 |
|
799 | 812 |
$section->addInput(new Form_IpAddress( |
800 | 813 |
'ddnsdomainprimary', |
801 |
'DDNS Server IP',
|
|
814 |
'Primary DDNS address',
|
|
802 | 815 |
$pconfig['ddnsdomainprimary'], |
803 |
'V4' |
|
804 |
))->setHelp('Enter the primary domain name server IPv4 address for the dynamic domain name.'); |
|
816 |
'BOTH' |
|
817 |
))->setHelp('Enter the primary domain name server IP address for the dynamic domain name.'); |
|
818 |
|
|
819 |
$section->addInput(new Form_IpAddress( |
|
820 |
'ddnsdomainsecondary', |
|
821 |
'Secondary DDNS address', |
|
822 |
$pconfig['ddnsdomainsecondary'], |
|
823 |
'BOTH' |
|
824 |
))->setHelp('Enter the secondary domain name server IP address for the dynamic domain name.'); |
|
805 | 825 |
|
806 | 826 |
$section->addInput(new Form_Input( |
807 | 827 |
'ddnsdomainkeyname', |
... | ... | |
829 | 849 |
'DDNS Domain Key secret', |
830 | 850 |
'text', |
831 | 851 |
$pconfig['ddnsdomainkey'] |
832 |
))->setHelp('Enter the dynamic DNS domain key secret which will be used to register client names in the DNS server.'); |
|
852 |
))->setAttribute('placeholder', 'Base64 encoded string') |
|
853 |
->setHelp('Enter the dynamic DNS domain key secret which will be used to register client names in the DNS server.'); |
|
833 | 854 |
|
834 | 855 |
$section->addInput(new Form_Select( |
835 | 856 |
'ddnsclientupdates', |
... | ... | |
1122 | 1143 |
!$pconfig['ddnsforcehostname'] && |
1123 | 1144 |
empty($pconfig['ddnsdomain']) && |
1124 | 1145 |
empty($pconfig['ddnsdomainprimary']) && |
1146 |
empty($pconfig['ddnsdomainsecondary']) && |
|
1125 | 1147 |
empty($pconfig['ddnsdomainkeyname']) && |
1126 | 1148 |
(empty($pconfig['ddnsdomainkeyalgorithm']) || ($pconfig['ddnsdomainkeyalgorithm'] == "hmac-md5")) && |
1127 | 1149 |
empty($pconfig['ddnsdomainkey']) && |
... | ... | |
1142 | 1164 |
hideInput('ddnsdomain', !showadvdns); |
1143 | 1165 |
hideCheckbox('ddnsforcehostname', !showadvdns); |
1144 | 1166 |
hideInput('ddnsdomainprimary', !showadvdns); |
1167 |
hideInput('ddnsdomainsecondary', !showadvdns); |
|
1145 | 1168 |
hideInput('ddnsdomainkeyname', !showadvdns); |
1146 | 1169 |
hideInput('ddnsdomainkeyalgorithm', !showadvdns); |
1147 | 1170 |
hideInput('ddnsdomainkey', !showadvdns); |
Also available in: Unified diff
DHCPv6 service Dynamic DNS fix. Issue #10346