From 9207dc4d9369e2bf5a133ff2b89296d57cd2ac15 Mon Sep 17 00:00:00 2001 From: jim-p Date: Wed, 3 Feb 2016 13:55:52 -0500 Subject: [PATCH] Add RFC 2136 support to the DynDNS widget --- .../widgets/widgets/dyn_dns_status.widget.php | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/src/usr/local/www/widgets/widgets/dyn_dns_status.widget.php b/src/usr/local/www/widgets/widgets/dyn_dns_status.widget.php index fe501a536a..c8de7dfe82 100644 --- a/src/usr/local/www/widgets/widgets/dyn_dns_status.widget.php +++ b/src/usr/local/www/widgets/widgets/dyn_dns_status.widget.php @@ -65,30 +65,48 @@ if (!is_array($config['dyndnses']['dyndns'])) { $config['dyndnses']['dyndns'] = array(); } -$a_dyndns = &$config['dyndnses']['dyndns']; +$a_dyndns = $config['dyndnses']['dyndns']; + +if (!is_array($config['dnsupdates']['dnsupdate'])) { + $config['dnsupdates']['dnsupdate'] = array(); +} + +$a_rfc2136 = $config['dnsupdates']['dnsupdate']; + +$all_dyndns = array_merge($a_dyndns, $a_rfc2136); if ($_REQUEST['getdyndnsstatus']) { $first_entry = true; - foreach ($a_dyndns as $dyndns) { + foreach ($all_dyndns as $dyndns) { if ($first_entry) { $first_entry = false; } else { // Put a vertical bar delimiter between the echoed HTML for each entry processed. echo "|"; } - + $cache_sep = ":"; if ($dyndns['type'] == "namecheap") { $hostname = $dyndns['host'] . "." . $dyndns['domainname']; + } elseif (empty($dyndns['type'])) { + /* RFC2136, add some dummy values */ + $dyndns['type'] = '_rfc2136_'; + $dyndns['id'] = '_' . $dyndns['server']; + $hostname = $dyndns['host']; + $cache_sep = "|"; } else { $hostname = $dyndns['host']; } $filename = "{$g['conf_path']}/dyndns_{$dyndns['interface']}{$dyndns['type']}" . escapeshellarg($hostname) . "{$dyndns['id']}.cache"; if (file_exists($filename)) { - $ipaddr = dyndnsCheckIP($dyndns['interface']); - $cached_ip_s = explode(':', file_get_contents($filename)); + if (($dyndns['type'] == '_rfc2136_') && (!isset($dyndns['usepublicip']))) { + $ipaddr = get_interface_ip(get_failover_interface($dyndns['interface'])); + } else { + $ipaddr = dyndnsCheckIP($dyndns['interface']); + } + $cached_ip_s = explode($cache_sep, file_get_contents($filename)); $cached_ip = $cached_ip_s[0]; - if ($ipaddr <> $cached_ip) { + if (trim($ipaddr) != trim($cached_ip)) { print(''); } else { print(''); @@ -114,9 +132,15 @@ if ($_REQUEST['getdyndnsstatus']) { - @@ -148,6 +172,9 @@ if ($_REQUEST['getdyndnsstatus']) { break; } } + if ($dyndns['type'] == '_rfc2136_') : ?> + RFC 2136 +