mirror of https://github.com/postgres/postgres
Currently, libpq client code must have a connection handle before it can query the "library" SSL attribute. This poses problems if the client needs to know what SSL library is in use before constructing a connection string. Allow PQsslAttribute(NULL, "library") to return the library in use -- currently, just "OpenSSL" or NULL. The new behavior is announced with the LIBPQ_HAS_SSL_LIBRARY_DETECTION feature macro, allowing clients to differentiate between a libpq that was compiled without SSL support and a libpq that's just too old to tell. Author: Jacob Champion <pchampion@vmware.com> Reviewed-by: Robert Haas <robertmhaas@gmail.com> Reviewed-by: Daniel Gustafsson <daniel@yesql.se> Discussion: https://postgr.es/m/4c8b76ef434a96627170a31c3acd33cbfd6e41f1.camel@vmware.compull/81/head
parent
8cd7627c7b
commit
ebc8b7d441
@ -0,0 +1,20 @@ |
||||
# Copyright (c) 2022, PostgreSQL Global Development Group |
||||
use strict; |
||||
use warnings; |
||||
|
||||
use PostgreSQL::Test::Utils; |
||||
use Test::More; |
||||
|
||||
# Test PQsslAttribute(NULL, "library") |
||||
my ($out, $err) = run_command(['testclient', '--ssl']); |
||||
|
||||
if ($ENV{with_ssl} eq 'openssl') |
||||
{ |
||||
is($out, 'OpenSSL', 'PQsslAttribute(NULL, "library") returns "OpenSSL"'); |
||||
} |
||||
else |
||||
{ |
||||
is($err, 'SSL is not enabled', 'PQsslAttribute(NULL, "library") returns NULL'); |
||||
} |
||||
|
||||
done_testing(); |
||||
@ -1 +1,2 @@ |
||||
/testclient |
||||
/uri-regress |
||||
|
||||
@ -0,0 +1,37 @@ |
||||
/*
|
||||
* testclient.c |
||||
* A test program for the libpq public API |
||||
* |
||||
* Copyright (c) 2022, PostgreSQL Global Development Group |
||||
* |
||||
* IDENTIFICATION |
||||
* src/interfaces/libpq/test/testclient.c |
||||
*/ |
||||
|
||||
#include "postgres_fe.h" |
||||
|
||||
#include "libpq-fe.h" |
||||
|
||||
static void |
||||
print_ssl_library() |
||||
{ |
||||
const char *lib = PQsslAttribute(NULL, "library"); |
||||
|
||||
if (!lib) |
||||
fprintf(stderr, "SSL is not enabled\n"); |
||||
else |
||||
printf("%s\n", lib); |
||||
} |
||||
|
||||
int |
||||
main(int argc, char *argv[]) |
||||
{ |
||||
if ((argc > 1) && !strcmp(argv[1], "--ssl")) |
||||
{ |
||||
print_ssl_library(); |
||||
return 0; |
||||
} |
||||
|
||||
printf("currently only --ssl is supported\n"); |
||||
return 1; |
||||
} |
||||
Loading…
Reference in new issue