summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interface-definitions/dns-dynamic.xml.in136
-rwxr-xr-xsrc/completion/list_ddclient_protocols.sh17
-rwxr-xr-xsrc/validators/ddclient-protocol24
3 files changed, 72 insertions, 105 deletions
diff --git a/interface-definitions/dns-dynamic.xml.in b/interface-definitions/dns-dynamic.xml.in
index 58dd48f9d..48c101d73 100644
--- a/interface-definitions/dns-dynamic.xml.in
+++ b/interface-definitions/dns-dynamic.xml.in
@@ -14,10 +14,17 @@
<children>
<tagNode name="interface">
<properties>
- <help>Interface to send DDNS updates for</help>
+ <help>Interface to send Dynamic DNS updates for</help>
<completionHelp>
<script>${vyos_completion_dir}/list_interfaces</script>
</completionHelp>
+ <valueHelp>
+ <format>txt</format>
+ <description>Interface name</description>
+ </valueHelp>
+ <constraint>
+ #include <include/constraint/interface-name.xml.i>
+ </constraint>
</properties>
<children>
<tagNode name="rfc2136">
@@ -127,144 +134,63 @@
<children>
<leafNode name="host-name">
<properties>
- <help>Hostname registered with DDNS service</help>
+ <help>Hostname to register with Dynamic DNS service</help>
+ <constraint>
+ #include <include/constraint/host-name.xml.i>
+ </constraint>
+ <constraintErrorMessage>Host-name must be alphanumeric and can contain hyphens</constraintErrorMessage>
<multi/>
</properties>
</leafNode>
<leafNode name="login">
<properties>
- <help>Login for DDNS service</help>
- </properties>
- </leafNode>
- <leafNode name="password">
- <properties>
- <help>Password for DDNS service</help>
+ <help>Login/Username for Dynamic DNS service</help>
</properties>
</leafNode>
+ #include <include/generic-password.xml.i>
<leafNode name="protocol">
<properties>
- <help>ddclient protocol used for DDNS service</help>
+ <help>ddclient protocol used for Dynamic DNS service</help>
<completionHelp>
- <list>changeip cloudflare dnsmadeeasy dnspark dondominio dslreports1 dtdns duckdns dyndns2 easydns freedns freemyip googledomains hammernode1 namecheap nfsn noip sitelutions woima yandex zoneedit1</list>
+ <script>${vyos_completion_dir}/list_ddclient_protocols.sh</script>
</completionHelp>
- <valueHelp>
- <format>changeip</format>
- <description>ChangeIP protocol</description>
- </valueHelp>
- <valueHelp>
- <format>cloudflare</format>
- <description>Cloudflare protocol</description>
- </valueHelp>
- <valueHelp>
- <format>dnsmadeeasy</format>
- <description>DNS Made Easy protocol</description>
- </valueHelp>
- <valueHelp>
- <format>dnspark</format>
- <description>DNS Park protocol</description>
- </valueHelp>
- <valueHelp>
- <format>dondominio</format>
- <description>DonDominio protocol</description>
- </valueHelp>
- <valueHelp>
- <format>dslreports1</format>
- <description>DslReports protocol</description>
- </valueHelp>
- <valueHelp>
- <format>dtdns</format>
- <description>DtDNS protocol</description>
- </valueHelp>
- <valueHelp>
- <format>duckdns</format>
- <description>DuckDNS protocol</description>
- </valueHelp>
- <valueHelp>
- <format>dyndns2</format>
- <description>DynDNS protocol v2</description>
- </valueHelp>
- <valueHelp>
- <format>easydns</format>
- <description>easyDNS protocol</description>
- </valueHelp>
- <valueHelp>
- <format>freedns</format>
- <description>FreeDNS protocol</description>
- </valueHelp>
- <valueHelp>
- <format>freemyip</format>
- <description>freemyip protocol</description>
- </valueHelp>
- <valueHelp>
- <format>googledomains</format>
- <description>Google domains protocol</description>
- </valueHelp>
- <valueHelp>
- <format>hammernode1</format>
- <description>Hammernode protocol</description>
- </valueHelp>
- <valueHelp>
- <format>namecheap</format>
- <description>Namecheap protocol</description>
- </valueHelp>
- <valueHelp>
- <format>nfsn</format>
- <description>NearlyFreeSpeech DNS protocol</description>
- </valueHelp>
- <valueHelp>
- <format>noip</format>
- <description>No-IP protocol</description>
- </valueHelp>
- <valueHelp>
- <format>sitelutions</format>
- <description>Sitelutions protocol</description>
- </valueHelp>
- <valueHelp>
- <format>woima</format>
- <description>WOIMA protocol</description>
- </valueHelp>
- <valueHelp>
- <format>yandex</format>
- <description>Yandex.DNS protocol</description>
- </valueHelp>
- <valueHelp>
- <format>zoneedit1</format>
- <description>Zoneedit protocol</description>
- </valueHelp>
<constraint>
- <regex>(changeip|cloudflare|dnsmadeeasy|dnspark|dondominio|dslreports1|dtdns|duckdns|dyndns2|easydns|freedns|freemyip|googledomains|hammernode1|namecheap|nfsn|noip|sitelutions|woima|yandex|zoneedit1)</regex>
+ <validator name="ddclient-protocol"/>
</constraint>
- <constraintErrorMessage>Please choose from the list of allowed protocols</constraintErrorMessage>
</properties>
</leafNode>
#include <include/server-ipv4-fqdn.xml.i>
<leafNode name="zone">
<properties>
- <help>DNS zone to update (only available with CloudFlare)</help>
+ <help>DNS zone to update (not used by all protocols)</help>
+ <valueHelp>
+ <format>txt</format>
+ <description>Name of DNS zone</description>
+ </valueHelp>
</properties>
</leafNode>
</children>
</tagNode>
<node name="use-web">
<properties>
- <help>Web check used for obtaining the external IP address</help>
+ <help>Use HTTP(S) web request to obtain external IP address instead of the IP address associated with the interface</help>
</properties>
<children>
<leafNode name="skip">
<properties>
- <help>Skip everything before this on the given URL</help>
- </properties>
- </leafNode>
- <leafNode name="url">
- <properties>
- <help>URL to obtain the current external IP address</help>
+ <help>Pattern to skip from the respose</help>
+ <valueHelp>
+ <format>txt</format>
+ <description>Pattern to skip from the respose of the given URL to extract the external IP address</description>
+ </valueHelp>
</properties>
</leafNode>
+ #include <include/url.xml.i>
</children>
</node>
<leafNode name="ipv6-enable">
<properties>
- <help>Allow explicit IPv6 addresses for Dynamic DNS for this interface</help>
+ <help>Explicitly use IPv6 address instead of IPv4 address to update the Dynamic DNS IP address</help>
<valueless/>
</properties>
</leafNode>
diff --git a/src/completion/list_ddclient_protocols.sh b/src/completion/list_ddclient_protocols.sh
new file mode 100755
index 000000000..75fb0cf44
--- /dev/null
+++ b/src/completion/list_ddclient_protocols.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+#
+# Copyright (C) 2023 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+echo -n $(ddclient -list-protocols)
diff --git a/src/validators/ddclient-protocol b/src/validators/ddclient-protocol
new file mode 100755
index 000000000..6f927927b
--- /dev/null
+++ b/src/validators/ddclient-protocol
@@ -0,0 +1,24 @@
+#!/bin/sh
+#
+# Copyright (C) 2023 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ddclient -list-protocols | grep -qw $1
+
+if [ $? -gt 0 ]; then
+ echo "Error: $1 is not a valid protocol, please choose from the supported list of protocols"
+ exit 1
+fi
+
+exit 0