64 lines
1.5 KiB
Bash
Executable File
64 lines
1.5 KiB
Bash
Executable File
#! /bin/sh
|
|
|
|
RESOLVER_DIR='/etc/resolver'
|
|
|
|
. ./common.inc
|
|
|
|
[ -r "$EXCEPTIONS_FILE" ] &&
|
|
DOMAINS_EXCEPTIONS="$(cat "$EXCEPTIONS_FILE") $DOMAINS_EXCEPTIONS"
|
|
|
|
get_gw() {
|
|
route -n get default | while read line; do
|
|
case "$line" in
|
|
gateway:\ *)
|
|
echo "$line" | sed 's/ *gateway: *//'
|
|
return
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
get_dhcp_dns() {
|
|
cat "${STATES_DIR}/dhcp-dns" 2> /dev/null
|
|
}
|
|
|
|
remove_old_exceptions() {
|
|
local found
|
|
|
|
find -x "$RESOLVER_DIR" -type f -print | {
|
|
while read file; do
|
|
found='no'
|
|
for domain in $DOMAINS_EXCEPTIONS; do
|
|
[ "$file" = "${RESOLVER_DIR}/${domain}" ] && found='yes' && break
|
|
done
|
|
[ "$found" = 'no' ] || continue
|
|
fgrep -ci 'automatically generated by the dnscrypt user interface' \
|
|
$file > /dev/null 2>&1 || continue
|
|
rm -f "$file"
|
|
done
|
|
}
|
|
}
|
|
|
|
name_servers=$(./get-static-resolvers.sh || get_dhcp_dns || get_gw)
|
|
[ x"$name_servers" = 'x' ] && exit 0
|
|
|
|
default_domain=$(./get-current-default-domain.sh)
|
|
|
|
mkdir -p "$RESOLVER_DIR" || exit 1
|
|
|
|
remove_old_exceptions
|
|
|
|
name_server="$gw"
|
|
for domain in $DOMAINS_EXCEPTIONS; do
|
|
if [ x"$default_domain" != 'x' ]; then
|
|
echo "$domain" | grep -c ".*${default_domain}" > /dev/null
|
|
[ $? = 0 ] && continue
|
|
fi
|
|
echo '# automatically generated by the dnscrypt user interface' \
|
|
> "${RESOLVER_DIR}/${domain}"
|
|
for name_server in $name_servers; do
|
|
echo "nameserver ${name_server}" >> "${RESOLVER_DIR}/${domain}"
|
|
done
|
|
done
|
|
exit 0
|