]> git.ipfire.org Git - thirdparty/postgresql.git/commit
libpq: Prepare for protocol grease during 19beta
authorJacob Champion <jchampion@postgresql.org>
Fri, 6 Feb 2026 18:31:45 +0000 (10:31 -0800)
committerJacob Champion <jchampion@postgresql.org>
Fri, 6 Feb 2026 18:31:45 +0000 (10:31 -0800)
commitd8d7c5dc8f74506d35c7e8242be997fd5cf388eb
tree9bc195f3068c18eae9f4edc9dd399e2f18f5a351
parente3d37853ecd51c87976df7ea5c5d641f45668370
libpq: Prepare for protocol grease during 19beta

The main reason that libpq doesn't request protocol version 3.2 by
default is because other proxy/server implementations don't implement
the negotiation. This is a bit of a chicken-and-egg problem: We don't
bump the default version that libpq requests, but other implementations
may not be incentivized to implement version negotiation if their users
never run into issues.

One established practice to combat this is to flip Postel's Law on its
head, by sending parameters that the server cannot possibly support. If
the server fails the handshake instead of correctly negotiating, then
the problem is surfaced naturally. If the server instead claims to
support the bogus parameters, then we fail the connection to make the
lie obvious. This is called "grease" (or "greasing"), after the GREASE
mechanism in TLS that popularized the concept:

    https://www.rfc-editor.org/rfc/rfc8701.html

This patch reserves 3.9999 as an explicitly unsupported protocol version
number and `_pq_.test_protocol_negotiation` as an explicitly unsupported
protocol extension. A later commit will send these by default in order
to stress-test the ecosystem during the beta period; that commit will
then be reverted before 19 RC1, so that we can decide what to do with
whatever data has been gathered.

The _pq_.test_protocol_negotiation change here is intentionally docs-
only: after its implementation is reverted, the parameter should remain
reserved.

Extracted/adapted from a patch by Jelte Fennema-Nio.

Author: Jelte Fennema-Nio <postgres@jeltef.nl>
Co-authored-by: Jacob Champion <jacob.champion@enterprisedb.com>
Discussion: https://postgr.es/m/DDPR5BPWH1RJ.1LWAK6QAURVAY%40jeltef.nl
doc/src/sgml/protocol.sgml
src/include/libpq/pqcomm.h
src/interfaces/libpq/fe-protocol3.c