mariadb/mysql-test/suite/plugins/r/mdev38431.result
Rophy Tsai 8437643a36 MDEV-38431: fix database pointer calculation for long passwords
When a client connects with CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA
capability and a password >= 251 bytes, the server incorrectly
calculates the database name pointer.

For passwords >= 251 bytes, LENENC uses a 3-byte prefix (0xFC + 2 bytes),
but the old code assumed a 1-byte prefix. Fix by using the passwd pointer
which has already been advanced past the length prefix by
safe_net_field_length_ll().

Also fix db pointer calculation for old protocol (!CLIENT_SECURE_CONNECTION)
where the password is null-terminated and needs +1 to skip the terminator.
2026-01-14 19:34:33 +01:00

35 lines
1.6 KiB
Text

#
# Setup
#
INSTALL PLUGIN IF NOT EXISTS cleartext_plugin_server SONAME '';
Warnings:
Note 1968 Plugin 'cleartext_plugin_server' already installed
CREATE DATABASE mdev38431_db;
#
# Test 1: Short password - baseline test
#
CREATE USER shortuser IDENTIFIED VIA cleartext_plugin_server USING 'secret';
GRANT ALL ON *.* TO shortuser;
db
mdev38431_db
#
# Test 2: Long password 260 bytes (triggers 3-byte LENENC)
# Before fix: ERROR 1044 Access denied to database 'X' (garbage char)
# After fix: Connects to mdev38431_db correctly
#
CREATE USER longuser IDENTIFIED VIA cleartext_plugin_server USING 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
GRANT ALL ON *.* TO longuser;
db
mdev38431_db
#
# Test 3: Even longer password 500 bytes
#
CREATE USER verylonguser IDENTIFIED VIA cleartext_plugin_server USING 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb';
GRANT ALL ON *.* TO verylonguser;
db
mdev38431_db
#
# Cleanup
#
DROP USER shortuser, longuser, verylonguser;
DROP DATABASE mdev38431_db;