#!/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 updateUrl dev dnsName do if [[ "${ipVer}" = '#'* ]] || [ -z "${ipVer}" ] then continue fi if [ "${ipVer}" == "4" ] then dnsVer="A" inetVer="inet" elif [ "${ipVer}" == "6" ] then dnsVer="AAAA" inetVer="inet6" 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" unset updateIp else dnsIps="$( dig $1 "${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 )" if [ $(echo "${ips}" | wc -l) -eq 1 ] then updateIp='address='"${ips}" if [[ "${updateUrl}" = *'?'* ]] then updateIp='&'"${updateIp}" else updateIp='?'"${updateIp}" fi else unset updateIp fi fi if [ -z "$( ( echo "${dnsIps}" echo "${ips}" ) | \ sort | \ uniq -d )" ] then curl -${ipVer} -sS "${updateUrl}${updateIp}" 2> /dev/null fi done < #ETCDIR#/update-ddns.conf