Re: BUG #18856: Include directives for postgresql.conf, pg_hba.conf, pg_ident.conf behave inconsistently.

From: Robert Pufky <rpufky(at)gmail(dot)com>
To: rpufky(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #18856: Include directives for postgresql.conf, pg_hba.conf, pg_ident.conf behave inconsistently.
Date: 2025-03-18 22:38:06
Message-ID: CAH4jOMj5wB+UVMP1nTLWg8=kgX-oiYKtF8PunJK8HDRB9ohgFw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

For the 'Test: pg_hba.conf' tests, I included the wrong testing notes, they
should be:

Test 2:
.../17/main/pg_hba.conf
include_dir = conf.d
include_if_exists = /tmp/pg_hba.conf

Test 3:
.../17/main/pg_hba.conf
include_dir 'conf.d'
include_if_exists '/tmp/pg_hba.conf'

Test 4:
.../17/main/pg_hba.conf
include_dir conf.d
include_if_exists /tmp/pg_hba.conf

On Tue, Mar 18, 2025 at 3:31 PM PG Bug reporting form <
noreply(at)postgresql(dot)org> wrote:

> The following bug has been logged on the website:
>
> Bug reference: 18856
> Logged by: Robert Pufky
> Email address: rpufky(at)gmail(dot)com
> PostgreSQL version: 17.4
> Operating system: Debian Bookworm
> Description:
>
> This is a nuanced error; please read the entire report. Only changed lines
> are shown.
>
> Effectively, the include_dir, include_if_exists, and include directives
> behave differently for each of the files, even though there is no
> documentation stating any deviation in behavior. My working assumption is
> that the behavior in postgresql.conf for those directives carries over to
> pg_hba.conf and pg_ident.conf; which it does not.
>
> Complete setup and testing cases below validating what I am seeing:
>
> System Configuration:
> * debian bookworm, latest patches, all repositories; 2025-03-18
> * Postgres 17.4, from postgres repos - https://apt.postgres.org/;
> 2025-03-18
> * Default package installation (apt update && apt dist-upgrade && apt
> install postgres)
>
> /tmp/pg.conf:
> max_connections=1000
>
> /tmp/pg_ident.conf
> local_all postgres trust
> /tmp/pg_hba.conf
> local all all trust
>
> Test: postgresql.conf
> * Quoting sources work correctly. This is expected based on documentation.
>
> .../17/main/postgresql.conf:
> include_dir = 'conf.d'
> include_if_exists = '/tmp/pg.conf'
>
> -> postgresql service starts. No errors. Expected.
> ---
> .../17/main/postgresql.conf:
> include_dir 'conf.d'
> include_if_exists '/tmp/pg.conf'
>
> -> postgresql service starts. No errors. Expected.
>
> Test: postgresql.conf unquoted
> * Not quoting sources work correctly. This is expected based on
> documentation.
>
> .../17/main/postgresql.conf:
> include_dir = conf.d
> include_if_exists = /tmp/pg.conf
>
> -> postgresql service fails to start. Expected.
> 2025-03-18 21:32:09.317 GMT [8970] LOG: syntax error in file
> "/etc/postgresql/17/main/postgresql.conf" line 834, near token "conf.d"
> 2025-03-18 21:32:09.317 GMT [8970] LOG: syntax error in file
> "/etc/postgresql/17/main/postgresql.conf" line 836, near token "/"
> 2025-03-18 21:32:09.317 GMT [8970] FATAL: configuration file
> "/etc/postgresql/17/main/postgresql.conf" contains errors
> ---
> .../17/main/postgresql.conf:
> include_dir conf.d
> include_if_exists /tmp/pg.conf
>
> -> postgresql service fails to start. Expected.
> 2025-03-18 21:32:09.317 GMT [8970] LOG: syntax error in file
> "/etc/postgresql/17/main/postgresql.conf" line 834, near token "conf.d"
> 2025-03-18 21:32:09.317 GMT [8970] LOG: syntax error in file
> "/etc/postgresql/17/main/postgresql.conf" line 836, near token "/"
> 2025-03-18 21:32:09.317 GMT [8970] FATAL: configuration file
> "/etc/postgresql/17/main/postgresql.conf" contains errors
>
>
> Test: pg_ident.conf
> * Expectation: Quoting sources as before works as-in postgresql.conf;
> per pg_ident.conf documentation and include documentation
>
> .../17/main/pg_hba.conf
> local all all peer map=local_all
>
> .../17/main/pg_ident.conf
> include_dir = 'conf.d'
> include_if_exists = '/tmp/pg_ident.conf'
>
> -> postgresql service starts. No errors. Expected.
> ---
> .../17/main/pg_hba.conf
> local all all peer map=local_all
>
> .../17/main/pg_ident.conf
> include_dir = conf.d
> include_if_exists = /tmp/pg_ident.conf
>
> -> postgresql service starts. No errors. DEVIATION from postgresql.conf
> behavior.
> ---
> .../17/main/pg_hba.conf
> local all all peer map=local_all
>
> .../17/main/pg_ident.conf
> include_dir conf.d
> include_if_exists tmp/pg_ident.conf
>
> -> postgresql service starts. No errors. DEVIATION from postgresql.conf
> behavior.
>
>
> Test: pg_hba.conf
> * Expectation: Quoting sources as before works as-in postgresql.conf;
> per pg_hba.conf documentation and include documentation
>
> .../17/main/pg_hba.conf
> include_dir = 'conf.d'
> include_if_exists = '/tmp/pg_hba.conf'
>
> -> postgresql service fails to start. DEVIATION from postgresql.conf
> behavior.
> 2025-03-18 22:04:47.437 UTC [9110] LOG: invalid connection type
> "include_dir"
> 2025-03-18 22:04:47.437 UTC [9110] CONTEXT: line 134 of configuration file
> "/etc/postgresql/17/main/pg_hba.conf"
> 2025-03-18 22:04:47.437 UTC [9110] LOG: invalid connection type
> "include_if_exists"
> 2025-03-18 22:04:47.437 UTC [9110] CONTEXT: line 135 of configuration file
> "/etc/postgresql/17/main/pg_hba.conf"
> 2025-03-18 22:04:47.437 UTC [9110] FATAL: could not load
> /etc/postgresql/17/main/pg_hba.conf
> * include_if_exists explicitly supported in documentation.
> ---
> .../17/main/pg_hba.conf
> local all all peer map=local_all
>
> .../17/main/pg_ident.conf
> include_dir = conf.d
> include_if_exists = /tmp/pg_hba.conf
>
> -> postgresql service fails to start. DEVIATION from postgresql.conf
> behavior.
> 2025-03-18 22:01:04.933 UTC [9109] LOG: invalid connection type
> "include_dir"
> 2025-03-18 22:01:04.933 UTC [9109] CONTEXT: line 134 of configuration file
> "/etc/postgresql/17/main/pg_hba.conf"
> 2025-03-18 22:01:04.933 UTC [9109] LOG: invalid connection type
> "include_if_exists"
> 2025-03-18 22:01:04.933 UTC [9109] CONTEXT: line 135 of configuration file
> "/etc/postgresql/17/main/pg_hba.conf"
> 2025-03-18 22:01:04.933 UTC [9109] FATAL: could not load
> /etc/postgresql/17/main/pg_hba.conf
> * include_dir, include_if_exists explicitly supported in documentation.
> ---
> .../17/main/pg_hba.conf
> local all all peer map=local_all
>
> .../17/main/pg_ident.conf
> include_dir 'conf.d'
> include_if_exists '/tmp/pg_hba.conf'
>
> -> postgresql service fails to start. DEVIATION from postgresql.conf
> behavior.
> 2025-03-18 22:05:26.253 UTC [9111] LOG: could not open configuration
> directory "/etc/postgresql/17/main/'conf.d'": No such file or directory
> 2025-03-18 22:05:26.253 UTC [9111] CONTEXT: line 134 of configuration file
> "/etc/postgresql/17/main/pg_hba.conf"
> 2025-03-18 22:05:26.253 UTC [9111] LOG: could not open file
> "/etc/postgresql/17/main/'/tmp/pg_hba.conf'": No such file or directory
> 2025-03-18 22:05:26.253 UTC [9111] CONTEXT: line 135 of configuration file
> "/etc/postgresql/17/main/pg_hba.conf"
> 2025-03-18 22:05:26.253 UTC [9111] LOG: skipping missing authentication
> file "/etc/postgresql/17/main/'/tmp/pg_hba.conf'"
> 2025-03-18 22:05:26.253 UTC [9111] CONTEXT: line 135 of configuration file
> "/etc/postgresql/17/main/pg_hba.conf"
> 2025-03-18 22:05:26.253 UTC [9111] FATAL: could not load
> /etc/postgresql/17/main/pg_hba.conf
> * Looks like this now directly appends any quoted option directly to the
> data_directory path, including quotes, no path resolution.
> ---
> .../17/main/pg_hba.conf
> local all all peer map=local_all
>
> .../17/main/pg_ident.conf
> include_dir conf.d
> include_if_exists /tmp/pg_hba.conf
>
> -> postgresql service starts. DEVIATION from postgresql.conf behavior.
> select * from pg_hba_file_rules where file_name='/tmp/hba.conf';
> rule_number | file_name | line_number | type | database |
> user_name
> | address | netmask | auth_method | options | error
>
> -------------+------------------+-------------+-------+----------+-----------+---------+---------+-------
> ------+---------+-------
> 8 | /tmp/pg_hba.conf | 1 | local | {all} | {all}
>
> | | | trust
> | |
> (1 row)
> * Looks like this loaded everything correctly?
>
> I believe this is an actual bug, or documentation needs to be explicitly
> updated to reflect behavior changes for include directives.
>
> include documentation source:
> https://www.postgresql.org/docs/17/config-setting.html#CONFIG-INCLUDES
> pg_ident.conf documentation source:
> https://www.postgresql.org/docs/17/auth-username-maps.html
> pg_hba.conf documentation source:
> https://www.postgresql.org/docs/current/auth-pg-hba-conf.html
>
> Thanks!
>
>

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Robins Tharakan 2025-03-19 01:01:16 Re: BUG #18852: Unexpected expression in subquery output
Previous Message PG Bug reporting form 2025-03-18 22:30:08 BUG #18856: Include directives for postgresql.conf, pg_hba.conf, pg_ident.conf behave inconsistently.