aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2023-01-13 10:35:28 +0900
committerMichael Paquier <michael@paquier.xyz>2023-01-13 10:35:28 +0900
commite753ae6397fe16db8e8e5b3e34ca6d53b4eded61 (patch)
treee4f4e0d6f326b6ee0ac78168570b386395163e4d
parent58597edea102258b21d5f4b4f0d7796c0ebf100a (diff)
downloadpostgresql-e753ae6397fe16db8e8e5b3e34ca6d53b4eded61.tar.gz
postgresql-e753ae6397fe16db8e8e5b3e34ca6d53b4eded61.zip
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
-rw-r--r--src/test/authentication/t/003_peer.pl24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/test/authentication/t/003_peer.pl b/src/test/authentication/t/003_peer.pl
index 24cefd14e0a..966b2aa47ef 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;