mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
BUG#11879051: FIRST REPLY LENGTH LIMIT (255) CAN BE VIOLATED
BEFORE: First packet sent by client-side plugin (generated by Windows function InitializeSecurityContext()) could be longer than 255 bytes violating the limitation imposed by authentication protocol. AFTER: Handshake protocol is changed so that if first client's reply is longer than 254 bytes then it is be sent in 2 parts. However, for replies shorter than 255 bytes nothing changes. ADDITIONAL CHANGES: - The generic packet processing loop (Handshake::packet_processing_loop) has been refactored. Communication with the peer has been abstracted into virtual methods read/write_packet() which are implemented in client and server and transparently do the required splitting and gluing of packets. - Make it possible to optionally use dbug library in the plugin. - Add code for testing splitting of long first client reply.
This commit is contained in:
@ -100,7 +100,7 @@ public:
|
||||
Handshake(const char *ssp, side_t side);
|
||||
virtual ~Handshake();
|
||||
|
||||
int Handshake::packet_processing_loop(Connection &con);
|
||||
int Handshake::packet_processing_loop();
|
||||
|
||||
bool virtual is_complete() const
|
||||
{
|
||||
@ -126,6 +126,13 @@ protected:
|
||||
/// Stores attributes of the created security context.
|
||||
ULONG m_atts;
|
||||
|
||||
/**
|
||||
Round of the handshake (starting from round 1). One round
|
||||
consist of reading packet from the other side, processing it and
|
||||
optionally sending a reply (see @c packet_processing_loop()).
|
||||
*/
|
||||
unsigned int m_round;
|
||||
|
||||
/// If non-zero, stores error code of the last failed operation.
|
||||
int m_error;
|
||||
|
||||
@ -152,7 +159,13 @@ protected:
|
||||
@return A blob with data to be sent to the other end or null blob if
|
||||
no more data needs to be exchanged.
|
||||
*/
|
||||
virtual Blob process_data(const Blob &data)= 0;
|
||||
virtual Blob process_data(const Blob &data) =0;
|
||||
|
||||
/// Read packet from the other end.
|
||||
virtual Blob read_packet() =0;
|
||||
|
||||
/// Write packet to the other end.
|
||||
virtual int write_packet(Blob &data) =0;
|
||||
|
||||
#ifndef DBUG_OFF
|
||||
|
||||
|
Reference in New Issue
Block a user