Skip to content
Snippets Groups Projects
Commit 3e32e947 authored by Bruce Momjian's avatar Bruce Momjian
Browse files

Patch that makes quoting "sameuser", "samegroup", and "all" remove

special meaning of these terms in pg_hba.conf.

Also changes ugly pg_hba.conf IPv6 netmask of
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff to ::1/128.

Andrew Dunstan
parent 1c757c49
No related branches found
No related tags found
No related merge requests found
......@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.118 2003/12/05 15:50:31 tgl Exp $
* $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.119 2003/12/25 03:44:04 momjian Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -87,16 +87,19 @@ pg_isblank(const char c)
* token or EOF, whichever comes first. If no more tokens on line,
* return null string as *buf and position file to beginning of
* next line or EOF, whichever comes first. Allow spaces in quoted
* strings. Terminate on unquoted commas. Handle comments.
* strings. Terminate on unquoted commas. Handle comments. Treat
* unquoted keywords that might be user names or database names
* specially, by appending a newline to them.
*/
void
next_token(FILE *fp, char *buf, const int bufsz)
{
int c;
char *start_buf = buf;
char *end_buf = buf + (bufsz - 1);
char *end_buf = buf + (bufsz - 2);
bool in_quote = false;
bool was_quote = false;
bool saw_quote = false;
/* Move over initial whitespace and commas */
while ((c = getc(fp)) != EOF && (pg_isblank(c) || c == ','))
......@@ -149,7 +152,10 @@ next_token(FILE *fp, char *buf, const int bufsz)
was_quote = false;
if (c == '"')
{
in_quote = !in_quote;
saw_quote = true;
}
c = getc(fp);
}
......@@ -161,7 +167,22 @@ next_token(FILE *fp, char *buf, const int bufsz)
if (c != EOF)
ungetc(c, fp);
}
if ( !saw_quote &&
(
strncmp(start_buf,"all",3) == 0 ||
strncmp(start_buf,"sameuser",8) == 0 ||
strncmp(start_buf,"samegroup",9) == 0
)
)
{
/* append newline to a magical keyword */
*buf++ = '\n';
}
*buf = '\0';
}
/*
......@@ -446,7 +467,7 @@ check_user(char *user, char *param_str)
return true;
}
else if (strcmp(tok, user) == 0 ||
strcmp(tok, "all") == 0)
strcmp(tok, "all\n") == 0)
return true;
}
......@@ -463,14 +484,14 @@ check_db(char *dbname, char *user, char *param_str)
for (tok = strtok(param_str, MULTI_VALUE_SEP); tok != NULL; tok = strtok(NULL, MULTI_VALUE_SEP))
{
if (strcmp(tok, "all") == 0)
if (strcmp(tok, "all\n") == 0)
return true;
else if (strcmp(tok, "sameuser") == 0)
else if (strcmp(tok, "sameuser\n") == 0)
{
if (strcmp(dbname, user) == 0)
return true;
}
else if (strcmp(tok, "samegroup") == 0)
else if (strcmp(tok, "samegroup\n") == 0)
{
if (check_group(dbname, user))
return true;
......@@ -1068,7 +1089,7 @@ check_ident_usermap(const char *usermap_name,
errmsg("cannot use Ident authentication without usermap field")));
found_entry = false;
}
else if (strcmp(usermap_name, "sameuser") == 0)
else if (strcmp(usermap_name, "sameuser\n") == 0)
{
if (strcmp(pg_user, ident_user) == 0)
found_entry = true;
......
......@@ -35,6 +35,11 @@
# encrypted passwords. OPTION is the ident map or the name of the PAM
# service.
#
# Database and user names containing spaces, commas, quotes and other special
# characters can be quoted. Quoting one of the keywords "all", "sameuser" or
# "samegroup" makes the name lose its special character, and just match a
# database or username with that name.
#
# This file is read on server startup and when the postmaster receives
# a SIGHUP signal. If you edit the file on a running system, you have
# to SIGHUP the postmaster for the changes to take effect, or use
......@@ -59,4 +64,4 @@ local all all trust
# IPv4-style local connections:
host all all 127.0.0.1 255.255.255.255 trust
# IPv6-style local connections:
host all all ::1 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff trust
host all all ::1/128 trust
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment