Fix pg_stat_ssl.clientdn
authorPeter Eisentraut <peter@eisentraut.org>
Mon, 28 Jan 2019 13:36:48 +0000 (14:36 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Tue, 29 Jan 2019 12:06:33 +0000 (13:06 +0100)
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
src/test/ssl/t/001_ssltests.pl

index 053bb73863de1e2e4a49d64e300a8c187defcfd4..20ebcfbcdf689dc0f2f7c50562d88b62a561564f 100644 (file)
@@ -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
        {
index 74a5da578a24c8132a4ab615b55ecdab4bff95f7..bbddb8e2b7663bc1661e6b003db14d045c6966fb 100644 (file)
@@ -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.