[BUGS] BUG #8139: initdb: Misleading error message when current user not in /etc/passwd
The following bug has been logged on the website: Bug reference: 8139 Logged by: Nicolas Marchildon Email address: nico...@marchildon.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. -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs
Re: [BUGS] BUG #8139: initdb: Misleading error message when current user not in /etc/passwd
nico...@marchildon.net writes: 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. AFAICS, getpwuid is not honoring its specification here: it failed to set errno. I don't see that suppressing the strerror result would add anything much. regards, tom lane -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs
Re: [BUGS] BUG #8139: initdb: Misleading error message when current user not in /etc/passwd
Tom Lane wrote: nico...@marchildon.net writes: 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. AFAICS, getpwuid is not honoring its specification here: it failed to set errno. I don't see that suppressing the strerror result would add anything much. Well, in this case no error occured, but no matching entry was found. The wording in the manpage is explicit that there not being an entry is not an error. -- Álvaro Herrerahttp://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training Services -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs