BUG #8139: initdb: Misleading error message when current user not in /etc/passwd

From: nicolas(at)marchildon(dot)net
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #8139: initdb: Misleading error message when current user not in /etc/passwd
Date: 2013-05-07 15:42:51
Message-ID: E1UZk2V-0005oP-Eh@wrigleys.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 8139
Logged by: Nicolas Marchildon
Email address: nicolas(at)marchildon(dot)net
PostgreSQL version: 9.2.4
Operating system: RHEL 6
Description:

Running initdb while logged in as a user that has no entry in /etc/passwd,
which happens when authenticating with Kerberos, and missing sssd-client
prints a misleading error message:

"initdb: could not obtain information about current user: Success"

The misleading part is the "Success". This comes from errno:

pw = getpwuid(geteuid());
if (!pw)
{
fprintf(stderr,
_("%s: could not obtain information about current
user: %s\n"),
progname, strerror(errno));
exit(1);
}

The man page says:

RETURN VALUE
The getpwnam() and getpwuid() functions return a pointer to a
passwd
structure, or NULL if the matching entry is not found or an
error
occurs. If an error occurs, errno is set appropriately. If one
wants
to check errno after the call, it should be set to zero before
the
call.

First, initdb's get_id function does not set errno to zero, which is a bug.
Second, when the return value is NULL, it should only print strerror(errno)
when errno != 0.

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2013-05-07 18:10:28 Re: BUG #8139: initdb: Misleading error message when current user not in /etc/passwd
Previous Message Heikki Linnakangas 2013-05-07 14:00:15 Re: [BUGS] BUG #8043: 9.2.4 doesn't open WAL files from archive, only looks in pg_xlog