Project

General

Profile

« Previous | Next » 

Revision 9fbd8f71

Added by Viktor Gurov over 5 years ago

DHCPv6 service Dynamic DNS fix. Issue #10346

View differences:

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