postgres.git / summary / log / commit / refs
commit e77cfa54d700557ea700d47454c9e570f20f1841
Author: Peter Eisentraut <peter@eisentraut.org>
Date: Mon Jan 28 13:36:48 2019 +0000
First released in: 12.0
Fix pg_stat_ssl.clientdn
Return null if there is no client certificate. This is how it has
always been documented, but in reality it returned an empty string.
Reviewed-by: Kyotaro HORIGUCHI <horiguchi.kyotaro@lab.ntt.co.jp>
Discussion: https://www.postgresql.org/message-id/flat/398754d8-6bb5-c5cf-e7b8-22e5f0983caf@2ndquadrant.com/
src/backend/utils/adt/pgstatfuncs.c | 5 ++++-
src/test/ssl/t/001_ssltests.pl | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index 053bb73863d..20ebcfbcdf6 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -652,7 +652,10 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
values[20] = CStringGetTextDatum(beentry->st_sslstatus->ssl_cipher);
values[21] = Int32GetDatum(beentry->st_sslstatus->ssl_bits);
values[22] = BoolGetDatum(beentry->st_sslstatus->ssl_compression);
- values[23] = CStringGetTextDatum(beentry->st_sslstatus->ssl_clientdn);
+ if (beentry->st_sslstatus->ssl_clientdn[0])
+ values[23] = CStringGetTextDatum(beentry->st_sslstatus->ssl_clientdn);
+ else
+ nulls[23] = true;
}
else
{
diff --git a/src/test/ssl/t/001_ssltests.pl b/src/test/ssl/t/001_ssltests.pl
index 74a5da578a2..bbddb8e2b76 100644
--- a/src/test/ssl/t/001_ssltests.pl
+++ b/src/test/ssl/t/001_ssltests.pl
@@ -316,7 +316,7 @@ command_like([
'-c', "SELECT * FROM pg_stat_ssl WHERE pid = pg_backend_pid()"
],
qr{^pid,ssl,version,cipher,bits,compression,clientdn\n
- ^\d+,t,TLSv[\d.]+,[\w-]+,\d+,f,$}mx,
+ ^\d+,t,TLSv[\d.]+,[\w-]+,\d+,f,_null_$}mx,
'pg_stat_ssl view without client certificate');
### Server-side tests.
[parent: 18059543e76a]