In username-map substitution, cope with more than one \1.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 13 Jul 2025 17:52:32 +0000 (13:52 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 13 Jul 2025 17:52:32 +0000 (13:52 -0400)
commit3c4e26a62c31ebe296e3aedb13ac51a7a35103bd
treebba4ec55d490bb359f793183008f566853e30f3d
parent092f3c63efc6a6ce235cfbed45bd05b739de8540
In username-map substitution, cope with more than one \1.

If the system-name field of a pg_ident.conf line is a regex
containing capturing parentheses, you can write \1 in the
user-name field to represent the captured part of the system
name.  But what happens if you write \1 more than once?
The only reasonable expectation IMO is that each \1 gets
replaced, but presently our code replaces only the first.
Fix that.

Also, improve the tests for this feature to exercise cases
where a non-empty string needs to be substituted for \1.
The previous testing didn't inspire much faith that it
was verifying correct operation of the substitution code.

Given the lack of field complaints about this, I don't
feel a need to back-patch.

Reported-by: David G. Johnston <david.g.johnston@gmail.com>
Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: http://postgr.es/m/CAKFQuwZu6kZ8ZPvJ3pWXig+6UX4nTVK-hdL_ZS3fSdps=RJQQQ@mail.gmail.com
src/backend/libpq/hba.c
src/test/authentication/t/003_peer.pl