Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 Mar 2002 15:00:07 -0800 (PST)
From:      "Crist J. Clark" <crist.clark@attbi.com>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: i386/35816: no one can change password, because "passwd DB is locked"
Message-ID:  <200203132300.g2DN07R53127@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR i386/35816; it has been noted by GNATS.

From: "Crist J. Clark" <crist.clark@attbi.com>
To: Giorgos Keramidas <keramida@freebsd.org>
Cc: Dima Dorfman <dima@trit.org>, bug-followup@freebsd.org
Subject: Re: i386/35816: no one can change password, because "passwd DB is locked"
Date: Wed, 13 Mar 2002 14:57:55 -0800

 On Wed, Mar 13, 2002 at 08:54:42PM +0200, Giorgos Keramidas wrote:
 > On 2002-03-13 11:23, Dima Dorfman wrote:
 > > What happens if the data for that user changes between the time the
 > > editor is started (with the old info filled in) and the time the user
 > > is done editing?  Assuming all the changes are valid, it would still
 > > be technically okay to apply the new changes, but it might come as a
 > > surprise to one or both of the parties involved.
 > > 
 > > The above is intended as food for thought, not a flat-out rejection of
 > > your idea; it isn't clear whether this should be allowed to happen, or
 > > what we should do if it does.
 > 
 > Nice food for thought too.  Imagine of the following scenario, on a machine
 > where two humans have root access:
 > 
 > 	- User A runs 'chpass foo'.
 > 	- Before user A finishes, user B runs 'chpass foo' too.
 > 	- User A deletes account of user C.
 > 	- User B adds account of user D.
 > 	- User A commits changes.
 > 	- User B commits changes.
 > 
 > Is the account of C still erased?
 
 Well, chpass(1) isn't really the right tool for deleting a user, but I
 think the answer to the spirit of your question would be, "Yes."
 
 Again, what I see happening is,
 
   1) chpass(1) reads master.passwd to get info on user "C."
 
   2) User A does whatever operations he pleases on user "C."
 
   3) chpass(1) locks, and _re-reads_ master.passwd. It enters user
      "C"'s new info into master.passwd, does the ususal sanity checks,
      and then writes the new master.passwd, and releases the lock.
 
 That is, only information about user "C" is incorporated back into
 master.passwd in step (3). If another user is fiddling with user "D"
 during all of this, step three, the only step that actually changes
 the system files, doesn't touch user "D."
 
 So, for your question, "A" commits his changes, first, so "C" is
 gone. When "B" commits his changes, when master.passwd is re-read, "C"
 isn't there, but who cares, we're changing info on "D," so everything
 works fine.
 
 I think the issue here is the mindset that chpass(1) must take a
 complete copy of master.passwd, have the user perform some action on
 it, and then save the complete copy back. I don't see why it would
 work this way. Read info on our user being modified from
 master.passwd, have the user perform changes just on the data for this
 one user, _now_ lock and read master.passwd, incorporate the changes
 on that one user, and release the lock.
 -- 
 Crist J. Clark                     |     cjclark@alum.mit.edu
                                    |     cjclark@jhu.edu
 http://people.freebsd.org/~cjc/    |     cjc@freebsd.org

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




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