From: Jonathan Gonzalez V. <jonathan.abdiel@gmail.com>
To: pgsql-hackers@postgresql.org
Subject: Make PGOAUTHCAFILE in libpq-oauth work out of debug mode
Date: Wed, 29 Oct 2025 20:19:49 +0100
Message-ID: <16a91d02795cb991963326a902afa764e4d721db.camel@gmail.com> (raw)
Hi,
While working on a validator for keycloak[1] with libpq-oauth I find
out that to allow a self-signed certificated I had to set the CA on the
client but for this was required to also set the PGOAUTHDEBUG=UNSAFE
which generated a lot of information on the client side that I didn't
need for my testing and work.
This patch basically remove the need of setting the PGOAUTHDEBUG=UNSAFE
to be able to use PGOAUTHCAFILE.
I'm not sure if where I put the documentation is the right place, I
would like to have some opinions on that matter too.
[1] https://github.com/cloudnative-pg/postgres-keycloak-oauth-validator
--
Jonathan Gonzalez V. <jonathan.abdiel@gmail.com>
Attachments:v1-0001-libpq-oauth-allow-changing-the-CA-when-not-in-deb.patch (text/x-patch, 3.6K) download
From b32a1ad93f933fa319ff29e15299659d67de4d22 Mon Sep 17 00:00:00 2001
From: "Jonathan Gonzalez V." <jonathan.abdiel@gmail.com>
Date: Wed, 29 Oct 2025 16:54:42 +0100
Subject: [PATCH v1 1/1] libpq-oauth: allow changing the CA when not in debug
mode
Allowing to set a CA enables users environment like companies with
internal CA or developers working on their own local system while
using a self-signed CA and don't need to see all the debug messages
while testing inside an internal environment.
Signed-off-by: Jonathan Gonzalez V. <jonathan.abdiel@gmail.com>
---
doc/src/sgml/libpq.sgml | 23 +++++++++++++++++------
src/interfaces/libpq-oauth/oauth-curl.c | 20 +++++++-------------
2 files changed, 24 insertions(+), 19 deletions(-)
diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgmlindex 5bf59a19855..c3fe9d5478a 100644--- a/doc/src/sgml/libpq.sgml+++ b/doc/src/sgml/libpq.sgml@@ -10520,12 +10520,6 @@ typedef struct PGoauthBearerRequest
permits the use of unencrypted HTTP during the OAuth provider exchange
</para>
</listitem>
- <listitem>- <para>- allows the system's trusted CA list to be completely replaced using the- <envar>PGOAUTHCAFILE</envar> environment variable- </para>- </listitem>
<listitem>
<para>
prints HTTP traffic (containing several critical secrets) to standard
@@ -10547,6 +10541,23 @@ typedef struct PGoauthBearerRequest
</para>
</warning>
</sect2>
+ <sect2 id="libpq-oauth-environment">+ <title>Environment variables</title>+ <para>+ The behavior of the OAuth calls may be affected by the following variables:+ <variablelist>+ <varlistentry>+ <term><envar>PGOAUTHCAFILE</envar></term>+ <listitem>+ <para>+ Allows to specify the path to a CA file that will be used by the client+ to verify the certificate from the OAuth server side.+ </para>+ </listitem>+ </varlistentry>+ </variablelist>+ </para>+ </sect2>
</sect1>
diff --git a/src/interfaces/libpq-oauth/oauth-curl.c b/src/interfaces/libpq-oauth/oauth-curl.cindex aa50b00d053..b27a269c962 100644--- a/src/interfaces/libpq-oauth/oauth-curl.c+++ b/src/interfaces/libpq-oauth/oauth-curl.c@@ -1704,6 +1704,8 @@ debug_callback(CURL *handle, curl_infotype type, char *data, size_t size,
static bool
setup_curl_handles(struct async_ctx *actx)
{
+ const char *env;+
/*
* Create our multi handle. This encapsulates the entire conversation with
* libcurl for this connection.
@@ -1792,20 +1794,12 @@ setup_curl_handles(struct async_ctx *actx)
}
/*
- * If we're in debug mode, allow the developer to change the trusted CA- * list. For now, this is not something we expose outside of the UNSAFE- * mode, because it's not clear that it's useful in production: both libpq- * and the user's browser must trust the same authorization servers for- * the flow to work at all, so any changes to the roots are likely to be- * done system-wide.+ * Allow to change the trusted CA even if we're not in debug mode, this help+ * to make it easy to work on environments were the CA could internal and+ * not available on every system, like big companies with airgap systems.
*/
- if (actx->debugging)- {- const char *env;-- if ((env = getenv("PGOAUTHCAFILE")) != NULL)- CHECK_SETOPT(actx, CURLOPT_CAINFO, env, return false);- }+ if ((env = getenv("PGOAUTHCAFILE")) != NULL)+ CHECK_SETOPT(actx, CURLOPT_CAINFO, env, return false);
/*
* Suppress the Accept header to make our request as minimal as possible.
--
2.51.0
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: jonathan.abdiel@gmail.com
Subject: Re: Make PGOAUTHCAFILE in libpq-oauth work out of debug mode
In-Reply-To: <16a91d02795cb991963326a902afa764e4d721db.camel@gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox