diff options
author | Erich Eckner <git@eckner.net> | 2017-02-22 18:17:43 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2017-02-22 18:17:43 +0100 |
commit | 688ae0119124d48dfe0dca364aa3f519804fec84 (patch) | |
tree | ce3c7744f1090bf538cea323ed2079a247572ce8 /update-ddns.in | |
download | update-ddns-688ae0119124d48dfe0dca364aa3f519804fec84.tar.xz |
geht erst mal
Diffstat (limited to 'update-ddns.in')
-rw-r--r-- | update-ddns.in | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/update-ddns.in b/update-ddns.in new file mode 100644 index 0000000..da7facd --- /dev/null +++ b/update-ddns.in @@ -0,0 +1,80 @@ +#!/bin/bash + +set -e + +stty &> /dev/null || \ + sleep $[$RANDOM%60] + +if ! ipCmd="$(which ip 2> /dev/null)" +then + for p1 in / /usr/ + do + for p2 in bin/ sbin/ + do + ipCmd="${p1}${p2}ip" + [ -x "${ipCmd}" ] && break + done + [ -x "${ipCmd}" ] && break + done +fi + +while read -r ipVer authToken dev dnsName +do + + if [[ "${ipVer}" = "#"* ]] || [ -z "${ipVer}" ] + then + continue + fi + + if [ ${ipVer} == "4" ] + then + dnsVer="A" + inetVer="inet" + syncPre="" + elif [ ${ipVer} == "6" ] + then + dnsVer="AAAA" + inetVer="inet6" + syncPre="v6." + else + >&2 echo 'Error: First column in "#ETCDIR#/update-ddns.conf" needs to be "4" or "6"!' + exit 1 + fi + + if [ -z "${dnsName}" ] + then + dnsIps="$( + curl -${ipVer} "${dev}" 2> /dev/null + )" + ips="1" + else + dnsIps="$( + dig "${dnsName}" ${dnsVer} | \ + grep -v '^\s*\(;\|$\)' | \ + grep "\s${dnsVer}\s" | \ + awk '{print $5}' | \ + sort -u + )" + + ips="$( + "${ipCmd}" addr show dev "${dev}" | \ + grep "^\s*${inetVer}\s.*\sscope\sglobal\s" | \ + awk '{print $2}' | \ + cut -d/ -f1 | \ + sort -u + )" + fi + + if [ -z "$( + ( + echo "${dnsIps}" + echo "${ips}" + ) | \ + sort | \ + uniq -d + )" ] + then + echo curl -sS "https://${syncPre}sync.afraid.org/u/${authToken}/" + fi + +done < #ETCDIR#/update-ddns.conf |