- First commit of the new version!
This commit is contained in:
258
usr/local/lib/dns.bash
Normal file
258
usr/local/lib/dns.bash
Normal file
@@ -0,0 +1,258 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [[ "${DNS_BASH}" != "" ]]
|
||||
then
|
||||
return
|
||||
else
|
||||
declare -g DNS_BASH=1
|
||||
fi
|
||||
|
||||
|
||||
|
||||
# Includes
|
||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
. /usr/global/lib/default.bash
|
||||
|
||||
|
||||
|
||||
#[ -e /var/cache/dns.cache ] && . /var/cache/dns.cache
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Global Variable
|
||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
declare -Ag DNS_A_TAB
|
||||
declare -g DNS_A_ID_LIST
|
||||
|
||||
declare -Ag DNS_PTR_TAB
|
||||
declare -g DNS_PTR_ID_LIST
|
||||
|
||||
declare -g DNS_CACHE_FILE="/var/cache/dns.cache"
|
||||
declare -g DNS_CACHE_LOCK="/var/lock/network/dns.lock"
|
||||
#declare -g DNS_CACHE_LOCK="${DNS_CACHE_FILE}"
|
||||
|
||||
declare -g DNS_CACHE_UPDATED=0
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
# dns_tab_load
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
dns_tab_load()
|
||||
{
|
||||
file_lock "${DNS_CACHE_LOCK}" READ 9
|
||||
|
||||
if [[ ( -e "${DNS_CACHE_FILE}" ) && ( "${NETWORK_CONFIG_FILE}" -ot "${DNS_CACHE_FILE}" ) ]]
|
||||
then
|
||||
${LOG} 1>&2 "DNS: Read CacheFile"
|
||||
|
||||
while IFS= read -r line
|
||||
do
|
||||
line=${line%%#*}
|
||||
if [[ ! -z "$line" ]]
|
||||
then
|
||||
set ${line}
|
||||
|
||||
dtl_type="$1"
|
||||
dtl_key="$2"
|
||||
dtl_value="$3"
|
||||
|
||||
dns_tab_put ${dtl_type} "${dtl_key}" "${dtl_value}"
|
||||
fi
|
||||
done < ${DNS_CACHE_FILE}
|
||||
else
|
||||
${LOG} 1>&2 "DNS: Init CacheFile"
|
||||
|
||||
>${DNS_CACHE_FILE}
|
||||
fi
|
||||
|
||||
file_unlock 9
|
||||
|
||||
DNS_CACHE_UPDATED=0
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
# dns_tab_save
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
dns_tab_save()
|
||||
{
|
||||
if [[ "${DNS_CACHE_UPDATED}" != "0" ]]
|
||||
then
|
||||
file_lock "${DNS_CACHE_LOCK}" WRITE 9
|
||||
|
||||
${LOG} 1>&2 "DNS: Write CacheFile"
|
||||
|
||||
(
|
||||
for key in "${!DNS_A_TAB[@]}"
|
||||
do
|
||||
echo "A ${key} ${DNS_A_TAB[${key}]}"
|
||||
done
|
||||
|
||||
for key in "${!DNS_PTR_TAB[@]}"
|
||||
do
|
||||
echo "PTR ${key} ${DNS_PTR_TAB[${key}]}"
|
||||
done
|
||||
) | sort -n >${DNS_CACHE_FILE}
|
||||
|
||||
file_unlock 9
|
||||
|
||||
DNS_CACHE_UPDATED=0
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
# dns_tab_get
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
dns_tab_get()
|
||||
{
|
||||
dns_type="$1"
|
||||
dns_key="$2"
|
||||
|
||||
|
||||
case ${dns_type}
|
||||
in
|
||||
"A")
|
||||
if [[ -v DNS_A_TAB["${dns_key}"] ]]
|
||||
then
|
||||
dns_value="${DNS_A_TAB["${dns_key}"]}"
|
||||
else
|
||||
${LOG} "DNS: Lookup failed: Type: [${dns_type}] Key: [${dns_key}]"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
|
||||
"PTR")
|
||||
if [[ -v DNS_PTR_TAB["${dns_key}"] ]]
|
||||
then
|
||||
dns_value="${DNS_PTR_TAB["${dns_key}"]}"
|
||||
else
|
||||
${LOG} "DNS: Lookup failed: Type: [${dns_type}] Key: [${dns_key}]"
|
||||
return 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
${LOG} "DNS: Lookup succeed: Type: [${dns_type}] Key: [${dns_key}] Value: [${dns_value}]"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
# dns_tab_put
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
dns_tab_put()
|
||||
{
|
||||
dtp_type="$1"
|
||||
dtp_key="$2"
|
||||
dtp_value="$3"
|
||||
|
||||
|
||||
${LOG} 1>&2 "DNS: Update cache entry: Type: [${dtp_type}] Key: [${dtp_key}] Value: [${dtp_value}]"
|
||||
|
||||
var_assign DNS_${dtp_type}_ID_LIST "${dtp_key}" INC
|
||||
tab_assign DNS_${dtp_type}_TAB "${dtp_key}" "${dtp_value}"
|
||||
|
||||
DNS_CACHE_UPDATED=1
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
# dns_lookup
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
dns_lookup()
|
||||
{
|
||||
dl_type="$1"
|
||||
dl_key="$2"
|
||||
dl_flag="$3"
|
||||
|
||||
|
||||
if [[ "${dl_flag}" != "NOCACHE" ]]
|
||||
then
|
||||
dns_tab_get ${dl_type} ${dl_key}
|
||||
else
|
||||
false
|
||||
fi
|
||||
|
||||
if [[ "$?" != "0" ]]
|
||||
then
|
||||
${LOG} "DNS: Out of Cache: Type: [${dl_type}] Key: [${dl_key}] Flag: [${dl_flag}]"
|
||||
|
||||
case ${dl_type}
|
||||
in
|
||||
"A")
|
||||
dns_value="$( dig +short ${dl_key} 2>/dev/null)"
|
||||
;;
|
||||
|
||||
"PTR")
|
||||
dns_value="$( dig +short -x ${dl_key} 2>/dev/null)"
|
||||
dns_value="${dns_value%.}"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ "${dl_flag}" != "NOCACHE" ]]
|
||||
then
|
||||
dns_tab_put "${dl_type}" "${dl_key}" "${dns_value}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
# dns_tab_dump
|
||||
#--------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
dns_tab_dump()
|
||||
{
|
||||
echo "DNS_A_ID_LIST: [${DNS_A_ID_LIST}]"
|
||||
echo
|
||||
|
||||
echo "DNS_A_TAB:"
|
||||
|
||||
for key in "${!DNS_A_TAB[@]}"
|
||||
do
|
||||
echo "[${key}]: [${DNS_A_TAB[${key}]}]"
|
||||
done | sort -n
|
||||
|
||||
echo
|
||||
|
||||
echo "DNS_PTR_ID_LIST: [${DNS_PTR_ID_LIST}]"
|
||||
echo
|
||||
|
||||
echo "DNS_PTR_TAB:"
|
||||
|
||||
for key in "${!DNS_PTR_TAB[@]}"
|
||||
do
|
||||
echo "[${key}]: [${DNS_PTR_TAB[${key}]}]"
|
||||
done | sort -n
|
||||
|
||||
echo
|
||||
}
|
||||
Reference in New Issue
Block a user