Fix path reference when parsing pg_ident.conf for pg_ident_file_mappings
authorMichael Paquier <[email protected]>
Tue, 26 Jul 2022 06:57:31 +0000 (15:57 +0900)
committerMichael Paquier <[email protected]>
Tue, 26 Jul 2022 06:57:31 +0000 (15:57 +0900)
Since a2c8499, HbaFileName (default pg_hba.conf) was getting used
instead of IdentFileName (default pg_ident.conf) as the parent file to
use as reference when parsing the contents of pg_ident.conf, with
pg_ident.conf correctly opened, when feeding this information to
pg_ident_file_mappings.  This had two consequences:
- On an I/O error when reading pg_ident.conf, the user would get an
ERROR message referring to pg_hba.conf and not pg_ident.conf.
- When reading an external file with a relative path using '@' in
pg_ident.conf, the directory used to look at the file to load would be
the base directory of pg_hba.conf rather than the one of pg_ident.conf,
leading to errors in pg_ident_file_mappings inconsistent with what gets
loaded at startup when pg_ident.conf and pg_hba.conf are located in
different directories.

This error only impacted the SQL view pg_ident_file_mappings that uses a
logic new to v15 to fill the view with the parsed information, not the
code paths loading these authentication files at startup.

Author: Julien Rouhaud
Discussion: https://postgr.es/m/20220726050402.vsr6fmz7rsgpmdz3@jrouhaud
Backpatch-through: 15

src/backend/utils/adt/hbafuncs.c

index 598259718c439067b80167c07e1bb308affaa423..9e5794071cd7be5b7d8894cd2b85e171b59d4eec 100644 (file)
@@ -512,7 +512,7 @@ fill_ident_view(Tuplestorestate *tuple_store, TupleDesc tupdesc)
                 errmsg("could not open usermap file \"%s\": %m",
                        IdentFileName)));
 
-   linecxt = tokenize_auth_file(HbaFileName, file, &ident_lines, DEBUG3);
+   linecxt = tokenize_auth_file(IdentFileName, file, &ident_lines, DEBUG3);
    FreeFile(file);
 
    /* Now parse all the lines */