From: Paul Donald Date: Fri, 11 Apr 2025 13:38:43 +0000 (+0200) Subject: ddns-scripts: refactor verify_dns() X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=727cdeff681ee47eb6436350cfb15ab08cf509a0;p=feed%2Fpackages.git ddns-scripts: refactor verify_dns() quote variables coalesce error conditions code reads more cleanly and less 'stabby'. Signed-off-by: Paul Donald --- diff --git a/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_functions.sh b/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_functions.sh index ebafb629bc..6ca7217c2f 100644 --- a/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_functions.sh +++ b/net/ddns-scripts/files/usr/lib/ddns/dynamic_dns_functions.sh @@ -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 }