Commit e98ca4d3 authored by Magnus Hagander's avatar Magnus Hagander

Make hba parsing error messages more specific.

parent b0169bb1
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.170 2008/10/24 12:48:31 mha Exp $ * $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.171 2008/10/27 20:04:45 mha Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -637,8 +637,13 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline) ...@@ -637,8 +637,13 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline)
#ifdef USE_SSL #ifdef USE_SSL
parsedline->conntype = ctHostSSL; parsedline->conntype = ctHostSSL;
#else #else
/* We don't accept this keyword at all if no SSL support */ ereport(LOG,
goto hba_syntax; (errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("hostssl not supported on this platform"),
errhint("compile with --enable-ssl to use SSL connections"),
errcontext("line %d of configuration file \"%s\"",
line_num, HbaFileName)));
return false;
#endif #endif
} }
#ifdef USE_SSL #ifdef USE_SSL
...@@ -654,18 +659,40 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline) ...@@ -654,18 +659,40 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline)
} }
} /* record type */ } /* record type */
else else
goto hba_syntax; {
ereport(LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("invalid connection type \"%s\"",
token),
errcontext("line %d of configuration file \"%s\"",
line_num, HbaFileName)));
return false;
}
/* Get the database. */ /* Get the database. */
line_item = lnext(line_item); line_item = lnext(line_item);
if (!line_item) if (!line_item)
goto hba_syntax; {
ereport(LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("end-of-line before database specification"),
errcontext("line %d of configuration file \"%s\"",
line_num, HbaFileName)));
return false;
}
parsedline->database = pstrdup(lfirst(line_item)); parsedline->database = pstrdup(lfirst(line_item));
/* Get the role. */ /* Get the role. */
line_item = lnext(line_item); line_item = lnext(line_item);
if (!line_item) if (!line_item)
goto hba_syntax; {
ereport(LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("end-of-line before role specification"),
errcontext("line %d of configuration file \"%s\"",
line_num, HbaFileName)));
return false;
}
parsedline->role = pstrdup(lfirst(line_item)); parsedline->role = pstrdup(lfirst(line_item));
if (parsedline->conntype != ctLocal) if (parsedline->conntype != ctLocal)
...@@ -673,7 +700,14 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline) ...@@ -673,7 +700,14 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline)
/* Read the IP address field. (with or without CIDR netmask) */ /* Read the IP address field. (with or without CIDR netmask) */
line_item = lnext(line_item); line_item = lnext(line_item);
if (!line_item) if (!line_item)
goto hba_syntax; {
ereport(LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("end-of-line before ip address specification"),
errcontext("line %d of configuration file \"%s\"",
line_num, HbaFileName)));
return false;
}
token = pstrdup(lfirst(line_item)); token = pstrdup(lfirst(line_item));
/* Check if it has a CIDR suffix and if so isolate it */ /* Check if it has a CIDR suffix and if so isolate it */
...@@ -718,14 +752,29 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline) ...@@ -718,14 +752,29 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline)
{ {
if (pg_sockaddr_cidr_mask(&parsedline->mask, cidr_slash + 1, if (pg_sockaddr_cidr_mask(&parsedline->mask, cidr_slash + 1,
parsedline->addr.ss_family) < 0) parsedline->addr.ss_family) < 0)
goto hba_syntax; {
ereport(LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("invalid CIDR mask in address \"%s\"",
token),
errcontext("line %d of configuration file \"%s\"",
line_num, HbaFileName)));
return false;
}
} }
else else
{ {
/* Read the mask field. */ /* Read the mask field. */
line_item = lnext(line_item); line_item = lnext(line_item);
if (!line_item) if (!line_item)
goto hba_syntax; {
ereport(LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("end-of-line before netmask specification"),
errcontext("line %d of configuration file \"%s\"",
line_num, HbaFileName)));
return false;
}
token = lfirst(line_item); token = lfirst(line_item);
ret = pg_getaddrinfo_all(token, NULL, &hints, &gai_result); ret = pg_getaddrinfo_all(token, NULL, &hints, &gai_result);
...@@ -759,7 +808,14 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline) ...@@ -759,7 +808,14 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline)
/* Get the authentication method */ /* Get the authentication method */
line_item = lnext(line_item); line_item = lnext(line_item);
if (!line_item) if (!line_item)
goto hba_syntax; {
ereport(LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("end-of-line before authentication method"),
errcontext("line %d of configuration file \"%s\"",
line_num, HbaFileName)));
return false;
}
token = lfirst(line_item); token = lfirst(line_item);
unsupauth = NULL; unsupauth = NULL;
...@@ -937,23 +993,6 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline) ...@@ -937,23 +993,6 @@ parse_hba_line(List *line, int line_num, HbaLine *parsedline)
} }
return true; return true;
hba_syntax:
if (line_item)
ereport(LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("invalid token \"%s\"",
(char *) lfirst(line_item)),
errcontext("line %d of configuration file \"%s\"",
line_num, HbaFileName)));
else
ereport(LOG,
(errcode(ERRCODE_CONFIG_FILE_ERROR),
errmsg("missing field at end of line"),
errcontext("line %d of configuration file \"%s\"",
line_num, HbaFileName)));
return false;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment