Bug 50331

Summary: Changing uid with pw causes duplicate username/uid pairs.
Product: Base System Reporter: Kevin Stevens <kevin_stevens>
Component: binAssignee: freebsd-bugs (Nobody) <bugs>
Status: Closed FIXED    
Severity: Affects Only Me CC: kevin_stevens
Priority: Normal    
Version: 4.7-RELEASE   
Hardware: Any   
OS: Any   

Description Kevin Stevens 2003-03-27 03:50:12 UTC
	After changing a user's uid with the pw command, files owned by the original uid still
	show the previous username.  Running id -P on both the new and old uids reports the 
	same username, when the old uid should no longer even exist.  Running pwd_mkdb
	/etc/master.passwd manually resolves the errors.

	A suggestion from the freebsd-questions list when I posted this problem was:

	pw may be too smart for its own good.  I bet it calls "pwd_mkdb -u" to only 
	update a single user from /etc/passwd.  The problem is when the uid changes, 
	pwd_mkdb will insert a new record into /etc/pwd.sb and spwd.db, but it doesn't 
	know about the previous uid, so that stays in the db.

Fix: 

As mentioned, manually running pwd_mkdb seems to resolve the problem.
How-To-Repeat:     % sudo pw user add -n fred -u 1010 -m 
    % id -P fred
    fred:*:1010:1010::0:0:User &:/home/fred:/bin/sh
    % ls -lad /home/fred 
    drwxr-xr-x  2 fred  fred  512 Mar 26 08:01 /home/fred/
    % sudo pw user mod fred -u 1005
    % id -P fred 
    fred:*:1005:1010::0:0:User &:/home/fred:/bin/sh
    % ls -lad /home/fred 
    drwxr-xr-x  2 fred  fred  512 Mar 26 08:01 /home/fred/
    % id -P 1005
    fred:*:1005:1010::0:0:User &:/home/fred:/bin/sh
    % id -P 1010
    fred:*:1010:1010::0:0:User &:/home/fred:/bin/sh
    % sudo grep 1010 /etc/master.passwd 
    fred:*:1005:1010::0:0:User &:/home/fred:/bin/sh

However, running pwd_mkdb(8) seems to cure the problem very effectively:

    % sudo pwd_mkdb /etc/master.passwd 
    % id -P fred 
    fred:*:1005:1010::0:0:User &:/home/fred:/bin/sh
    % id -P 1005 
    fred:*:1005:1010::0:0:User &:/home/fred:/bin/sh
    % id -P 1010
    id: 1010: no such user
    % ls -lad /home/fred
    drwxr-xr-x  2 1010  fred  512 Mar 26 08:01 /home/fred/
Comment 1 A. Blake Cooper 2003-03-27 18:09:11 UTC
As you mention it's a side-effect of how 'pwd_mkdb -u' functions.  If you
want pw to completely rebuild the passwd db's on every run, then update
the pw source file pwupd.c and change the '#define HAVE_PWDB_U 1' to
'#define HAVE_PWDB_U 0'.

Blake

--                                                                         -
A. Blake Cooper <blake@cluebie.net>
Comment 2 jyoung 2003-09-03 08:09:13 UTC
This is not replicable on HEAD, probably since 4/28/03 with rev 1.42 of
pwd_mkdb, which reworked the logic dealing with uid changes. The issue
most likely still exists in 4.x.

fury# pw user add -n fred -u 1010 -m
fury# id -P fred
fred:*:1010:1010::0:0:User &:/home/fred:/bin/sh
fury# ls -lad /home/fred
drwxr-xr-x  2 fred  fred  512 Sep  3 02:05 /home/fred
fury# pw user mod fred -u 1005
fury# id -P fred
fred:*:1005:1010::0:0:User &:/home/fred:/bin/sh
fury# ls -lad /home/fred
drwxr-xr-x  2 1010  fred  512 Sep  3 02:05 /home/fred
fury# id -P 1005
fred:*:1005:1010::0:0:User &:/home/fred:/bin/sh
fury# id -P 1010
id: 1010: no such user
fury# grep 1010 /etc/master.passwd 
fred:*:1005:1010::0:0:User &:/home/fred:/bin/sh


-- 
Jason Young, CCIE #8607, MCSE
Sr. Network Technician, WAN Technologies
(314)817-0131
http://www.wantec.com
Comment 3 le freebsd_committer freebsd_triage 2007-03-29 23:33:20 UTC
State Changed
From-To: open->closed

On -CURRENT, this is not an issue anymore.