1
0
mirror of https://github.com/mariadb-corporation/mariadb-connector-c.git synced 2025-08-08 14:02:17 +03:00

Removed decryption stuff from rpl api

This commit is contained in:
Georg Richter
2023-02-12 14:26:02 +01:00
parent 4dca917b7e
commit 87bd5bfc34
8 changed files with 83 additions and 183 deletions

View File

@@ -29,9 +29,6 @@
#include <zlib.h>
#include <ma_decimal.h>
#include <mariadb_rpl.h>
#ifdef HAVE_CRYPTO
#include <cw_crypt.h>
#endif
#ifdef WIN32
@@ -789,17 +786,18 @@ int STDCALL mariadb_rpl_open(MARIADB_RPL *rpl)
} else
{
char *buf[RPL_BINLOG_MAGIC_SIZE];
MYSQL mysql;
if (rpl->fp)
fclose(rpl->fp);
ma_close(rpl->fp);
if (!(rpl->fp= fopen((const char *)rpl->filename, "r")))
if (!(rpl->fp= ma_open((const char *)rpl->filename, "r", &mysql)))
{
rpl_set_error(rpl, CR_FILE_NOT_FOUND, 0, rpl->filename, errno);
return errno;
}
if (fread(buf, 1, RPL_BINLOG_MAGIC_SIZE, rpl->fp) != 4)
if (ma_read(buf, 1, RPL_BINLOG_MAGIC_SIZE, rpl->fp) != 4)
{
rpl_set_error(rpl, CR_FILE_READ, 0, rpl->filename, errno);
return errno;
@@ -961,15 +959,14 @@ MARIADB_RPL_EVENT * STDCALL mariadb_rpl_fetch(MARIADB_RPL *rpl, MARIADB_RPL_EVEN
size_t rc;
uint32_t len= 0;
char *p= buf;
uint32_t start_pos= ftell(rpl->fp);
if (feof(rpl->fp))
if (ma_feof(rpl->fp))
{
return NULL;
}
memset(buf, 0, EVENT_HEADER_OFS);
if ((rc= fread(buf, 1, EVENT_HEADER_OFS - 1, rpl->fp)) != EVENT_HEADER_OFS - 1)
if ((rc= ma_read(buf, 1, EVENT_HEADER_OFS - 1, rpl->fp)) != EVENT_HEADER_OFS - 1)
{
rpl_set_error(rpl, CR_BINLOG_ERROR, 0, "Can't read event header");
mariadb_free_rpl_event(rpl_event);
@@ -987,7 +984,7 @@ MARIADB_RPL_EVENT * STDCALL mariadb_rpl_fetch(MARIADB_RPL *rpl, MARIADB_RPL_EVEN
rpl_event->raw_data_size= len;
memcpy(rpl_event->raw_data, buf, EVENT_HEADER_OFS - 1);
len-= (EVENT_HEADER_OFS - 1);
rc= fread(rpl_event->raw_data + EVENT_HEADER_OFS - 1, 1, len, rpl->fp);
rc= ma_read(rpl_event->raw_data + EVENT_HEADER_OFS - 1, 1, len, rpl->fp);
if (rc != len)
{
rpl_set_error(rpl, CR_BINLOG_ERROR, 0, "Error while reading post header");
@@ -998,38 +995,7 @@ MARIADB_RPL_EVENT * STDCALL mariadb_rpl_fetch(MARIADB_RPL *rpl, MARIADB_RPL_EVEN
/* We don't decrypt yet */
if (rpl->encrypted) {
uchar iv[16];
int rc;
uint32 event_len= uint4korr(ev + 9);
uint32 dlen= event_len;
uchar *dst;
#ifndef HAVE_CRYPTO
return rpl_event;
#endif
/* Application needs to set key after START_ENCRYPTION_EVENT, if not done
we return the encrypted event */
if (!rpl->decryption_key)
return rpl_event;
memcpy(iv, rpl->nonce, 12);
int4store(iv + 12, start_pos);
/* move timestamp */
memcpy(ev + 9, ev, 4);
dst= (uchar *)malloc(event_len);
if ((rc= cw_crypt(CW_AES_CTR, CW_CRYPT_DECRYPT, ev + 4, event_len - 4, dst + 4, &dlen,
(uchar*)rpl->decryption_key, strlen(rpl->decryption_key), iv, 16)))
{
rpl_set_error(rpl, CR_BINLOG_ERROR, 0, RPL_ERR_POS(rpl), "Decryption failed");
free(dst);
return rpl_event;
}
memcpy(dst, dst + 9, 4);
int4store(dst + 9, event_len);
memcpy(ev, dst, event_len);
free(dst);
}
}
@@ -1553,11 +1519,29 @@ MARIADB_RPL_EVENT * STDCALL mariadb_rpl_fetch(MARIADB_RPL *rpl, MARIADB_RPL_EVEN
*/
break;
case ANONYMOUS_GTID_LOG_EVENT:
case PREVIOUS_GTIDS_LOG_EVENT:
{
/*
PREVIOUS_GTID_LOG_EVENT (MySQL only):
8-bytes, always zero ?!
*/
int len= ev_end - ev - rpl->use_checksum * 4;
if (len)
{
rpl_event->event.previous_gtid.content.data= ev;
rpl_event->event.previous_gtid.content.length= len;
ev+= len;
}
break;
}
case ANONYMOUS_GTID_LOG_EVENT:
case GTID_LOG_EVENT:
/*
ANONYMOUS_GTID_LOG_EVENT,
PREVIOUS_GTIDS_LOG_EVENT (MySQL only)
ANONYMOUS_GTID_LOG_EVENT
uint32_t thread_id
Header:
uint8_t flag: commit flag
@@ -1861,12 +1845,9 @@ void STDCALL mariadb_rpl_close(MARIADB_RPL *rpl)
free((void *)rpl->filename);
if (rpl->fp)
{
fclose(rpl->fp);
ma_close(rpl->fp);
}
free(rpl->host);
#ifdef HAVE_CRYPTO
free(rpl->decryption_key);
#endif
free(rpl);
return;
}
@@ -1942,13 +1923,6 @@ int mariadb_rpl_optionsv(MARIADB_RPL *rpl,
rpl->extract_values= (uint8_t)va_arg(ap, uint32_t);
break;
}
#ifdef HAVE_CRYPTO
case MARIADB_RPL_DECRYPTION_KEY:
{
rpl->decryption_key=strdup(va_arg(ap, char *));
break;
}
#endif
default:
rc= -1;
goto end;