diff options
-rw-r--r-- | doc/src/sgml/client-auth.sgml | 3 | ||||
-rw-r--r-- | src/test/authentication/t/003_peer.pl | 13 |
2 files changed, 16 insertions, 0 deletions
diff --git a/doc/src/sgml/client-auth.sgml b/doc/src/sgml/client-auth.sgml index cc8c59206c9..e4959663c4f 100644 --- a/doc/src/sgml/client-auth.sgml +++ b/doc/src/sgml/client-auth.sgml @@ -960,6 +960,9 @@ mymap /^(.*)@otherdomain\.com$ guest will remove the domain part for users with system user names that end with <literal>@mydomain.com</literal>, and allow any user whose system name ends with <literal>@otherdomain.com</literal> to log in as <literal>guest</literal>. + Quoting a <replaceable>database-username</replaceable> containing + <literal>\1</literal> <emphasis>does not</emphasis> make + <literal>\1</literal> lose its special meaning. </para> <tip> diff --git a/src/test/authentication/t/003_peer.pl b/src/test/authentication/t/003_peer.pl index 966b2aa47ef..e6f5fdba165 100644 --- a/src/test/authentication/t/003_peer.pl +++ b/src/test/authentication/t/003_peer.pl @@ -153,6 +153,19 @@ test_role( log_like => [qr/connection authenticated: identity="$system_user" method=peer/]); +# Success as the regular expression matches and \1 is replaced in the given +# subexpression, even if quoted. +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 quoted \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'); |