Browse Source
MDEV-11663 Create services for functionality used by plugins
MDEV-11663 Create services for functionality used by plugins
Added service for - encryption (AES) - error reporting, e.g my_printf_error()pull/333/merge
committed by
Sergei Golubchik
33 changed files with 537 additions and 144 deletions
-
71include/my_crypt.h
-
23include/my_sys.h
-
2include/mysql/plugin.h
-
37include/mysql/plugin_audit.h.pp
-
37include/mysql/plugin_auth.h.pp
-
37include/mysql/plugin_encryption.h.pp
-
37include/mysql/plugin_ftparser.h.pp
-
37include/mysql/plugin_password_validation.h.pp
-
120include/mysql/service_my_crypt.h
-
64include/mysql/service_my_print_error.h
-
2include/mysql/services.h
-
2include/service_versions.h
-
4libservices/CMakeLists.txt
-
2libservices/my_crypt_service.c
-
17libservices/my_print_error_service.c
-
2mysql-test/r/handlersocket.result
-
6mysql-test/r/plugin.result
-
2mysql-test/suite/plugins/r/auth_ed25519.result
-
2mysql-test/suite/plugins/r/cracklib_password_check.result
-
4mysql-test/suite/plugins/r/show_all_plugins.result
-
2mysql-test/suite/plugins/r/simple_password_check.result
-
26mysys_ssl/my_crypt.cc
-
17plugin/auth_gssapi/gssapi_server.cc
-
4plugin/auth_gssapi/sspi_server.cc
-
22plugin/aws_key_management/aws_key_management_plugin.cc
-
24plugin/example_key_management/example_key_management_plugin.cc
-
26plugin/file_key_management/file_key_management_plugin.cc
-
12plugin/file_key_management/parser.cc
-
1sql/innodb_priv.h
-
26sql/sql_plugin_services.ic
-
4sql/unireg.h
-
4storage/innobase/log/log0crypt.cc
-
5storage/xtradb/log/log0crypt.cc
@ -0,0 +1,120 @@ |
|||
#ifndef MYSQL_SERVICE_MY_CRYPT_INCLUDED |
|||
#define MYSQL_SERVICE_MY_CRYPT_INCLUDED |
|||
|
|||
/* |
|||
Copyright (c) 2014 Google Inc. |
|||
Copyright (c) 2014, 2015 MariaDB Corporation |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; version 2 of the License. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ |
|||
|
|||
/** |
|||
@file |
|||
my crypt service |
|||
|
|||
AES encryption functions, and a function to generate random bytes. |
|||
|
|||
Include my_config.h before this file to use CTR and GCM modes |
|||
(they only work if server was compiled with openssl). |
|||
*/ |
|||
|
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/* return values from my_aes_encrypt/my_aes_decrypt functions */ |
|||
#define MY_AES_OK 0 |
|||
#define MY_AES_BAD_DATA -100 |
|||
#define MY_AES_OPENSSL_ERROR -101 |
|||
#define MY_AES_BAD_KEYSIZE -102 |
|||
|
|||
/* The block size for all supported algorithms */ |
|||
#define MY_AES_BLOCK_SIZE 16 |
|||
|
|||
/* The max key length of all supported algorithms */ |
|||
#define MY_AES_MAX_KEY_LENGTH 32 |
|||
|
|||
#define MY_AES_CTX_SIZE 512 |
|||
|
|||
enum my_aes_mode { |
|||
MY_AES_ECB, MY_AES_CBC |
|||
#ifdef HAVE_EncryptAes128Ctr |
|||
, MY_AES_CTR |
|||
#endif |
|||
#ifdef HAVE_EncryptAes128Gcm |
|||
, MY_AES_GCM |
|||
#endif |
|||
}; |
|||
|
|||
extern struct my_crypt_service_st { |
|||
int (*my_aes_crypt_init)(void *ctx, enum my_aes_mode mode, int flags, |
|||
const unsigned char* key, unsigned int klen, |
|||
const unsigned char* iv, unsigned int ivlen); |
|||
int (*my_aes_crypt_update)(void *ctx, const unsigned char *src, unsigned int slen, |
|||
unsigned char *dst, unsigned int *dlen); |
|||
int (*my_aes_crypt_finish)(void *ctx, unsigned char *dst, unsigned int *dlen); |
|||
int (*my_aes_crypt)(enum my_aes_mode mode, int flags, |
|||
const unsigned char *src, unsigned int slen, unsigned char *dst, unsigned int *dlen, |
|||
const unsigned char *key, unsigned int klen, const unsigned char *iv, unsigned int ivlen); |
|||
unsigned int (*my_aes_get_size)(enum my_aes_mode mode, unsigned int source_length); |
|||
unsigned int (*my_aes_ctx_size)(enum my_aes_mode mode); |
|||
int (*my_random_bytes)(unsigned char* buf, int num); |
|||
} *my_crypt_service; |
|||
|
|||
#ifdef MYSQL_DYNAMIC_PLUGIN |
|||
|
|||
#define my_aes_crypt_init(A,B,C,D,E,F,G) \ |
|||
my_crypt_service->my_aes_crypt_init(A,B,C,D,E,F,G) |
|||
|
|||
#define my_aes_crypt_update(A,B,C,D,E) \ |
|||
my_crypt_service->my_aes_crypt_update(A,B,C,D,E) |
|||
|
|||
#define my_aes_crypt_finish(A,B,C) \ |
|||
my_crypt_service->my_aes_crypt_finish(A,B,C) |
|||
|
|||
#define my_aes_crypt(A,B,C,D,E,F,G,H,I,J) \ |
|||
my_crypt_service->my_aes_crypt(A,B,C,D,E,F,G,H,I,J) |
|||
|
|||
#define my_aes_get_size(A,B)\ |
|||
my_crypt_service->my_aes_get_size(A,B) |
|||
|
|||
#define my_aes_ctx_size(A)\ |
|||
my_crypt_service->my_aes_ctx_size(A) |
|||
|
|||
#define my_random_bytes(A,B)\ |
|||
my_crypt_service->my_random_bytes(A,B) |
|||
|
|||
#else |
|||
|
|||
int my_aes_crypt_init(void *ctx, enum my_aes_mode mode, int flags, |
|||
const unsigned char* key, unsigned int klen, |
|||
const unsigned char* iv, unsigned int ivlen); |
|||
int my_aes_crypt_update(void *ctx, const unsigned char *src, unsigned int slen, |
|||
unsigned char *dst, unsigned int *dlen); |
|||
int my_aes_crypt_finish(void *ctx, unsigned char *dst, unsigned int *dlen); |
|||
int my_aes_crypt(enum my_aes_mode mode, int flags, |
|||
const unsigned char *src, unsigned int slen, unsigned char *dst, unsigned int *dlen, |
|||
const unsigned char *key, unsigned int klen, const unsigned char *iv, unsigned int ivlen); |
|||
|
|||
int my_random_bytes(unsigned char* buf, int num); |
|||
unsigned int my_aes_get_size(enum my_aes_mode mode, unsigned int source_length); |
|||
unsigned int my_aes_ctx_size(enum my_aes_mode mode); |
|||
#endif |
|||
|
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif /* MYSQL_SERVICE_MY_CRYPT_INCLUDED */ |
@ -0,0 +1,64 @@ |
|||
/* Copyright (c) 2016, MariaDB |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; version 2 of the License. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ |
|||
|
|||
#ifndef MYSQL_SERVICE_MY_PRINT_ERROR_INCLUDED |
|||
#define MYSQL_SERVICE_MY_PRINT_ERROR_INCLUDED |
|||
|
|||
/** |
|||
@file include/mysql/service_my_print_error.h |
|||
|
|||
This service provides functions for plugins to report |
|||
errors to client (without client, the errors are written to the error log). |
|||
|
|||
*/ |
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
#ifndef MYSQL_ABI_CHECK |
|||
#include <stdarg.h> |
|||
#include <stdlib.h> |
|||
#endif |
|||
|
|||
#define ME_ERROR_LOG 64 /* Write the message to the error log */ |
|||
#define ME_NOTE 1024 /* Not an error, just a note */ |
|||
#define ME_WARNING 2048 /* Not an error, just a warning */ |
|||
#define ME_FATAL 4096 /* Fatal statement error */ |
|||
|
|||
extern struct my_print_error_service_st { |
|||
void (*my_error_func)(unsigned int nr, unsigned long MyFlags, ...); |
|||
void (*my_printf_error_func)(unsigned int nr, const char *fmt, unsigned long MyFlags,...); |
|||
void (*my_printv_error_func)(unsigned int error, const char *format, unsigned long MyFlags, va_list ap); |
|||
} *my_print_error_service; |
|||
|
|||
#ifdef MYSQL_DYNAMIC_PLUGIN |
|||
|
|||
#define my_error my_print_error_service->my_error_func |
|||
#define my_printf_error my_print_error_service->my_printf_error_func |
|||
#define my_printv_error(A,B,C,D) my_print_error_service->my_printv_error_func(A,B,C,D) |
|||
|
|||
#else |
|||
|
|||
extern void my_error(unsigned int nr, unsigned long MyFlags, ...); |
|||
extern void my_printf_error(unsigned int my_err, const char *format, unsigned long MyFlags, ...); |
|||
extern void my_printv_error(unsigned int error, const char *format, unsigned long MyFlags,va_list ap); |
|||
#endif |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif |
|||
|
@ -0,0 +1,2 @@ |
|||
#include <service_versions.h> |
|||
SERVICE_VERSION my_crypt_service= (void*)VERSION_my_crypt; |
@ -0,0 +1,17 @@ |
|||
/* Copyright (c) 2016 MariaDB |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; version 2 of the License. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ |
|||
|
|||
#include <service_versions.h> |
|||
SERVICE_VERSION my_print_error_service= (void*)VERSION_my_print_error; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue