Module Name:    src
Committed By:   uwe
Date:           Thu Oct 10 22:14:35 UTC 2024

Modified Files:
        src/usr.sbin/postinstall: postinstall.in

Log Message:
postinstall: simplify exclude_libs

Don't compose a baroque ERE to filter the list of libraries.  grep can
match whole lines with -x so that takes care of the anchoring.  And
grep can also take multiple patterns, one per line, as a single
argument - which the man page of our rather out of date version
doesn't adequately document.

While here describe the downgrade scenario that it is intended to
handle.


To generate a diff of this commit:
cvs rdiff -u -r1.65 -r1.66 src/usr.sbin/postinstall/postinstall.in

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/postinstall/postinstall.in
diff -u src/usr.sbin/postinstall/postinstall.in:1.65 src/usr.sbin/postinstall/postinstall.in:1.66
--- src/usr.sbin/postinstall/postinstall.in:1.65	Thu Oct 10 21:42:24 2024
+++ src/usr.sbin/postinstall/postinstall.in	Thu Oct 10 22:14:34 2024
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $NetBSD: postinstall.in,v 1.65 2024/10/10 21:42:24 uwe Exp $
+# $NetBSD: postinstall.in,v 1.66 2024/10/10 22:14:34 uwe Exp $
 #
 # Copyright (c) 2002-2022 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -591,14 +591,24 @@ exclude()
 }
 
 #
-# find all the target symlinks of shared libraries and exclude them
-# from consideration for removal
+# Find all the symlink targets of shared libraries and exclude them
+# from consideration for removal.
+#
+# This protects "new old" libs after downgrading a system.  Say, you
+# had a more recent system that comes with libfoo.so.1.2 and then
+# downgraded to an older version that had libfoo.so.1.1.  You still
+# have 1.2 that "wins" the competition for the "libfoo.so.1" stem and
+# thus 1.1 is considered obsolete by the awk script in _obsolete_libs
+# below.  But your libfoo.so.1 now points to 1.1 so deleting 1.1 will
+# render your system broken.  exclude_libs is fed the output of
+# potentially obsolete libs and absolves those (libfoo.so.1.1) that
+# are a target of a symlink (libfoo.so.1 -> libfoo.so.1.1)
 #
 exclude_libs()
 {
-	local target="$(find lib*.so.* -prune -type l -exec readlink '{}' + 2> /dev/null \
+	local targets="$(find lib*.so.* -prune -type l -exec readlink '{}' + 2> /dev/null \
 	    | ${SED} -e 's@.*/@@' | ${SORT} -u)"
-	exclude -t ${target}
+	${GREP} -F -v -x "$targets"
 }
 
 _obsolete_libs()
@@ -681,7 +691,7 @@ function checklib(latest, libname, stem_
 	}
 }
 
-	# the ouput if further filtered by exclude_libs that protects
+	# the ouput is further filtered by exclude_libs that protects
 	# libraries that have symlinks pointing to them, which one
 	# encounters when downgrading
 #}'	\

Reply via email to