1
0
mirror of https://github.com/postgres/postgres.git synced 2025-07-05 07:21:24 +03:00

Fix incorrect error message reported for non-existent users

Previously, lookups of non-existent user names could return "Success";
it will now return "User does not exist" by resetting errno.  This also
centralizes the user name lookup code in libpgport.

Report and analysis by Nicolas Marchildon;  patch by me
This commit is contained in:
Bruce Momjian
2013-12-18 12:16:16 -05:00
parent 11ac4c73cb
commit 613c6d26bd
19 changed files with 129 additions and 157 deletions

View File

@ -160,7 +160,7 @@ main(int argc, char *argv[])
else if (getenv("PGUSER"))
dbname = getenv("PGUSER");
else
dbname = get_user_name(progname);
dbname = get_user_name_or_exit(progname);
}
if (tables.head != NULL)

View File

@ -14,7 +14,6 @@
#include "postgres_fe.h"
#include <pwd.h>
#include <signal.h>
#include <unistd.h>
@ -29,38 +28,6 @@ static PGcancel *volatile cancelConn = NULL;
static CRITICAL_SECTION cancelConnLock;
#endif
/*
* Returns the current user name.
*/
const char *
get_user_name(const char *progname)
{
#ifndef WIN32
struct passwd *pw;
pw = getpwuid(geteuid());
if (!pw)
{
fprintf(stderr, _("%s: could not obtain information about current user: %s\n"),
progname, strerror(errno));
exit(1);
}
return pw->pw_name;
#else
static char username[128]; /* remains after function exit */
DWORD len = sizeof(username) - 1;
if (!GetUserName(username, &len))
{
fprintf(stderr, _("%s: could not get current user name: %s\n"),
progname, strerror(errno));
exit(1);
}
return username;
#endif
}
/*
* Provide strictly harmonized handling of --help and --version
* options.

View File

@ -22,8 +22,6 @@ enum trivalue
typedef void (*help_handler) (const char *progname);
extern const char *get_user_name(const char *progname);
extern void handle_help_version_opts(int argc, char *argv[],
const char *fixed_progname,
help_handler hlp);

View File

@ -174,7 +174,7 @@ main(int argc, char *argv[])
else if (getenv("PGUSER"))
dbname = getenv("PGUSER");
else
dbname = get_user_name(progname);
dbname = get_user_name_or_exit(progname);
}
initPQExpBuffer(&sql);

View File

@ -127,7 +127,7 @@ main(int argc, char *argv[])
else if (getenv("PGUSER"))
dbname = getenv("PGUSER");
else
dbname = get_user_name(progname);
dbname = get_user_name_or_exit(progname);
}
initPQExpBuffer(&sql);

View File

@ -193,7 +193,7 @@ main(int argc, char *argv[])
if (getenv("PGUSER"))
newuser = getenv("PGUSER");
else
newuser = get_user_name(progname);
newuser = get_user_name_or_exit(progname);
}
}

View File

@ -126,7 +126,7 @@ main(int argc, char *argv[])
else if (getenv("PGUSER"))
dbname = getenv("PGUSER");
else
dbname = get_user_name(progname);
dbname = get_user_name_or_exit(progname);
}
initPQExpBuffer(&sql);

View File

@ -188,7 +188,7 @@ main(int argc, char *argv[])
else if (getenv("PGUSER"))
dbname = getenv("PGUSER");
else
dbname = get_user_name(progname);
dbname = get_user_name_or_exit(progname);
}
reindex_system_catalogs(dbname, host, port, username, prompt_password,
@ -203,7 +203,7 @@ main(int argc, char *argv[])
else if (getenv("PGUSER"))
dbname = getenv("PGUSER");
else
dbname = get_user_name(progname);
dbname = get_user_name_or_exit(progname);
}
if (indexes.head != NULL)

View File

@ -202,7 +202,7 @@ main(int argc, char *argv[])
else if (getenv("PGUSER"))
dbname = getenv("PGUSER");
else
dbname = get_user_name(progname);
dbname = get_user_name_or_exit(progname);
}
if (tables.head != NULL)