summaryrefslogtreecommitdiff
path: root/usr.sbin
diff options
context:
space:
mode:
authorKyle Evans <kevans@FreeBSD.org>2020-12-17 03:42:54 +0000
committerKyle Evans <kevans@FreeBSD.org>2020-12-17 03:42:54 +0000
commitebebc41e4cfe44b8e8fd881badf2fa2c4be65aa4 (patch)
tree0101f48a4f9ad703afb78624a482490b0adbdcc1 /usr.sbin
parent228e2087a32847fa51168f3f0c58f931cb2cb0f8 (diff)
downloadsrc-test-ebebc41e4cfe44b8e8fd881badf2fa2c4be65aa4.tar.gz
src-test-ebebc41e4cfe44b8e8fd881badf2fa2c4be65aa4.zip
freebsd-update: unconditionally regenerate passwd/login.conf files
The existing logic is nice in theory, but in practice freebsd-update will not preserve the timestamps on these files. When doing a major upgrade, e.g. from 12.1-RELEASE -> 12.2-RELEASE, pwd.mkdb et al. appear in the INDEX and we clobber the timestamp several times in the process of packaging up the existing system into /var/db/freebsd-update/files and extracting for comparisons. This leads to these files not getting regenerated when they're most likely to be needed. Measures could be taken to preserve timestamps, but it's unclear whether the complexity and overhead of doing so is really outweighed by the marginal benefit. I observed this issue when pkg subsequently failed to install a package that wanted to add a user, claiming that the user was removed in the process. bapt@ pointed to this pre-existing bug with freebsd-update as the cause. PR: 234014, 232921 Reviewed by: bapt, emaste MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D27635
Notes
Notes: svn path=/head/; revision=368713
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/freebsd-update/freebsd-update.sh14
1 files changed, 3 insertions, 11 deletions
diff --git a/usr.sbin/freebsd-update/freebsd-update.sh b/usr.sbin/freebsd-update/freebsd-update.sh
index ea85bb7c6831d..004515bb8bf86 100644
--- a/usr.sbin/freebsd-update/freebsd-update.sh
+++ b/usr.sbin/freebsd-update/freebsd-update.sh
@@ -2949,17 +2949,9 @@ Kernel updates have been installed. Please reboot and run
env DESTDIR=${BASEDIR} certctl rehash
fi
- # Rebuild generated pwd files.
- if [ ${BASEDIR}/etc/master.passwd -nt ${BASEDIR}/etc/spwd.db ] ||
- [ ${BASEDIR}/etc/master.passwd -nt ${BASEDIR}/etc/pwd.db ] ||
- [ ${BASEDIR}/etc/master.passwd -nt ${BASEDIR}/etc/passwd ]; then
- pwd_mkdb -d ${BASEDIR}/etc -p ${BASEDIR}/etc/master.passwd
- fi
-
- # Rebuild /etc/login.conf.db if necessary.
- if [ ${BASEDIR}/etc/login.conf -nt ${BASEDIR}/etc/login.conf.db ]; then
- cap_mkdb ${BASEDIR}/etc/login.conf
- fi
+ # Rebuild generated pwd files and /etc/login.conf.db.
+ pwd_mkdb -d ${BASEDIR}/etc -p ${BASEDIR}/etc/master.passwd
+ cap_mkdb ${BASEDIR}/etc/login.conf
# Rebuild man page databases, if necessary.
for D in /usr/share/man /usr/share/openssl/man; do