maxbinlogcheck detects START_ENCRYPTION_EVENT
maxbinlogcheck now detects the START_ENCRYPTION_EVENT found in MariaDB binlog file and in the maxscale binlog
This commit is contained in:
@ -1128,6 +1128,7 @@ blr_read_events_all_events(ROUTER_INSTANCE *router, int fix, int debug)
|
|||||||
BINLOG_EVENT_DESC last_event;
|
BINLOG_EVENT_DESC last_event;
|
||||||
BINLOG_EVENT_DESC fde_event;
|
BINLOG_EVENT_DESC fde_event;
|
||||||
int fde_seen = 0;
|
int fde_seen = 0;
|
||||||
|
int start_encryption_seen = 0;
|
||||||
|
|
||||||
memset(&first_event, '\0', sizeof(first_event));
|
memset(&first_event, '\0', sizeof(first_event));
|
||||||
memset(&last_event, '\0', sizeof(last_event));
|
memset(&last_event, '\0', sizeof(last_event));
|
||||||
@ -1491,8 +1492,6 @@ blr_read_events_all_events(ROUTER_INSTANCE *router, int fix, int debug)
|
|||||||
if (hdr.event_type == FORMAT_DESCRIPTION_EVENT)
|
if (hdr.event_type == FORMAT_DESCRIPTION_EVENT)
|
||||||
{
|
{
|
||||||
int event_header_length;
|
int event_header_length;
|
||||||
int fde_extra_bytes = 0;
|
|
||||||
int n_events;
|
|
||||||
int check_alg;
|
int check_alg;
|
||||||
uint8_t *checksum;
|
uint8_t *checksum;
|
||||||
char buf_t[40];
|
char buf_t[40];
|
||||||
@ -1535,10 +1534,10 @@ blr_read_events_all_events(ROUTER_INSTANCE *router, int fix, int debug)
|
|||||||
/* The number of supported events formula:
|
/* The number of supported events formula:
|
||||||
* number_of_events = event_size - (event_header_len + BLRM_FDE_EVENT_TYPES_OFFSET)
|
* number_of_events = event_size - (event_header_len + BLRM_FDE_EVENT_TYPES_OFFSET)
|
||||||
*/
|
*/
|
||||||
n_events = hdr.event_size - event_header_length - BLRM_FDE_EVENT_TYPES_OFFSET;
|
int n_events = hdr.event_size - event_header_length - BLRM_FDE_EVENT_TYPES_OFFSET;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The FDE event also carries 5 additional bytes number of events:
|
* The FDE event also carries 5 additional bytes:
|
||||||
*
|
*
|
||||||
* 1 byte is the checksum_alg_type and 4 bytes are the computed crc32
|
* 1 byte is the checksum_alg_type and 4 bytes are the computed crc32
|
||||||
*
|
*
|
||||||
@ -1547,20 +1546,10 @@ blr_read_events_all_events(ROUTER_INSTANCE *router, int fix, int debug)
|
|||||||
*
|
*
|
||||||
* In case of CRC32 algo_type the 4 bytes contain the event crc32.
|
* In case of CRC32 algo_type the 4 bytes contain the event crc32.
|
||||||
*/
|
*/
|
||||||
fde_extra_bytes = BINLOG_EVENT_CRC_ALGO_TYPE + BINLOG_EVENT_CRC_SIZE;
|
int fde_extra_bytes = BINLOG_EVENT_CRC_ALGO_TYPE + BINLOG_EVENT_CRC_SIZE;
|
||||||
|
|
||||||
/* Now remove from number of events the extra 5 bytes */
|
/* Now remove from the calculated number of events the extra 5 bytes */
|
||||||
|
n_events -= fde_extra_bytes;
|
||||||
/* mariadb 10 LOG_EVENT_TYPES >= 160 */
|
|
||||||
if ( n_events >= 160 + 5)
|
|
||||||
{
|
|
||||||
n_events -= fde_extra_bytes;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* mysql 5.6 LOG_EVENT_TYPES is 35 */
|
|
||||||
n_events -= fde_extra_bytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
@ -1593,6 +1582,53 @@ blr_read_events_all_events(ROUTER_INSTANCE *router, int fix, int debug)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Detect possible Start Encryption Event */
|
||||||
|
if (hdr.event_type == MARIADB10_START_ENCRYPTION_EVENT)
|
||||||
|
{
|
||||||
|
START_ENCRYPTION_EVENT ste_event;
|
||||||
|
memset(&ste_event, '\0', sizeof(START_ENCRYPTION_EVENT));
|
||||||
|
char nonce_hex[12 * 2 + 1] = "";
|
||||||
|
/* The start encryption event data is 17 bytes long:
|
||||||
|
* Scheme = 1
|
||||||
|
* Key Version: 4
|
||||||
|
* nonce = 12
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Fill the event content, after the event header */
|
||||||
|
ste_event.binlog_crypto_scheme = ptr[0];
|
||||||
|
ste_event.binlog_key_version = extract_field(ptr + 1, 32);
|
||||||
|
memcpy(ste_event.nonce, ptr + 1 + 4, BLRM_NONCE_LENGTH);
|
||||||
|
|
||||||
|
gw_bin2hex(nonce_hex, ste_event.nonce, BLRM_NONCE_LENGTH);
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
char *cksum_format = ", crc32 0x";
|
||||||
|
char hex_checksum[BINLOG_EVENT_CRC_SIZE * 2 + strlen(cksum_format) + 1];
|
||||||
|
uint8_t cksum_data[BINLOG_EVENT_CRC_SIZE];
|
||||||
|
cksum_data[3] = *(ptr + hdr.event_size - 4 - BINLOG_EVENT_HDR_LEN);
|
||||||
|
cksum_data[2] = *(ptr + hdr.event_size - 3 - BINLOG_EVENT_HDR_LEN);
|
||||||
|
cksum_data[1] = *(ptr + hdr.event_size - 2 - BINLOG_EVENT_HDR_LEN);
|
||||||
|
cksum_data[0] = *(ptr + hdr.event_size - 1 - BINLOG_EVENT_HDR_LEN);
|
||||||
|
|
||||||
|
if (found_chksum)
|
||||||
|
{
|
||||||
|
strcpy(hex_checksum, cksum_format);
|
||||||
|
gw_bin2hex(hex_checksum + strlen(cksum_format) , cksum_data, BINLOG_EVENT_CRC_SIZE);
|
||||||
|
}
|
||||||
|
|
||||||
|
MXS_DEBUG("- START_ENCRYPTION event @ %llu, size %lu, next pos is @ %lu, flags %u%s",
|
||||||
|
pos, (unsigned long)hdr.event_size, (unsigned long)hdr.next_pos, hdr.flags,
|
||||||
|
hex_checksum);
|
||||||
|
|
||||||
|
MXS_DEBUG(" Encryption scheme: %u, key_version: %u,"
|
||||||
|
" nonce: %s\n", ste_event.binlog_crypto_scheme,
|
||||||
|
ste_event.binlog_key_version, nonce_hex);
|
||||||
|
}
|
||||||
|
|
||||||
|
start_encryption_seen = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* set last event time, pos and type */
|
/* set last event time, pos and type */
|
||||||
last_event.event_time = (unsigned long)hdr.timestamp;
|
last_event.event_time = (unsigned long)hdr.timestamp;
|
||||||
last_event.event_type = hdr.event_type;
|
last_event.event_type = hdr.event_type;
|
||||||
|
|||||||
Reference in New Issue
Block a user