From e753ae6397fe16db8e8e5b3e34ca6d53b4eded61 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Fri, 13 Jan 2023 10:35:28 +0900 Subject: [PATCH] Add tests for regex replacement with \1 in pg_ident.conf to 0003_peer.pl Regexp replacement with \1 in pg_ident.conf is tested in one check of the kerberos test suite, still it requires a dependency on --with-gssapi to be triggered. This commit adds to the test suite of peer authentication two tests to check the replacement of \1 in a pg-username, coupled with a system-username regexp: - With a subexpression in system-username, similarly to the kerberos test suite. - Without a subexpression in system-username, checking for a failure. This had no coverage until now, and the error pattern is checked in the server logs. Author: Jelte Fennema Discussion: https://postgr.es/m/CAGECzQRNow4MwkBjgPxywXdJU_K3a9+Pm78JB7De3yQwwkTDew@mail.gmail.com --- src/test/authentication/t/003_peer.pl | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/test/authentication/t/003_peer.pl b/src/test/authentication/t/003_peer.pl index 24cefd14e0..966b2aa47e 100644 --- a/src/test/authentication/t/003_peer.pl +++ b/src/test/authentication/t/003_peer.pl @@ -141,6 +141,30 @@ test_role( [qr/connection authenticated: identity="$system_user" method=peer/]); +# Success as the regular expression matches and \1 is replaced in the given +# subexpression. +reset_pg_ident($node, 'mypeermap', qq{/^$system_user(.*)\$}, 'test\1mapuser'); +test_role( + $node, + qq{testmapuser}, + 'peer', + 0, + 'with regular expression in user name map with \1 replaced', + log_like => + [qr/connection authenticated: identity="$system_user" method=peer/]); + +# Failure as the regular expression does not include a subexpression, but +# the database user contains \1, requesting a replacement. +reset_pg_ident($node, 'mypeermap', qq{/^$system_user\$}, '\1testmapuser'); +test_role( + $node, + qq{testmapuser}, + 'peer', 2, + 'with regular expression in user name map with \1 not replaced', + log_like => [ + qr/regular expression "\^$system_user\$" has no subexpressions as requested by backreference in "\\1testmapuser"/ + ]); + # Concatenate system_user to system_user. $regex_test_string = $system_user . $system_user;