libnss-*.prerm: Remove possible [key=value] options from NSS modules as well

Parameterize remove_nss_entry() so that it is exactly the same in all postrms
and thus easier to test and keep in sync. Move from the complicated Perl
subroutine to a simpler sed.

LP: #1625584
This commit is contained in:
Martin Pitt 2016-09-20 13:10:14 +02:00
parent c80c55b22d
commit 1d744b97d4
3 changed files with 33 additions and 45 deletions

View File

@ -1,32 +1,28 @@
#!/bin/sh
set -e
# This code was taken from libnss-myhostname
remove_nss_entry() {
local file=$1
local pkg=$2
local module=$3
refcount=$(dpkg-query -f '${db:Status-Abbrev} ${binary:Package}\n' \
-W libnss-myhostname | grep '^i' | wc -l)
-W $pkg | grep '^i' | wc -l)
if [ "$refcount" -gt 0 ] ; then
# there are other instances, do nothing
# package is installed for other architectures still, do nothing
return
fi
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."
# abort if file does not exist
if ! [ -e $file ]; then
echo "Could not find ${file}."
return
fi
perl -i -pe '
sub remove {
my $s=shift;
$s=~s/\s+\Qmyhostname\E//g;
return $s;
}
s/^(hosts:)(.*)/$1.remove($2)/e;
' /etc/nsswitch.conf
# we must remove possible [foo=bar] options as well
sed -i -r "/hosts:/ s/[[:space:]]+$module\b([[:space:]]*\[[^]]*\])*//" $file
}
if [ "$1" = remove ]; then
remove_nss_entry
remove_nss_entry /etc/nsswitch.conf libnss-myhostname myhostname
fi
#DEBHELPER#

View File

@ -1,32 +1,28 @@
#!/bin/sh
set -e
# This code was taken from libnss-myhostname
remove_nss_entry() {
local file=$1
local pkg=$2
local module=$3
refcount=$(dpkg-query -f '${db:Status-Abbrev} ${binary:Package}\n' \
-W libnss-mymachines | grep '^i' | wc -l)
-W $pkg | grep '^i' | wc -l)
if [ "$refcount" -gt 0 ] ; then
# there are other instances, do nothing
# package is installed for other architectures still, do nothing
return
fi
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."
# abort if file does not exist
if ! [ -e $file ]; then
echo "Could not find ${file}."
return
fi
perl -i -pe '
sub remove {
my $s=shift;
$s=~s/\s+\Qmymachines\E//g;
return $s;
}
s/^(hosts:)(.*)/$1.remove($2)/e;
' /etc/nsswitch.conf
# we must remove possible [foo=bar] options as well
sed -i -r "/hosts:/ s/[[:space:]]+$module\b([[:space:]]*\[[^]]*\])*//" $file
}
if [ "$1" = remove ]; then
remove_nss_entry
remove_nss_entry /etc/nsswitch.conf libnss-mymachines mymachines
fi
#DEBHELPER#

View File

@ -1,32 +1,28 @@
#!/bin/sh
set -e
# This code was taken from libnss-myhostname
remove_nss_entry() {
local file=$1
local pkg=$2
local module=$3
refcount=$(dpkg-query -f '${db:Status-Abbrev} ${binary:Package}\n' \
-W libnss-resolve | grep '^i' | wc -l)
-W $pkg | grep '^i' | wc -l)
if [ "$refcount" -gt 0 ] ; then
# there are other instances, do nothing
# package is installed for other architectures still, do nothing
return
fi
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."
# abort if file does not exist
if ! [ -e $file ]; then
echo "Could not find ${file}."
return
fi
perl -i -pe '
sub remove {
my $s=shift;
$s=~s/\s+resolve\b//g;
return $s;
}
s/^(hosts:)(.*)/$1.remove($2)/e;
' /etc/nsswitch.conf
# we must remove possible [foo=bar] options as well
sed -i -r "/hosts:/ s/[[:space:]]+$module\b([[:space:]]*\[[^]]*\])*//" $file
}
if [ "$1" = remove ]; then
remove_nss_entry
remove_nss_entry /etc/nsswitch.conf libnss-resolve resolve
systemctl disable systemd-resolved.service
if [ -d /run/systemd/system ]; then
deb-systemd-invoke stop systemd-resolved.service || true