Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 21 Aug 2019 18:22:46 -0700
From:      Tom Samplonius <tom@samplonius.org>
To:        Alan Somers <asomers@freebsd.org>
Cc:        FreeBSD <freebsd-stable@freebsd.org>
Subject:   Re: chsh corrupts /etc/pwd.db
Message-ID:  <208B5647-9D41-4F0E-9111-32CBFF8491D1@samplonius.org>
In-Reply-To: <CAOtMX2gTTerT5q3Ooku%2BwMOg_tZysFCBeHeBPkH_49aJFBu47A@mail.gmail.com>
References:  <CAOtMX2gTTerT5q3Ooku%2BwMOg_tZysFCBeHeBPkH_49aJFBu47A@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help


> On Aug 21, 2019, at 2:55 PM, Alan Somers <asomers@freebsd.org> wrote:
>=20
> Today I tried to use chsh to change my shell from bash to fish.  The
> command completed successfully, but new logins continued to use bash!
> Investigating, I discovered that /etc/pwd.db and /etc/spwd.db seem to
> contain 3-4 entries per user.  One of those still refers to my old

  Berkeley DB files can only have a single index, so users are stored =
three times, once by username, once by uid, and once by line number.  So =
that isn=E2=80=99t corruption.


> shell.  Worse, if I try using chsh again, it fails with an "entry
> inconsistent" error, and I have to restore the password files from
> backup.  Has anybody seen something like this before?  This is just a
> single system, with no NIS or LDAP.

  You shouldn=E2=80=99t need to restore the files.  You should be able =
to just regenerate the *.db files from the master.passwd file:

/usr/sbin/pwd_mkdb -p /etc/master.passwd


Unless, of course your master.passwd file was damaged.  But the *.db =
files are really just caches for faster access to user data.  The real =
master file is master.passwd.


The ch* tools typically just change master.passwd, and then call =
pwd_mkdb to rebuild the *.db files. =20



Tom=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?208B5647-9D41-4F0E-9111-32CBFF8491D1>