Red Hat Bugzilla – Bug 813394
lusermod/luseradd can corrupt the format of /etc/passwd
Last modified: 2012-04-18 04:14:51 EDT
Thanks for your report.
The last field on the line is special: adding colons to it does not add any field splitting ambiguity. libuser therefore explicitly allows ':' in the last field.
glibc's parsers do not recognize the ':' as a separator in that case (in particular, you can have a ':' in user's shell). On the other hand, shadow-utils's parsers do recognize the ':' as terminating even the last field on the line, so the situation is ambiguous.
Therefore, libuser will always differ from one of glibc and shadow-utils.
Given that the field splitting does not have any security impact, and the file format is not really strictly defined, I think leaving the existing code is fine. We can't promise that it will work, but we don't have a really good reason to prohibit it, either.
In this specific case:
As mentioned above, glibc will parse those lines as an user with shell "a:b" and "c:d", respectively.
Please reopen this if I have overlooked a reason to prohibit the ':' in the last field.