Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Dec 2020 03:42:54 +0000 (UTC)
From:      Kyle Evans <kevans@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r368713 - head/usr.sbin/freebsd-update
Message-ID:  <202012170342.0BH3gs5B070847@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kevans
Date: Thu Dec 17 03:42:54 2020
New Revision: 368713
URL: https://svnweb.freebsd.org/changeset/base/368713

Log:
  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

Modified:
  head/usr.sbin/freebsd-update/freebsd-update.sh

Modified: head/usr.sbin/freebsd-update/freebsd-update.sh
==============================================================================
--- head/usr.sbin/freebsd-update/freebsd-update.sh	Thu Dec 17 02:54:32 2020	(r368712)
+++ head/usr.sbin/freebsd-update/freebsd-update.sh	Thu Dec 17 03:42:54 2020	(r368713)
@@ -2949,17 +2949,9 @@ Kernel updates have been installed.  Please reboot and
 			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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202012170342.0BH3gs5B070847>