@@ -381,6 +381,7 @@ HAS_NSLOOKUP=false
381
381
HAS_IDN=false
382
382
HAS_IDN2=false
383
383
HAS_AVAHIRESOLVE=false
384
+ HAS_DSCACHEUTIL=false
384
385
HAS_DIG_NOIDNOUT=false
385
386
HAS_XXD=false
386
387
@@ -21550,6 +21551,7 @@ HAS_NSLOOKUP: $HAS_NSLOOKUP
21550
21551
HAS_IDN: $HAS_IDN
21551
21552
HAS_IDN2: $HAS_IDN2
21552
21553
HAS_AVAHIRESOLVE: $HAS_AVAHIRESOLVE
21554
+ HAS_DSCACHEUTIL: $HAS_DSCACHEUTIL
21553
21555
HAS_DIG_NOIDNOUT: $HAS_DIG_NOIDNOUT
21554
21556
HAS_DIG_R: $HAS_DIG_R
21555
21557
HAS_XXD: $HAS_XXD
@@ -22049,6 +22051,7 @@ check_resolver_bins() {
22049
22051
type -p avahi-resolve &>/dev/null && HAS_AVAHIRESOLVE=true
22050
22052
type -p idn &>/dev/null && HAS_IDN=true
22051
22053
type -p idn2 &>/dev/null && HAS_IDN2=true
22054
+ type -p dscacheutil &> /dev/null && HAS_DSCACHEUTIL=true
22052
22055
22053
22056
if ! "$HAS_DIG" && ! "$HAS_HOST" && ! "$HAS_DRILL" && ! "$HAS_NSLOOKUP"; then
22054
22057
fatal "Neither \"dig\", \"host\", \"drill\" nor \"nslookup\" is present" $ERR_DNSBIN
@@ -22088,17 +22091,22 @@ get_a_record() {
22088
22091
fi
22089
22092
OPENSSL_CONF="" # see https://github.com/testssl/testssl.sh/issues/134
22090
22093
if [[ "$NODE" == *.local ]]; then
22091
- if "$HAS_AVAHIRESOLVE"; then
22094
+ if "$HAS_DSCACHEUTIL"; then
22095
+ ip4=$(filter_ip4_address $(dscacheutil -q host -a name "$1" | awk '/^ip_address:/ { print $2 }'))
22096
+ elif "$HAS_AVAHIRESOLVE"; then
22092
22097
ip4=$(filter_ip4_address $(avahi-resolve -4 -n "$1" 2>/dev/null | awk '{ print $2 }'))
22093
22098
elif "$HAS_DIG"; then
22094
22099
ip4=$(filter_ip4_address $(dig $DIG_R @224.0.0.251 -p 5353 +short -t a +notcp "$1" 2>/dev/null | sed '/^;;/d'))
22095
22100
elif "$HAS_DRILL"; then
22096
22101
ip4=$(filter_ip4_address $(drill @224.0.0.251 -p 5353 "$1" 2>/dev/null | awk '/ANSWER SECTION/,/AUTHORITY SECTION/ { print $NF }' | awk '/^[0-9]/'))
22097
22102
else
22098
- fatal "Local hostname given but neither 'avahi-resolve', 'dig' nor 'drill' is available." $ERR_DNSBIN
22103
+ fatal "Local hostname given but neither 'dscacheutil', ' avahi-resolve', 'dig' nor 'drill' is available." $ERR_DNSBIN
22099
22104
fi
22100
22105
[[ -z "$ip4" ]] && debugme echo ".local IP address requested but mDNS resolution (IPv4) failed"
22101
22106
fi
22107
+ if [[ -z "$ip4" ]] && "$HAS_DSCACHEUTIL"; then
22108
+ ip4=$(filter_ip4_address $(dscacheutil -q host -a name "$1" | awk '/^ip_address:/ { print $2 }'))
22109
+ fi
22102
22110
if [[ -z "$ip4" ]] && "$HAS_DIG"; then
22103
22111
ip4=$(filter_ip4_address $(dig +search $DIG_R +short +timeout=2 +tries=2 $noidnout -t a "$1" 2>/dev/null | awk '/^[0-9]/ { print $1 }'))
22104
22112
fi
@@ -22135,20 +22143,24 @@ get_aaaa_record() {
22135
22143
fi
22136
22144
if [[ -z "$ip6" ]]; then
22137
22145
if [[ "$NODE" == *.local ]]; then
22138
- if "$HAS_AVAHIRESOLVE"; then
22146
+ if "$HAS_DSCACHEUTIL"; then
22147
+ ip6=$(filter_ip6_address $(dscacheutil -q host -a name "$1" | awk '/^ipv6_address:/ { print $2 }'))
22148
+ elif "$HAS_AVAHIRESOLVE"; then
22139
22149
ip6=$(filter_ip6_address $(avahi-resolve -6 -n "$1" 2>/dev/null | awk '{ print $2 }'))
22140
22150
elif "$HAS_DIG"; then
22141
22151
ip6=$(filter_ip6_address $(dig $DIG_R @ff02::fb -p 5353 -t aaaa +short +notcp "$NODE" 2>/dev/null))
22142
22152
elif "$HAS_DRILL"; then
22143
22153
ip6=$(filter_ip6_address $(drill @ff02::fb -p 5353 "$1" 2>/dev/null | awk '/ANSWER SECTION/,/AUTHORITY SECTION/ { print $NF }' | awk '/^[a-f0-9]/'))
22144
22154
else
22145
- fatal "Local hostname given but neither 'avahi-resolve', 'dig' nor 'drill' is available." $ERR_DNSBIN
22155
+ fatal "Local hostname given but neither 'dscacheutil', ' avahi-resolve', 'dig' nor 'drill' is available." $ERR_DNSBIN
22146
22156
fi
22147
22157
[[ -z "$ip6" ]] && debugme echo ".local IP address requested but mDNS resolution (IPv6) failed"
22148
22158
fi
22149
22159
fi
22150
22160
if [[ -z "$ip6" ]]; then
22151
- if "$HAS_DIG"; then
22161
+ if "$HAS_DSCACHEUTIL"; then
22162
+ ip6=$(filter_ip6_address $(dscacheutil -q host -a name "$1" | awk '/^ipv6_address:/ { print $2 }'))
22163
+ elif "$HAS_DIG"; then
22152
22164
ip6=$(filter_ip6_address $(dig +search $DIG_R +short +timeout=2 +tries=2 $noidnout -t aaaa "$1" 2>/dev/null | awk '/^[a-f0-9]/ { print $1 }'))
22153
22165
elif "$HAS_HOST"; then
22154
22166
ip6=$(filter_ip6_address $(host -t aaaa "$1" | awk '/address/ { print $NF }'))
@@ -22382,11 +22394,15 @@ determine_rdns() {
22382
22394
local nodeip="$(tr -d '[]' <<< $NODEIP)" # for DNS we do not need the square brackets of IPv6 addresses
22383
22395
OPENSSL_CONF="" # see https://github.com/testssl/testssl.sh/issues/134
22384
22396
if [[ "$NODE" == *.local ]]; then
22385
- if "$HAS_AVAHIRESOLVE"; then
22397
+ if "$HAS_DSCACHEUTIL"; then
22398
+ rDNS=$(dscacheutil -q host -a ip_address $nodeip | awk '/^name:/ { print $2 }')
22399
+ elif "$HAS_AVAHIRESOLVE"; then
22386
22400
rDNS=$(avahi-resolve -a $nodeip 2>/dev/null | awk '{ print $2 }')
22387
22401
elif "$HAS_DIG"; then
22388
22402
rDNS=$(dig $DIG_R -x $nodeip @224.0.0.251 -p 5353 +notcp +noall +answer +short | awk '{ print $1 }')
22389
22403
fi
22404
+ elif "$HAS_DSCACHEUTIL"; then
22405
+ rDNS=$(dscacheutil -q host -a ip_address $nodeip | awk '/^name:/ { print $2 }')
22390
22406
elif "$HAS_DIG"; then
22391
22407
# 1+2 should suffice. It's a compromise for if e.g. network is down but we have a docker/localhost server
22392
22408
rDNS=$(dig $DIG_R -x $nodeip +timeout=1 +tries=2 +noall +answer +short | awk '{ print $1 }') # +short returns also CNAME, e.g. openssl.org
0 commit comments