| Summary: | Changing uid with pw causes duplicate username/uid pairs. | ||
|---|---|---|---|
| Product: | Base System | Reporter: | Kevin Stevens <kevin_stevens> |
| Component: | bin | Assignee: | freebsd-bugs (Nobody) <bugs> |
| Status: | Closed FIXED | ||
| Severity: | Affects Only Me | CC: | kevin_stevens |
| Priority: | Normal | ||
| Version: | 4.7-RELEASE | ||
| Hardware: | Any | ||
| OS: | Any | ||
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> 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 State Changed From-To: open->closed On -CURRENT, this is not an issue anymore. |
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/