[PATCH] fill_user_info: fake user info for 'root' if it can not be found
Simon McVittie
simon.mcvittie at collabora.co.uk
Mon Feb 25 10:03:06 PST 2013
On 25/02/13 15:14, Tom Gundersen wrote:
> This should make make libdbus a bit more robust against bugs or configuration
> errors. In particular, it should make it work on an empty /etc or in case nss is
> broken, misconfigured or simply missing.
This doesn't seem like something that ought to be wired into every
sufficiently-low-level library and utility: if it needs to be
configurable, then it needs to be configurable, and if it doesn't,
shouldn't libc do this for you?
Alternatively, have you considered using a NSS module that "knows who
root is", analogous to nss-myhostname?
If none of the alternatives are viable, please open a bug on
bugs.freedesktop.org so this doesn't get lost.
Some quick comments on the implementation:
In this situation, don't you fail anyway, further down the function,
when you getgrouplist() and it doesn't work?
> + //Make sure 'root' always exists, even if nss is not configured correctly
D-Bus is C89: no C++-style comments, please.
> + if ((result != 0 || p != &p_str) && (uid == 0 || strcmp(username_c, "root") == 0))
> + {
> + _dbus_warn ("Failed to find 'root' user, use fallback entry.");
If this is considered to be normal, it shouldn't warn.
> + p_str.pw_name = "root";
> + p_str.pw_passwd = "x";
I'd prefer to populate @info directly, rather than populating a struct
passwd and then copying it into @info.
You could probably benefit from a fill_user_info_for_root() helper
shared between the HAVE_GETPWNAM_R and !HAVE_GETPWNAM_R code paths.
More information about the dbus
mailing list