Re: Allow file inclusion in pg_hba and pg_ident files
Michael Paquier <michael@paquier.xyz>
On Mon, Jul 18, 2022 at 03:11:51PM +0800, Julien Rouhaud wrote: > So first, even if we can test 99% of the features with just testing the views > output, I think it's should use the TAP framework since the tests will have to > mess with the pg_ident/pg_hba files. It's way easier to modify the auth files, > and it uses a dedicated instance so we don't have to worry about breaking other > test that would run concurrently. Agreed. > That may still be workable by splitting the output per newline (and possibly > removing the first prompt before sending the query text), and remove the first > and last entry (assuming you want to test somewhat sane data, and not e.g. run > the regression test on a database containing a newline), but then you have to > also account for possible escape sequences, for instance if you use > enable-bracketed-paste. In that case, the output becomes something like > > dbname=# SELECT 1; > [?2004l > 1 > [?2004hpostgres=# > > It could probably be handled with some regexp to remove escape sequences and > remove empty lines, but it seems like really fragile, and thus a very bad idea. Hmm. Indeed, that sounds fragile. And I don't really think that we should make more testing infrastructure a requirement for this patch as being able to maintain a connection while running the tests is something we've bumped on for a bit of time. > I'm not really sure what should be done here. The best compromise I can think > of is to split the tests in 3 parts: > > 1) view reporting with various inclusions using safe_psql() You mean in the case where the HBA and indent files can be loaded, so as it is possible to peek at the system views without the EXEC_BACKEND problem, right? > 2) log error reporting This one should be reliable and stable enough by parsing the logs of the backend, thanks to connect_ok() and connect_fails(). > 3) view reporting with various inclusions errors, using safe_psql() > > And when testing 3), detect first if we can still connect after introducing > errors. If not, assume this is Windows / EXEC_BACKEND and give up here without > reporting an error. Otherwise continue, and fail the test if we later can't > connect anymore. As discussed previously, detecting that the build is using > the fork emulation code path doesn't seem worthwhile so guessing it from the > psql error may be a better approach. Yeah, we could do that. Now we may also fail on other patterns, so we would need to make sure that a set of expected error outputs are the ones generated? I'd be fine to give up testing the error output generated in the system views at the end. Without a persistent connection state with the same kind of APIs as any of the drivers able to do so, that's going to be a PITA to maintain. -- Michael
Commits
-
Add TAP tests for include directives in HBA end ident files
- cbe6e482d7bf 16.0 landed
-
Introduce variables for initial and max nesting depth on configuration files
- d13b684117bd 16.0 landed
-
Add support for file inclusions in HBA and ident configuration files
- a54b658ce77b 16.0 landed
-
Add missing initialization in tokenize_expand_file() for output list
- d5566fbfeb6a 16.0 landed
-
Rework memory contexts in charge of HBA/ident tokenization
- efc981627a72 16.0 landed
-
Add error context callback when tokenizing authentication files
- ad6c52846f13 16.0 landed
-
Invent open_auth_file() in hba.c to refactor authentication file opening
- 783e8c69cbcd 16.0 landed
-
Use AbsoluteConfigLocation() when building an included path in hba.c
- 6bbd8b73857a 16.0 landed
-
Move code related to configuration files in directories to new file
- a1a7bb8f16cd 16.0 landed
-
doc: Fix some descriptions related to pg_ident_file_mappings
- 468a9f37fb69 15.1 landed
- e76502871ee3 16.0 landed
-
Add rule_number to pg_hba_file_rules and map_number to pg_ident_file_mappings
- c591300a8f54 16.0 landed
-
Refactor code handling the names of files loaded in hba.c
- 1b73d0b1c393 16.0 landed
-
Make consistent a couple of log messages when parsing HBA files
- 718fe0a14add 16.0 landed
-
Use hba_file/ident_file GUCs rather than pg_hba.conf/pg_ident.conf in logs
- 47ab1ac822cd 16.0 landed
-
Fix path reference when parsing pg_ident.conf for pg_ident_file_mappings
- 7977ac1640a7 15.0 landed
- 27e0ee57f68d 16.0 landed
-
Add system view pg_ident_file_mappings
- a2c84990bea7 15.0 landed
-
Modify query on pg_hba_file_rules to check for errors in regression tests
- 091a971bb59c 15.0 landed
-
Refactor code related to pg_hba_file_rules() into new file
- d4781d8873f8 15.0 landed