aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMagnus Hagander <magnus@hagander.net>2009-03-07 21:28:00 +0000
committerMagnus Hagander <magnus@hagander.net>2009-03-07 21:28:00 +0000
commit387efd364817f4890552b0687041930370239621 (patch)
treec66893c67e2d75d5669e8d40c8b1aedeeba70699 /src
parent54fd95b29395d57bd31562fc750233ee4691f73b (diff)
downloadpostgresql-387efd364817f4890552b0687041930370239621.tar.gz
postgresql-387efd364817f4890552b0687041930370239621.zip
Make pg_hba parsing report all errors in the file before aborting the load,
instead of just reporting the first one. Selena Deckelmann
Diffstat (limited to 'src')
-rw-r--r--src/backend/libpq/hba.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c
index 0990642ce68..5aab70ed80e 100644
--- a/src/backend/libpq/hba.c
+++ b/src/backend/libpq/hba.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.182 2009/03/04 18:43:38 mha Exp $
+ * $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.183 2009/03/07 21:28:00 mha Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1304,6 +1304,7 @@ load_hba(void)
List *hba_line_nums = NIL;
ListCell *line, *line_num;
List *new_parsed_lines = NIL;
+ bool ok = true;
file = AllocateFile(HbaFileName, "r");
if (file == NULL)
@@ -1332,17 +1333,29 @@ load_hba(void)
if (!parse_hba_line(lfirst(line), lfirst_int(line_num), newline))
{
- /* Parse error in the file, so bail out */
+ /* Parse error in the file, so indicate there's a problem */
free_hba_record(newline);
pfree(newline);
- clean_hba_list(new_parsed_lines);
- /* Error has already been reported in the parsing function */
- return false;
+
+ /*
+ * Keep parsing the rest of the file so we can report errors
+ * on more than the first row. Error has already been reported
+ * in the parsing function, so no need to log it here.
+ */
+ ok = false;
+ continue;
}
new_parsed_lines = lappend(new_parsed_lines, newline);
}
+ if (!ok)
+ {
+ /* Parsing failed at one or more rows, so bail out */
+ clean_hba_list(new_parsed_lines);
+ return false;
+ }
+
/* Loaded new file successfully, replace the one we use */
clean_hba_list(parsed_hba_lines);
parsed_hba_lines = new_parsed_lines;