summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2019-07-09 15:10:36 +0100
committerRoy Marples <roy@marples.name>2019-07-09 15:10:36 +0100
commite39a20cdc3c55993120714dd50cd201b70dbc4b3 (patch)
tree84654340fc58ea20c0b8aa110b7793bd004e582a
parent729461bb1d6056b52ab09063c5c26f058f975c0d (diff)
downloadopenresolv-e39a20cdc3c55993120714dd50cd201b70dbc4b3.tar.xz
resolvconf: Strip inline comments before processing
-rw-r--r--resolvconf.in20
1 files changed, 14 insertions, 6 deletions
diff --git a/resolvconf.in b/resolvconf.in
index 3ee75a9..8f406be 100644
--- a/resolvconf.in
+++ b/resolvconf.in
@@ -125,10 +125,14 @@ usage()
# If you think otherwise, capture a DNS trace and you'll see libc
# will strip it regardless.
# This also solves setting up duplicate zones in our subscribers.
-strip_trailing_dots()
+# Also strip any comments denoted by #.
+resolv_strip()
{
d=
for n; do
+ case "$n" in
+ \#*) break;;
+ esac
printf "$d%s" "${n%.}"
d=" "
done
@@ -173,6 +177,7 @@ parse_resolv()
search=
while read -r line; do
+ stripped_line="$(resolv_strip ${line#* })"
case "$line" in
"# resolv.conf from "*)
if ${new}; then
@@ -188,25 +193,28 @@ parse_resolv()
"nameserver "*)
islocal=false
for l in $local_nameservers; do
- case "${line#* }" in
+ case "$stripped_line" in
$l)
islocal=true
- echo "LOCALNAMESERVERS=\"\$LOCALNAMESERVERS ${line#* }\""
break
;;
esac
done
- $islocal || ns="$ns${line#* } "
+ if $islocal; then
+ echo "LOCALNAMESERVERS=\"\$LOCALNAMESERVERS ${stripped_line}\""
+ else
+ ns="$ns$stripped_line "
+ fi
;;
"domain "*)
- search="$(strip_trailing_dots ${line#* })"
+ search="$stripped_line"
if [ -z "$domain" ]; then
domain="$search"
echo "DOMAIN=\"$domain\""
fi
;;
"search "*)
- search="$(strip_trailing_dots ${line#* })"
+ search="$stripped_line"
;;
*)
[ -n "$line" ] && continue