ddns-scripts: refactor verify_dns()

quote variables
coalesce error conditions
code reads more cleanly and less 'stabby'.

Signed-off-by: Paul Donald <newtwen+github@gmail.com>
This commit is contained in:
Paul Donald
2025-04-11 15:38:43 +02:00
committed by Florian Eckert
parent b953ed23f7
commit 727cdeff68

View File

@@ -551,37 +551,50 @@ verify_host_port() {
fi
}
# verify given DNS server if connectable
# Verify whether a given DNS server is reachable
# $1 DNS server to verify
verify_dns() {
local __ERR=255 # last error buffer
local __CNT=0 # error counter
local err attempt
err=255 # Last error code
attempt=0 # Retry attempt counter
[ $# -ne 1 ] && write_log 12 "Error calling 'verify_dns()' - wrong number of parameters"
write_log 7 "Verify DNS server '$1'"
[ "$#" -ne 1 ] && { write_log 12 "Error: 'verify_dns()' requires exactly 1 argument."; return 1; }
while [ $__ERR -ne 0 ]; do
# DNS uses port 53
verify_host_port "$1" "53"
__ERR=$?
if [ -n "$LUCI_HELPER" ]; then # no retry if called by LuCI helper script
return $__ERR
elif [ $__ERR -ne 0 -a $VERBOSE -gt 1 ]; then # VERBOSE > 1 then NO retry
write_log 4 "Verify DNS server '$1' failed - Verbose Mode: $VERBOSE - NO retry on error"
return $__ERR
elif [ $__ERR -ne 0 ]; then
__CNT=$(( $__CNT + 1 )) # increment error counter
# if error count > retry_max_count leave here
[ $retry_max_count -gt 0 -a $__CNT -gt $retry_max_count ] && \
write_log 14 "Verify DNS server '$1' failed after $retry_max_count retries"
local dns_server="$1"
write_log 7 "Verifying DNS server: '$dns_server'"
write_log 4 "Verify DNS server '$1' failed - retry $__CNT/$retry_max_count in $RETRY_SECONDS seconds"
sleep $RETRY_SECONDS &
PID_SLEEP=$!
wait $PID_SLEEP # enable trap-handler
PID_SLEEP=0
while [ "$err" -ne 0 ]; do
# Check connectivity to the DNS server on port 53
verify_host_port "$dns_server" "53"
err=$?
# Exit immediately if called by LuCI helper script
[ -n "$LUCI_HELPER" ] && return "$err"
if [ "$err" -ne 0 ]; then
# If in verbose mode and connection fails, do not retry
if [ "$VERBOSE" -gt 1 ]; then
write_log 4 "Verification failed for DNS server '$dns_server' - Verbose Mode: $VERBOSE - No retries."
return "$err"
fi
# Increment attempt counter and handle retry
attempt=$((attempt + 1))
# If max retries are exceeded, exit with failure
if [ "$retry_max_count" -gt 0 ] && [ "$attempt" -gt "$retry_max_count" ]; then
write_log 14 "Verification failed for DNS server '$dns_server' after $retry_max_count retries."
return "$err"
fi
# Log the retry attempt and wait before retrying
write_log 4 "Verification failed for DNS server '$dns_server' - Retry $attempt/$retry_max_count in $RETRY_SECONDS seconds."
sleep "$RETRY_SECONDS" &
wait $! # Enable trap handler during sleep
fi
done
# Return success if the loop exits without errors
return 0
}