summaryrefslogtreecommitdiffstats
path: root/ddns-client
diff options
context:
space:
mode:
Diffstat (limited to 'ddns-client')
-rwxr-xr-xddns-client/libexec/ddns-client/list45
-rwxr-xr-xddns-client/libexec/ddns-client/remove83
-rwxr-xr-xddns-client/libexec/ddns-client/update99
3 files changed, 227 insertions, 0 deletions
diff --git a/ddns-client/libexec/ddns-client/list b/ddns-client/libexec/ddns-client/list
new file mode 100755
index 0000000..664ddf5
--- /dev/null
+++ b/ddns-client/libexec/ddns-client/list
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# SPDX-License-Identifier: GPL-3.0+
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+set -e
+
+. /etc/network-tools/config/ddns-client.conf
+
+# alternatives handling for dig
+if command -v kdig > /dev/null 2>&1
+then
+ # knot-dnsutils
+ DIG="kdig +noadditional"
+elif command -v dig > /dev/null 2>&1
+then
+ # bind9-dnsutils
+ DIG="dig +noadditional"
+else
+ echo "'${HOOK}': need dig from bind9-dnsutils or knot-dnsutils" >&2
+ exit 1
+fi
+
+NAMESERVER="$(echo ${NAMESERVERS} | awk '{ print $1 }')"
+
+# Run
+for NAMESERVER in ${NAMESERVERS}
+do
+ # shellcheck disable=SC2086
+ ${DIG} -k "${TSIG_KEYFILE}" @"${NAMESERVER}" AXFR "${ZONE}"
+done | grep -E 'IN (A|AAAA|TXT) ' | sort -u
diff --git a/ddns-client/libexec/ddns-client/remove b/ddns-client/libexec/ddns-client/remove
new file mode 100755
index 0000000..de14479
--- /dev/null
+++ b/ddns-client/libexec/ddns-client/remove
@@ -0,0 +1,83 @@
+#!/bin/sh
+
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# SPDX-License-Identifier: GPL-3.0+
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+set -e
+
+. /etc/network-tools/config/ddns-client.conf
+
+# alternatives handling for knsupdate/nsupdate
+if command -v knsupdate > /dev/null 2>&1
+then
+ # knot-dnsutils
+ NSUPDATE="knsupdate -k ${TSIG_KEYFILE}"
+elif command -v nsupdate > /dev/null 2>&1
+then
+ # bind9-dnsutils
+ NSUPDATE="nsupdate -k ${TSIG_KEYFILE}"
+else
+ echo "'${HOOK}': need nsupdate from bind9-dnsutils or knot-dnsutils" >&2
+ exit 1
+fi
+
+# alternatives handling for wget/curl
+if command -v wget > /dev/null 2>&1
+then
+ # wget
+ GET="wget -q -O - -U $(basename "${0}")/git"
+elif command -v curl > /dev/null 2>&1
+then
+ # curl
+ GET="curl -s -A $(basename "${0}")/git"
+else
+ echo "'${HOOK}': need wget or curl" >&2
+ exit 1
+fi
+
+IPV4_ADDRESS="$(${GET} -4 https://tools.bfh.info/api/v0/ipv4/address/ | jq -r -M '.data.ipv4_address')"
+IPV6_ADDRESS="$(${GET} -6 https://tools.bfh.info/api/v0/ipv6/address/ | jq -r -M '.data.ipv6_address')"
+
+DATE="$(date +%Y-%m-%d\ %H:%M:%S)"
+
+Update_record ()
+{
+ ACTION="${1}"
+ TYPE="${2}"
+ ADDRESS="${3}"
+
+ echo -n "${NAMESERVER}: ${ACTION} ${RECORD}.${ZONE} ${TTL} ${TYPE} ${ADDRESS}:"
+
+# shellcheck disable=SC2086
+echo "server ${NAMESERVER}
+zone ${ZONE}
+ttl ${TTL}
+update ${ACTION} ${RECORD}.${ZONE} ${TTL} ${TYPE} ${ADDRESS}
+send" | ${NSUPDATE}
+
+ echo " done."
+}
+
+# Run
+for NAMESERVER in ${NAMESERVERS}
+do
+ Update_record delete AAAA
+ Update_record delete A
+ Update_record delete TXT
+
+ echo
+done
diff --git a/ddns-client/libexec/ddns-client/update b/ddns-client/libexec/ddns-client/update
new file mode 100755
index 0000000..d0bfc9f
--- /dev/null
+++ b/ddns-client/libexec/ddns-client/update
@@ -0,0 +1,99 @@
+#!/bin/sh
+
+# Copyright (C) 2014-2021 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# SPDX-License-Identifier: GPL-3.0+
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# 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 <https://www.gnu.org/licenses/>.
+
+set -e
+
+. /etc/network-tools/config/ddns-client.conf
+
+# alternatives handling for knsupdate/nsupdate
+if command -v knsupdate > /dev/null 2>&1
+then
+ # knot-dnsutils
+ NSUPDATE="knsupdate -k ${TSIG_KEYFILE}"
+elif command -v nsupdate > /dev/null 2>&1
+then
+ # bind9-dnsutils
+ NSUPDATE="nsupdate -k ${TSIG_KEYFILE}"
+else
+ echo "'${HOOK}': need nsupdate from bind9-dnsutils or knot-dnsutils" >&2
+ exit 1
+fi
+
+# alternatives handling for wget/curl
+if command -v wget > /dev/null 2>&1
+then
+ # wget
+ GET="wget -q -O - -U $(basename "${0}")/git"
+elif command -v curl > /dev/null 2>&1
+then
+ # curl
+ GET="curl -s -A $(basename "${0}")/git"
+else
+ echo "'${HOOK}': need wget or curl" >&2
+ exit 1
+fi
+
+IPV4_ADDRESS="$(${GET} -4 https://tools.bfh.info/api/v0/ipv4/address/ | jq -r -M '.data.ipv4_address')"
+IPV6_ADDRESS="$(${GET} -6 https://tools.bfh.info/api/v0/ipv6/address/ | jq -r -M '.data.ipv6_address')"
+
+DATE="$(date +%Y-%m-%d\ %H:%M:%S)"
+
+Update_record ()
+{
+ ACTION="${1}"
+ TYPE="${2}"
+ ADDRESS="${3}"
+
+ echo -n "${NAMESERVER}: ${ACTION} ${RECORD}.${ZONE} ${TTL} ${TYPE} ${ADDRESS}:"
+
+# shellcheck disable=SC2086
+echo "server ${NAMESERVER}
+zone ${ZONE}
+ttl ${TTL}
+update ${ACTION} ${RECORD}.${ZONE} ${TTL} ${TYPE} ${ADDRESS}
+send" | ${NSUPDATE}
+
+ echo " done."
+}
+
+# Run
+for NAMESERVER in ${NAMESERVERS}
+do
+ Update_record delete AAAA
+ Update_record delete A
+
+ Update_record delete TXT
+
+ if [ -n "${IPV6_ADDRESS}" ] && [ "${IPV6_ADDRESS}" != "null" ]
+ then
+ Update_record add AAAA "${IPV6_ADDRESS}"
+ fi
+
+ if [ -n "${IPV4_ADDRESS}" ] && [ "${IPV4_ADDRESS}" != "null" ]
+ then
+ Update_record add A "${IPV4_ADDRESS}"
+ fi
+
+ if [ -n "${IPV6_ADDRESS}" ] || [ -n "${IPV4_ADDRESS}" ]
+ then
+ Update_record add TXT "\"last update: ${DATE}\""
+ fi
+
+ echo
+done