*** pgsql/src/backend/libpq/hba.c 2009/03/04 18:43:38 1.182 --- pgsql/src/backend/libpq/hba.c 2009/03/07 21:28:00 1.183 *************** *** 10,16 **** * * * IDENTIFICATION ! * $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.181 2009/03/04 08:43:15 mha Exp $ * *------------------------------------------------------------------------- */ --- 10,16 ---- * * * IDENTIFICATION ! * $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.182 2009/03/04 18:43:38 mha Exp $ * *------------------------------------------------------------------------- */ *************** load_hba(void) *** 1304,1309 **** --- 1304,1310 ---- List *hba_line_nums = NIL; ListCell *line, *line_num; List *new_parsed_lines = NIL; + bool ok = true; file = AllocateFile(HbaFileName, "r"); if (file == NULL) *************** load_hba(void) *** 1332,1348 **** if (!parse_hba_line(lfirst(line), lfirst_int(line_num), newline)) { ! /* Parse error in the file, so bail out */ free_hba_record(newline); pfree(newline); ! clean_hba_list(new_parsed_lines); ! /* Error has already been reported in the parsing function */ ! return false; } new_parsed_lines = lappend(new_parsed_lines, newline); } /* Loaded new file successfully, replace the one we use */ clean_hba_list(parsed_hba_lines); parsed_hba_lines = new_parsed_lines; --- 1333,1361 ---- if (!parse_hba_line(lfirst(line), lfirst_int(line_num), newline)) { ! /* Parse error in the file, so indicate there's a problem */ free_hba_record(newline); pfree(newline); ! ! /* ! * 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;