Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: postgresql-cfbot/postgresql
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 764d501
Choose a base ref
...
head repository: postgresql-cfbot/postgresql
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 330dcb3
Choose a head ref
  • 8 commits
  • 23 files changed
  • 3 contributors

Commits on Apr 1, 2025

  1. Add timingsafe_bcmp(), for constant-time memory comparison

    timingsafe_bcmp() should be used instead of memcmp() or a naive
    for-loop, when comparing passwords or secret tokens, to avoid leaking
    information about the secret token by timing. This commit just
    introduces the function but does not change any existing code to use
    it yet.
    
    Co-authored-by: Jelte Fennema-Nio <[email protected]>
    Discussion: https://www.postgresql.org/message-id/[email protected]
    2 people authored and Commitfest Bot committed Apr 1, 2025
    Configuration menu
    Copy the full SHA
    52f21c9 View commit details
    Browse the repository at this point in the history
  2. libpq: Handle NegotiateProtocolVersion message differently

    Previously libpq would always error when the server returns a
    NegotiateProtocolVersion message. This was fine because libpq only
    supported a single protocol version and did not support any protocol
    parameters. But we now that we're discussing protocol changes we need
    to change this behaviour, and introduce a fallback mechanism when
    connecting to an older server.
    
    This patch modifies the client side checks to allow a range of
    supported protocol versions, instead of only allowing the exact
    version that was requested. Currently this "range" only contains the
    3.0 version, but in a future commit we'll change this. In addition it
    changes the errors for protocol to say that they error because we did
    not request any parameters, not because the server did not support
    some of them. In a future commit more infrastructure for protocol
    parameters will be added, so that these checks can also succeed when
    receiving unsupported parameters back.
    
    Note that at the moment this change does not have any behavioural
    effect, because libpq will only request version 3.0 and will never
    send protocol parameters. Which means that the client never receives a
    NegotiateProtocolVersion message from the server.
    
    Author: Jelte Fennema-Nio <[email protected]>
    Discussion: https://www.postgresql.org/message-id/CAGECzQTfc_O%[email protected]
    Discussion: https://www.postgresql.org/message-id/CAGECzQRbAGqJnnJJxTdKewTsNOovUt4bsx3NFfofz3m2j-t7tA@mail.gmail.com
    hlinnaka authored and Commitfest Bot committed Apr 1, 2025
    Configuration menu
    Copy the full SHA
    f30ca65 View commit details
    Browse the repository at this point in the history
  3. libpq: Add min/max_protocol_version connection options

    All supported version of the PostgreSQL server send the
    NegotiateProtocolVersion message when an unsupported minor protocol
    version is requested by a client. But many other applications that
    implement the PostgreSQL protocol (connection poolers, or other
    databases) do not, and the same is true for PostgreSQL server versions
    older than 9.2. Connecting to such other applications thus fails if a
    client requests a protocol version different than 3.0.
    
    This patch adds a max_protocol_version connection option to libpq that
    specifies the protocol version that libpq should request from the
    server. Currently all allowed values result in the use of 3.0, but
    that will be changed in a future commit that bumps the protocol
    version. Even after that version bump the default will likely stay 3.0
    for the time being. Once more of the ecosystem supports the
    NegotiateProtocolVersion message we might want to change the default
    to the latest minor version.
    
    We also add the similar min_protocol_version connection option, to
    allow a client to specify that connecting should fail if a lower
    protocol version is attempted by the server. This can be used to
    ensure certain protocol features are in used, which can be
    particularly useful if those features impact security.
    
    Author: Jelte Fennema-Nio <[email protected]>
    Reviewed-by: Robert Haas <[email protected]> (earlier versions)
    Discussion: https://www.postgresql.org/message-id/CAGECzQTfc_O%[email protected]
    Discussion: https://www.postgresql.org/message-id/CAGECzQRbAGqJnnJJxTdKewTsNOovUt4bsx3NFfofz3m2j-t7tA@mail.gmail.com
    hlinnaka authored and Commitfest Bot committed Apr 1, 2025
    Configuration menu
    Copy the full SHA
    ae09433 View commit details
    Browse the repository at this point in the history
  4. Bump protocol version to 3.2

    In preparation of new additions to the protocol in the next commit,
    this bumps the minor protocol version number.
    
    Instead of bumping the version number to 3.1, which would be the next
    minor version, we skip that one and bump straight to 3.2. The reason
    for this is that many PgBouncer releases have, due to an off-by-one
    bug, reported 3.1 as supported. These versions would interpret 3.1 as
    equivalent to 3.0. So if we would now add extra messages to the 3.1
    protocol, clients would succeed to connect to PgBouncer, but would
    then cause connection failures when sending such new messages.
    
    So instead of bumping to 3.1, we bump the protocol version to 3.2, for
    which these buggy PgBouncer releases will correctly close the connection
    at the startup packet. It's a bit strange to skip a version number due
    to a bug in a third-party application, but PgBouncer is used widely
    enough that it seems worth it to not cause user confusion when
    connecting to recent versions of it. Especially since skipping a single
    minor version number in the protocol versioning doesn't really cost us
    anything. So, while this is not the most theoretically sound decission,
    it is the most pragmatic one.
    
    Author: Jelte Fennema-Nio <[email protected]>
    Discussion: https://www.postgresql.org/message-id/CAGECzQTfc_O%2BHXqAo5_-xG4r3EFVsTefUeQzSvhEyyLDba-O9w%40mail.gmail.com
    Discussion: https://www.postgresql.org/message-id/CAGECzQRbAGqJnnJJxTdKewTsNOovUt4bsx3NFfofz3m2j-t7tA@mail.gmail.com
    Discussion: pgbouncer/pgbouncer#1007
    hlinnaka authored and Commitfest Bot committed Apr 1, 2025
    Configuration menu
    Copy the full SHA
    3d9a0b4 View commit details
    Browse the repository at this point in the history
  5. Make cancel request keys longer

    Currently, cancel request key is 32-bit token, which isn't very much
    entropy. If you want to cancel another session's query, you can
    brute-force it. In most environments, an unauthorized cancellation of
    a query isn't very serious, but it nevertheless would be nice to have
    more protection from it. Hence make the key longer, to make it harder
    to guess.
    
    The longer cancellation keys are generated when using the new protocol
    version 3.2. For connections using version 3.0, short 4-bytes keys are
    still used.
    
    The new longer key length is not hardcoded in the protocol anymore,
    the client is expected to deal with variable length keys, up to 256
    bytes. This flexibility allows e.g. a connection pooler to add more
    information to the cancel key, which might be useful for finding the
    connection.
    
    Reviewed-by: Jelte Fennema-Nio <[email protected]>
    Reviewed-by: Robert Haas <[email protected]> (earlier versions)
    Discussion: https://www.postgresql.org/message-id/[email protected]
    hlinnaka authored and Commitfest Bot committed Apr 1, 2025
    Configuration menu
    Copy the full SHA
    dc4957e View commit details
    Browse the repository at this point in the history
  6. docs: Update phrase that talks about message lengths in the protocol

    The reasoning for why all the message formats are parseable without
    the explicit message length field is anachronistic; the real reason is
    that protocol version 2 did not have a message length field. There's
    nothing wrong with relying on the message length, like we do in the
    new variable-length definitions of CancelRequest and BackendKeyData.,
    even though it often still makes sense to have length fields for
    individual parts in messages.
    hlinnaka authored and Commitfest Bot committed Apr 1, 2025
    Configuration menu
    Copy the full SHA
    cff2a0d View commit details
    Browse the repository at this point in the history
  7. docs: Add a new section and table listing protocol versions

    Move the discussion on protocol versions and version negotiation to a
    new "Protocol versions" section. Add a table listing all the different
    protocol versions, starting from the obsolete protocol version 2, and
    the PostgreSQL versions that support each.
    hlinnaka authored and Commitfest Bot committed Apr 1, 2025
    Configuration menu
    Copy the full SHA
    eb0feda View commit details
    Browse the repository at this point in the history
  8. [CF 4870] Make query cancellation keys longer

    This branch was automatically generated by a robot using patches from an
    email thread registered at:
    
    https://commitfest.postgresql.org/patch/4870
    
    The branch will be overwritten each time a new patch version is posted to
    the thread, and also periodically to check for bitrot caused by changes
    on the master branch.
    
    Patch(es): https://www.postgresql.org/message-id/[email protected]
    Author(s): Heikki Linnakangas, Jelte Fennema-Nio
    Commitfest Bot committed Apr 1, 2025
    Configuration menu
    Copy the full SHA
    330dcb3 View commit details
    Browse the repository at this point in the history
Loading