#!/bin/sh

# Accélération des Requêtes de Résolution par Anticipation Consignée dans le Hosts
# Correction du Hosts pour Écourter les Futures Sollicitations
# Requête d'Actualisation des Paramètres Hosts

# Cache le résultat d'une requête DNS dans le resolv.conf

domaines()
{
	egrep '^domain|^search' < /etc/resolv.conf | cut -d ' ' -f 2- | tail -1
}

for DIG in dig drill
do
	command -v $DIG > /dev/null 2>&1 && break || true
done

ip()
{
	case "$1" in
		*.*) $DIG "$1" ;;
		*)
			for domaine in $domaines
			do
				$DIG "$1.$domaine"
			done
			;;
	esac \
	| sed -e '/.*	A	\([0-9a-f]\)/!d' -e 's//\1/' | head -1
}

faire()
{
	local h ip expr sed ajouts
	local domaines="`domaines`"
	for h in "$@"
	do
		ip="`ip "$h"`"
		[ -n "$ip" ] || continue
		expr="	$h$"
		sed="$sed -e /$expr/s/.*/$ip	$h/"
		grep -q "$expr" < /etc/hosts || ajouts="$ajouts+0.0.0.0	$h"
	done
	[ -n "$sed" ] || return
	sed="sed$sed"
	IFS=" "
	(
		cat /etc/hosts
		[ -z "$ajouts" ] || echo "$ajouts" | tr + '\012'
	) |	$sed > /tmp/hosts && sudo sh -c 'cat > /etc/hosts' < /tmp/hosts
}

faire "$@"
