systemd/debian/libnss-resolve.postinst
Martin Pitt 5e00954163 libnss-resolve.postinst: Skip dns fallback if resolve is present
Only fall back to "dns" if nss-resolve is not installed (for the architecture
of the calling program). Once it is, we never want to fall back to "dns" as
that breaks enforcing DNSSEC verification and also pointlessly retries NXDOMAIN
failures.

LP: #1624071
2016-10-02 08:35:38 +02:00

56 lines
1.8 KiB
Bash

#!/bin/sh
set -e
# This code was taken from libnss-myhostname
# try to insert resolve entries to the "hosts" line in /etc/nsswitch.conf to
# automatically enable libnss-resolve support; do not change the
# configuration if the "hosts" line already references some resolve lookups
insert_nss_entry() {
echo "Checking NSS setup..."
# abort if /etc/nsswitch.conf does not exist
if ! [ -e /etc/nsswitch.conf ]; then
echo "Could not find /etc/nsswitch.conf."
return
fi
perl -i -pe '
sub insert {
my $line = shift;
# this also splits on tab
my @bits=split(" ", $line);
# do not break configuration if the "hosts" line already references
# resolve
if (grep { $_ eq "resolve"} @bits) {
return $line;
}
# add resolve before dns
return join " ", map {
$_ eq "dns" ? ("resolve [!UNAVAIL=return]", "$_") : $_
} @bits;
}
s/^(hosts:\s+)(.*)/$1.insert($2)/e;
' /etc/nsswitch.conf
}
if [ "$1" = configure ] && [ -z "$2" ]; then
echo "First installation detected..."
# first install: setup the recommended configuration (unless
# nsswitch.conf already contains resolve entries)
insert_nss_entry
# ... and enable resolved
systemctl enable systemd-resolved.service
if [ -d /run/systemd/system ]; then
deb-systemd-invoke start systemd-resolved.service || true
fi
fi
# Fix nsswitch action on upgrades
if [ "$1" = configure ] && dpkg --compare-versions "$2" lt-nl "231-10"; then
if ! grep -q '^hosts:.*resolve[[:space:]]*\[' /etc/nsswitch.conf; then
echo "Adjusting 'resolv' entry in /etc/nsswitch.conf.."
sed -i '/^hosts:/ { s/resolve/& [!UNAVAIL=return]/}' /etc/nsswitch.conf
fi
fi
#DEBHELPER#