From 77dc861c665d92e180fb4b18fa277b0051fa2827 Mon Sep 17 00:00:00 2001 From: "Le.Beta" Date: Fri, 4 Mar 2022 15:20:43 +0800 Subject: [PATCH 1/6] add support for dnspod --- dns/dyndns/src/etc/inc/plugins.inc.d/dyndns.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns.inc b/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns.inc index 54f1db403d..a67d54f95d 100644 --- a/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns.inc +++ b/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns.inc @@ -154,6 +154,7 @@ function dyndns_list() 'strato' => 'STRATO', 'strato-v6' => 'STRATO (v6)', 'zoneedit' => 'ZoneEdit', + 'dnspod' => 'DNSPod', ); } From a3886bd230c1db315babd65de3df07f4b5fa84b8 Mon Sep 17 00:00:00 2001 From: "Le.Beta" Date: Fri, 4 Mar 2022 15:24:33 +0800 Subject: [PATCH 2/6] add support for dnspod --- dns/dyndns/src/www/services_dyndns_edit.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dns/dyndns/src/www/services_dyndns_edit.php b/dns/dyndns/src/www/services_dyndns_edit.php index 9eac454d85..52d08e19ef 100644 --- a/dns/dyndns/src/www/services_dyndns_edit.php +++ b/dns/dyndns/src/www/services_dyndns_edit.php @@ -327,6 +327,7 @@ function is_dyndns_username($uname)
+
@@ -380,6 +381,7 @@ function is_dyndns_username($uname)


+
@@ -399,6 +401,7 @@ function is_dyndns_username($uname)


+
From 8304ce031738cb5d0ef9bf7b4278db546f4694c5 Mon Sep 17 00:00:00 2001 From: "Le.Beta" Date: Fri, 4 Mar 2022 15:39:15 +0800 Subject: [PATCH 3/6] add support for dnspod --- .../inc/plugins.inc.d/dyndns/phpDynDNS.inc | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc b/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc index 0bf6908165..dc3719483f 100644 --- a/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc +++ b/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc @@ -62,6 +62,7 @@ * dynv6 v6 - Last Tested: 25 June 2019 * regfish - Last Tested: 15 August 2017 * regfish v6 - Last Tested: 15 August 2017 + * dnspod - Last Tested: 10 Oct. 2021 * +====================================================+ * * @author E.Kristensen @@ -236,6 +237,15 @@ class updatedns $this->_error(5); } break; + case 'dnspod': + if (!$dnsUser) { + $this->_error(3); + } elseif (!$dnsPass) { + $this->_error(4); + } elseif (!$dnsHost) { + $this->_error(5); + } + break; default: if (!$dnsUser) { $this->_error(3); @@ -366,6 +376,7 @@ class updatedns case 'strato': case 'strato-v6': case 'zoneedit': + case 'dnspod': $this->_update(); if ($this->_dnsDummyUpdateDone == true) { // If a dummy update was needed, then sleep a while and do the update again to put the proper address back. @@ -1313,6 +1324,85 @@ class updatedns curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsHost . ':' . $this->_dnsPass); curl_setopt($ch, CURLOPT_URL, $server . $url); break; + case 'dnspod': + $token = $this->_dnsPass; + $pos1 = stripos($this->_dnsHost, '.'); + // get current records + $post_data['domain'] = substr($this->_dnsHost, $pos1 + 1); + $post_data['sub_domain'] = substr($this->_dnsHost, 0, $pos1); + $post_data['record_type'] = 'A'; + $post_data['login_token'] = $token; + $post_data['format'] = 'json'; + $post_data['lang'] = 'en'; + $body = json_encode($post_data); + log_error("get current records, body:" . $body); + + $server = "https://dnsapi.cn/Record.List"; + curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); + curl_setopt($ch, CURLOPT_URL, $server); + curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + + $data = curl_exec($ch); + $output = json_decode($data); + if ($output->status->code == 1) { + log_error("Dynamic DNS: (Success) get {$this->_dnsHost} records, records_num: {$output->info->records_num}"); + } elseif ( $output->status->code == 10) { + log_error("Dynamic DNS: (Success) get {$this->_dnsHost} records, message: {$output->status->message}"); + } else { + log_error("Dynamic DNS (Failed) get {$this->_dnsHost} records, code: {$output->status->code}, message: {$output->status->message}"); + @curl_close($ch); + return false; + } + + $recordId = null; + $recordLineId = "0"; + $oldIP = ""; + // find recordId + if (!empty($output->records)) { + foreach ($output->records as $key => $recordObj) { + if (preg_match("/^{$recordObj->name}$/", "@")) { // FIXME by name + if ($recordObj->type == 'A') { + // Found matching host + $recordId = $recordObj->id; + $oldIP = $recordObj->value; + $recordLineId = $recordObj->line_id; + break; + } + } + } + } + + // check if IP changed + if ($this->_dnsIP === $oldIP) { + log_error("recordId: {$recordId} IP not changed, skip update"); + @curl_close($ch); + return true; + } + + // create new record or modify exist one + if (!$recordId) { + $server = "https://dnsapi.cn/Record.Create"; + } else { + $server = "https://dnsapi.cn/Record.Modify"; + $post_data['record_id'] = $recordId; + } + + $post_data['domain'] = substr($this->_dnsHost, $pos1 + 1); + $post_data['sub_domain'] = substr($this->_dnsHost, 0, $pos1); + $post_data['record_type'] = 'A'; + $post_data['record_line_id'] = $recordLineId; + $post_data['value'] = $this->_dnsIP; + $post_data['mx'] = $this->_dnsMX; + $post_data['login_token'] = $token; + $post_data['format'] = 'json'; + $post_data['lang'] = 'en'; + + curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); + curl_setopt($ch, CURLOPT_URL, $server); + curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); + break; default: break; } @@ -1850,6 +1940,16 @@ class updatedns $this->_debug("Unknown HTTP status: " . $http_code); } break; + case 'dnspod': + $output = json_decode($data); + if ($output->status->code == 1) { + $status = "Dynamic DNS: (Success) {$this->_dnsHost} updated to {$this->_dnsIP}"; + $successful_update = true; + } else { + $status = "Dynamic DNS ({$this->_dnsHost}): update err, code: {$output->status->code}, message: {$output->status->message}"; + log_error("Dynamic DNS ({$this->_dnsHost}): update err, code: {$output->status->code}, message: {$output->status->message}"); + } + break; default: break; } From 0e896d65241b70952ee35222ca8270e951f6eb26 Mon Sep 17 00:00:00 2001 From: "Le.Beta" Date: Sun, 6 Mar 2022 00:52:23 +0800 Subject: [PATCH 4/6] add support for dnspod sub_domain --- dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc b/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc index dc3719483f..7c17417ef8 100644 --- a/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc +++ b/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc @@ -1339,6 +1339,7 @@ class updatedns $server = "https://dnsapi.cn/Record.List"; curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); + curl_setopt($ch, CURLOPT_USERAGENT, $this->_UserAgent); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_URL, $server); curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); @@ -1361,7 +1362,7 @@ class updatedns // find recordId if (!empty($output->records)) { foreach ($output->records as $key => $recordObj) { - if (preg_match("/^{$recordObj->name}$/", "@")) { // FIXME by name + if (preg_match("/^{$recordObj->name}$/", substr($this->_dnsHost, 0, $pos1))) { // FIXME by name if ($recordObj->type == 'A') { // Found matching host $recordId = $recordObj->id; @@ -1399,6 +1400,7 @@ class updatedns $post_data['lang'] = 'en'; curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); + curl_setopt($ch, CURLOPT_USERAGENT, $this->_UserAgent); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_URL, $server); curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); From deddd7fea032385a8e345adcaa1261c63e65e930 Mon Sep 17 00:00:00 2001 From: "Le.Beta" Date: Sun, 6 Mar 2022 00:57:21 +0800 Subject: [PATCH 5/6] add support for dnspod --- dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc b/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc index 7c17417ef8..81bdb61a1d 100644 --- a/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc +++ b/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc @@ -238,9 +238,7 @@ class updatedns } break; case 'dnspod': - if (!$dnsUser) { - $this->_error(3); - } elseif (!$dnsPass) { + if (!$dnsPass) { $this->_error(4); } elseif (!$dnsHost) { $this->_error(5); From 54b8852bfd42e10b24b3d78cb67d4741f87bdcf9 Mon Sep 17 00:00:00 2001 From: "Le.Beta" Date: Sun, 6 Mar 2022 01:17:56 +0800 Subject: [PATCH 6/6] add support for dnspod --- dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc b/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc index 81bdb61a1d..41fe413d4d 100644 --- a/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc +++ b/dns/dyndns/src/etc/inc/plugins.inc.d/dyndns/phpDynDNS.inc @@ -1337,7 +1337,7 @@ class updatedns $server = "https://dnsapi.cn/Record.List"; curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); - curl_setopt($ch, CURLOPT_USERAGENT, $this->_UserAgent); + curl_setopt($ch, CURLOPT_USERAGENT, "phpDynDNS/0.8(kevinlin@opnsense.com)"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_URL, $server); curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); @@ -1398,7 +1398,7 @@ class updatedns $post_data['lang'] = 'en'; curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); - curl_setopt($ch, CURLOPT_USERAGENT, $this->_UserAgent); + curl_setopt($ch, CURLOPT_USERAGENT, "phpDynDNS/0.8(kevinlin@opnsense.com)"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_URL, $server); curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);