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:
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Reference in New Issue
Block a user