64 lines
2.0 KiB
Bash
Executable File
64 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
|
|
log() {
|
|
echo "$*"
|
|
}
|
|
|
|
# try to insert mdns entries to the "hosts" line in /etc/nsswitch.conf to
|
|
# automatically enable nss-mdns support; do not change the configuration if the
|
|
# "hosts" line already references some mdns lookups
|
|
insert_mdns() {
|
|
log "Checking NSS setup..."
|
|
# abort if /etc/nsswitch.conf does not exist
|
|
if ! [ -e /etc/nsswitch.conf ]; then
|
|
log "Could not find /etc/nsswitch.conf."
|
|
return
|
|
fi
|
|
perl -i -pe '
|
|
sub insert {
|
|
# this also splits on tab
|
|
my @bits=split(" ", shift);
|
|
# do not break configuration if the "hosts" line already references
|
|
# mdns
|
|
if (grep { $_ eq "mdns4_minimal" || $_ eq "mdns4"
|
|
|| $_ eq "mdns" || $_ eq "mdns_minimal"
|
|
|| $_ eq "mdns6" || $_ eq "mdns6_minimal"} @bits) {
|
|
return join " ", @bits;
|
|
}
|
|
# change "dns" or "resolve", whichever comes first, into
|
|
# "mdns4_minimal [NOTFOUND=return] dns|resolve"
|
|
foreach my $bit (@bits) {
|
|
if ($bit eq "dns" || $bit eq "resolve") {
|
|
$bit = "mdns4_minimal [NOTFOUND=return] $bit";
|
|
last;
|
|
}
|
|
}
|
|
return join " ", @bits;
|
|
}
|
|
s/^(hosts:\s+)(.*)/$1.insert($2)/e;
|
|
' /etc/nsswitch.conf
|
|
}
|
|
|
|
action="$1"
|
|
|
|
if [ configure = "$action" ]; then
|
|
if [ -z "$2" ]; then
|
|
log "First installation detected..."
|
|
# first install: setup the recommended configuration (unless
|
|
# nsswitch.conf already contains mdns entries)
|
|
insert_mdns
|
|
else
|
|
# upgrade
|
|
version="$2"
|
|
|
|
if dpkg --compare-versions "$version" lt 0.10-8~; then
|
|
log "Re-ordering libnss-mdns before libnss-resolve if necessary (#846944)."
|
|
perl -i -pe \
|
|
's/(resolve \[!?[A-Za-z=]+\]) (mdns4_minimal \[!?[A-Za-z=]+\])/$2 $1/ if /^hosts:/' \
|
|
/etc/nsswitch.conf
|
|
fi
|
|
fi
|
|
fi
|