Home - Waterfall Grid T-Grid Console Builders Recent Builds Buildslaves Changesources - JSON API - About

Console View


Categories: connectors experimental galera main
Legend:   Passed Failed Warnings Failed Again Running Exception Offline No data

connectors experimental galera main
Sergei Golubchik
ssl_info_client without a password hash: COM_QUIT alone if not verified

Without a password hash the client cannot prove that it has verified
the server certificate, it can only say so. It sends COM_QUIT and
the version if it has verified the certificate, and COM_QUIT alone
if it has not.

Assisted-by: Claude:claude-opus-5-5
Oleksandr Byelkin
Merge branch 'bb-11.4-release' into bb-11.8-release
Oleksandr Byelkin
Merge branch '11.4' into 11.8
Sergei Golubchik
MDEV-40530 require_secure_transport=CLIENT

An account without a password hash (PAM, gssapi, empty password)
cannot prove that the client has verified the server certificate,
so with require_secure_transport=ON it cannot connect over TCP,
unless it requires a client certificate.

require_secure_transport=CLIENT trusts such clients, as
require_secure_transport did before ssl_info_client. Accounts with
a password hash still need a valid ssl_info_client.

my_getopt: an enum that starts with OFF,ON accepts TRUE and FALSE,
like a boolean does, so --require-secure-transport=TRUE still works.

Assisted-by: Claude:claude-opus-5-5
Sergei Petrunia
MDEV-38274: Unexpectedly large pages_read_count in main.analyze_stmt_prefetch_count

The testcase checked the values of pages_prefetch_read_count and
pages_read_count that InnoDB reported for the query.

The numbers depend on how fast the prefetch thread is in comparison with
the query thread. It can also happen that we request to prefetch a page
but then still have to wait for it to be read, which is counted in
pages_read_count.

Replace the checks in the file with ones that will hold in all
circumstances.
Vladislav Vaintroub
MDEV-30836 MTR hangs on Windows after warnings in the log at shutdown

Follow-up to the MDEV-30836 fix. With --force, parse_protocol()
returned 1 after a worker reported WARNINGS, so the manager went on
reading from the socket of that worker. A worker that was told to
exit with BYE sends WARNINGS and exits, and does not send anything
more.

On Windows Perl, non-blocking reads do not work, so the manager could
block in that read. It then never handled the results of the other
workers, and mtr hung after the last test.

Return 2 for such a worker, as for the other cases where the worker
needs no response, to continue with the next ready socket. The closed
socket is handled later, when it becomes readable.

A worker that was not told to exit also sends WARNINGS, before it
restarts servers or after a test with side effects, and then goes on
to send TESTRESULT. Keep reading from it, as before. The manager
remembers the workers it said BYE to.

Assisted-by: Claude:claude-sonnet-5-5
rusher
CONC-873: Avoid copying result set metadata on every stmt execution
Oleksandr Byelkin
Merge branch 'br-11.8-merge' into bb-12.3-release
rusher
CONC-875: Read packets directly from the read ahead cache

Assisted-by: Claude Fable 5.1
Vladislav Vaintroub
MDEV-30836 MTR hangs on Windows after warnings in the log at shutdown

Follow-up to the MDEV-30836 fix. With --force, parse_protocol()
returned 1 after a worker reported WARNINGS, so the manager went on
reading from the socket of that worker. A worker that was told to
exit with BYE sends WARNINGS and exits, and does not send anything
more.

On Windows Perl, non-blocking reads do not work, so the manager could
block in that read. It then never handled the results of the other
workers, and mtr hung after the last test.

Return 2 for such a worker, as for the other cases where the worker
needs no response, to continue with the next ready socket. The closed
socket is handled later, when it becomes readable.

A worker that was not told to exit also sends WARNINGS, before it
restarts servers or after a test with side effects, and then goes on
to send TESTRESULT. Keep reading from it, as before. The manager
remembers the workers it said BYE to.

Assisted-by: Claude:claude-sonnet-5-5
Oleksandr Byelkin
Merge branch '11.8' into bb-11.8-release
Sergei Golubchik
send ssl_info_client to prove the authentication was not relayed

A MitM can relay the authentication, let the client fail on ssl_info
and keep using the authenticated connection.

* MARIADB_CLIENT_SSL_INFO_CLIENT: set it whenever TLS is used
* after the authentication OK packet send ssl_info_client, the server
  does not reply (but might disconnect in case of active MitM).
Oleksandr Byelkin
main.udf_query_cache fails with Qcache_hits > 0

Since MDEV-33145 FLUSH STATUS resets only session status, so global
Qcache_hits left by earlier tests on the same server was not reset.
Use FLUSH GLOBAL STATUS.

Assisted-By: Claude Opus 5.5 <[email protected]>
Vladislav Vaintroub
MDEV-38741 Abort the running statement when its client disconnects

The server notices that a client is gone only when it reads from or
writes to the socket. A statement that waits, for example for an InnoDB
row lock, keeps running, and its transaction keeps its locks.

Watch the client socket from the end of login until the connection ends
or the client sends COM_QUIT, with epoll (Linux), kqueue (BSD, macOS),
or on Windows with WSAEventSelect and an I/O completion port, and the
exit of the client process for a named pipe. When the client has gone,
the watcher sets THD::client_gone. If a command that expects an answer
is running, it is aborted with KILL_CONNECTION. If the connection is
idle, the next such command is aborted when it starts. COM_QUIT and
COM_STMT_CLOSE are not aborted, a client can send them and then quit.
The watcher and the connection thread order their accesses with fences,
no lock is taken for a command. The socket is not shut down, the
connection ends after the error is sent, and the reason, "Client
disconnected", is logged once. An idle connection with the disconnect
noted shows that State in the processlist. Galera connections are not
aborted.

The global variable disconnect_watcher, ON by default, can be set OFF,
which also ends the watches that exist. It exists only where there is a
watcher: Linux, Windows, the BSDs and macOS, not the embedded server.

mysqltest dirty_close takes an optional linger or nolinger argument.

New tests: main.disconnect_*, sys_vars.disconnect_watcher_basic and
mysql_client_test test_disconnect_*. Some rpl and innodb tests are
adjusted to pass with the watcher ON and OFF.

Assisted-by: Claude:claude-sonnet-5-5
Oleksandr Byelkin
Merge branch '11.4' into 11.8
Oleksandr Byelkin
Merge branch '11.4' into bb-11.4-release
rusher
[misc] Decode length encoded integers without nested call
Oleksandr Byelkin
Fix wsrep.wsrep_off result after MDEV-35867

Failed REPAIR now reports "Operation failed".

Assisted-By: Claude Opus 5.5 <[email protected]>
Oleksandr Byelkin
Merge branch 'bb-11.4-release' into bb-11.8-release
Oleksandr Byelkin
Merge branch '11.8' into 12.3
Hemant Dangi
MDEV-42091: --prepare must not trust plugin_dir from backup-my.cnf

Issue:
backup-my.cnf is part of the backup/transfer directory and can arrive over
an untrusted channel (e.g. a Galera SST stream). --prepare honored its
plugin_dir value as-is, letting whoever supplied the backup redirect
plugin loading to a directory of their choosing.

Solution:
Pass the joiner's own, locally-resolved --plugin-dir on the --prepare
command line: it wins over whatever backup-my.cnf says, regardless of
content, unless the user already chose one explicitly via
inno-apply-opts, which takes priority as a deliberate local choice.
Resolve it by asking the joiner's own mariadbd, which is config- and
compiled-default-aware, falling back to a plain config lookup if that's
unavailable. Add a regression test driving the real SST joiner script
directly: deliver a backup stream whose backup-my.cnf claims an
attacker-chosen plugin_dir, and confirm that directory is never
referenced.
Oleksandr Byelkin
Merge branch '10.11' into 11.4
Oleksandr Byelkin
Merge branch '10.11' into bb-11.4-release
Sergei Golubchik
MDEV-40530 Bind the client authentication response to the server certificate

MDEV-31855 introduced ssl_info that let the client verify
that it uses the correct certificate. But MitM could hijack the
connection after the authentication - the client will detect it
and disconnect but the server won't and will continue talking
to the attacker. Let's introduce ssl_info_client packet that
enables the server to verify that the client uses the correct
certificate.

When require_secure_transport=ON and the connection isn't local:
* the server sets MARIADB_CLIENT_SSL_INFO_CLIENT in the initial handshake
* the client sets it in the reply, if it understands it
* when both sides have it, the client sends ssl_info_client right
  after the OK packet, acl_authenticate() reads it before the session
  is used (init_connect, audit, etc)
* a connection is rejected unless ssl_info_client is valid, either
  for the server certificate fingerprint or for "CA" (the client
  verified the certificate itself)
* an account without a password hash (plugin has no hash_password()
  or empty password) is rejected unless the account REQUIRE a client
  certificate

Assisted-by: Claude:claude-opus-5-5
Oleksandr Byelkin
fix format
Vladislav Vaintroub
MDEV-38741 Abort the running statement when its client disconnects

The server notices that a client is gone only when it reads from or
writes to the socket. A statement that waits, for example for an InnoDB
row lock, keeps running, and its transaction keeps its locks.

Watch the client socket from the end of login until the connection ends
or the client sends COM_QUIT, with epoll (Linux), kqueue (BSD, macOS),
or on Windows with WSAEventSelect and an I/O completion port, and the
exit of the client process for a named pipe. When the client has gone,
the watcher sets THD::client_gone. If a command that expects an answer
is running, it is aborted with KILL_CONNECTION. If the connection is
idle, the next such command is aborted when it starts. COM_QUIT and
COM_STMT_CLOSE are not aborted, a client can send them and then quit.
The watcher and the connection thread order their accesses with fences,
no lock is taken for a command. The socket is not shut down, the
connection ends after the error is sent, and the reason, "Client
disconnected", is logged once. An idle connection with the disconnect
noted shows that State in the processlist. Galera connections are not
aborted.

The global variable disconnect_watcher, ON by default, can be set OFF,
which also ends the watches that exist. It exists only where there is a
watcher: Linux, Windows, the BSDs and macOS, not the embedded server.

mysqltest dirty_close takes an optional linger or nolinger argument.

New tests: main.disconnect_*, sys_vars.disconnect_watcher_basic and
mysql_client_test test_disconnect_*. Some rpl and innodb tests are
adjusted to pass with the watcher ON and OFF.

Assisted-by: Claude:claude-sonnet-5-5
rusher
Merge branches '3.4-stmt-metadata-copy', '3.4-single-pass-metadata' and '3.4-net-read-fast-path' into 3.4-perf
Oleksandr Byelkin
Merge branch '10.11' into 11.4
Oleksandr Byelkin
Merge branch '11.4' into bb-11.4-release
Vladislav Vaintroub
MDEV-30836 MTR hangs on Windows after warnings in the log at shutdown

Follow-up to the MDEV-30836 fix. With --force, parse_protocol()
returned 1 after a worker reported WARNINGS, so the manager went on
reading from the socket of that worker. The worker sends WARNINGS in
reply to BYE and exits, and does not send anything more.

On Windows Perl, non-blocking reads do not work, so the manager could
block in that read. It then never handled the results of the other
workers, and mtr hung after the last test.

Return 2, as for the other cases where the worker needs no response,
to continue with the next ready socket. The closed socket is handled
later, when it becomes readable.

Assisted-by: Claude:claude-sonnet-5-5
Sergei Golubchik
MDEV-40530 require_secure_transport=CLIENT: the client says it has verified

With require_secure_transport=CLIENT a client without a password hash
must still set MARIADB_CLIENT_SSL_INFO_CLIENT and say that it has
verified the server certificate: ssl_info_client is COM_QUIT and the
version if it has, and COM_QUIT alone if it has not.

This is not a proof, a man in the middle can say it too, but a client
that does not verify the server certificate is rejected and an old
client that does not know ssl_info_client is rejected too.

A client cannot simply abort after the OK packet if it has not
verified the certificate: an account that requires a client
certificate does not need ssl_info_client.

Assisted-by: Claude:claude-opus-5-5
Oleksandr Byelkin
Merge branch 'bb-11.8-merge' into bb-11.8-release
Vladislav Vaintroub
MDEV-30836 MTR hangs on Windows after warnings in the log at shutdown

Follow-up to the MDEV-30836 fix. With --force, parse_protocol()
returned 1 after a worker reported WARNINGS, so the manager went on
reading from the socket of that worker. The worker sends WARNINGS in
reply to BYE and exits, and does not send anything more.

On Windows Perl, non-blocking reads do not work, so the manager could
block in that read. It then never handled the results of the other
workers, and mtr hung after the last test.

Return 2, as for the other cases where the worker needs no response,
to continue with the next ready socket. The closed socket is handled
later, when it becomes readable.

Assisted-by: Claude:claude-sonnet-5-5
Hemant Dangi
MDEV-41158: authenticate the mariabackup SST backup-data stream too

Issue:
The joiner's per-transfer secret was only generated for
ssl-mode=VERIFY_*, and checked only on the small GTID stage: the
backup-data stage itself was accepted unauthenticated, letting any
TCP peer reaching the SST port supply a backup --prepare then runs.

Solution:
Generate the secret unconditionally and require it on the backup-data
stream too, built in lockstep with the existing encrypt/decompress/
progress wrapping so the check can't be silently skipped by it. Add
sst-mariabackup-allow-unauthenticated-donor for rolling upgrades,
failing closed on invalid values; VERIFY_*'s own pre-existing secret
check is unaffected by it. Add a regression test covering the
authenticated pipeline with that wrapping active.
rusher
CONC-874: Parse result set column definitions in a single pass

Column definitions were processed twice: mthd_my_read_rows() copied each
packet into an intermediate MYSQL_DATA row set, then unpack_fields()
copied it again into MYSQL_FIELD with six allocations per column.

Assisted-by: Claude Fable 5.1
Oleksandr Byelkin
MDEV-41238 mysqltest PS_bind sends wrong integers on big-endian

PS_bind bound integers as MYSQL_TYPE_LONG (4 bytes) from a long
(8 bytes) buffer, so big-endian platforms sent the high half (0).
Bind them as MYSQL_TYPE_LONGLONG, and doubles as MYSQL_TYPE_DOUBLE
instead of MYSQL_TYPE_DECIMAL.

Assisted-By: Claude Opus 5.5 <[email protected]>
Oleksandr Byelkin
Merge branch 'bb-11.4-release' into bb-11.8-release
Oleksandr Byelkin
Merge branch '10.11' into bb-11.4-release
Oleksandr Byelkin
Merge branch '11.4' into 11.8
Oleksandr Byelkin
MDEV-40386 DuckDB configure fails in rpm builds

DuckDB's configure checks link with -specs=redhat-package-notes but
without the RPM_* environment, and the linker launcher list was split
into separate cmake arguments. Run DuckDB's cmake under the launcher's
env and pass the launcher with a non-";" list separator.