diff options
-rw-r--r-- | include/mysql/plugin.h | 2 | ||||
-rw-r--r-- | include/mysql/plugin_audit.h.pp | 7 | ||||
-rw-r--r-- | include/mysql/plugin_auth.h.pp | 7 | ||||
-rw-r--r-- | include/mysql/plugin_ftparser.h.pp | 7 | ||||
-rw-r--r-- | include/mysql/service_sha1.h | 57 | ||||
-rw-r--r-- | include/mysql/services.h | 1 | ||||
-rw-r--r-- | include/service_versions.h | 6 | ||||
-rw-r--r-- | include/sha1.h | 15 | ||||
-rw-r--r-- | libservices/CMakeLists.txt | 1 | ||||
-rw-r--r-- | libservices/HOWTO | 2 | ||||
-rw-r--r-- | libservices/my_sha1_service.c | 18 | ||||
-rw-r--r-- | mysys_ssl/my_sha1.cc | 30 | ||||
-rw-r--r-- | sql/sql_plugin_services.h | 8 |
13 files changed, 136 insertions, 25 deletions
diff --git a/include/mysql/plugin.h b/include/mysql/plugin.h index 4220e73ee11..6a3f8b5dd89 100644 --- a/include/mysql/plugin.h +++ b/include/mysql/plugin.h @@ -74,7 +74,7 @@ typedef struct st_mysql_xid MYSQL_XID; #define MYSQL_PLUGIN_INTERFACE_VERSION 0x0104 /* MariaDB plugin interface version */ -#define MARIA_PLUGIN_INTERFACE_VERSION 0x0105 +#define MARIA_PLUGIN_INTERFACE_VERSION 0x0106 /* The allowable types of plugins diff --git a/include/mysql/plugin_audit.h.pp b/include/mysql/plugin_audit.h.pp index c3ba7eec0d6..13ebf66c5c3 100644 --- a/include/mysql/plugin_audit.h.pp +++ b/include/mysql/plugin_audit.h.pp @@ -93,6 +93,13 @@ extern struct kill_statement_service_st { enum thd_kill_levels (*thd_kill_level_func)(const void*); } *thd_kill_statement_service; enum thd_kill_levels thd_kill_level(const void*); +#include <mysql/service_sha1.h> +extern struct my_sha1_service_st { + void (*my_sha1_type)(unsigned char*, const char*, size_t); + void (*my_sha1_multi_type)(unsigned char*, ...); +} *my_sha1_service; +void my_sha1(unsigned char*, const char*, size_t); +void my_sha1_multi(unsigned char*, ...); struct st_mysql_xid { long formatID; long gtrid_length; diff --git a/include/mysql/plugin_auth.h.pp b/include/mysql/plugin_auth.h.pp index 4f04d51cb52..25c56284ca2 100644 --- a/include/mysql/plugin_auth.h.pp +++ b/include/mysql/plugin_auth.h.pp @@ -93,6 +93,13 @@ extern struct kill_statement_service_st { enum thd_kill_levels (*thd_kill_level_func)(const void*); } *thd_kill_statement_service; enum thd_kill_levels thd_kill_level(const void*); +#include <mysql/service_sha1.h> +extern struct my_sha1_service_st { + void (*my_sha1_type)(unsigned char*, const char*, size_t); + void (*my_sha1_multi_type)(unsigned char*, ...); +} *my_sha1_service; +void my_sha1(unsigned char*, const char*, size_t); +void my_sha1_multi(unsigned char*, ...); struct st_mysql_xid { long formatID; long gtrid_length; diff --git a/include/mysql/plugin_ftparser.h.pp b/include/mysql/plugin_ftparser.h.pp index 3a978645c24..74fddcbc5cf 100644 --- a/include/mysql/plugin_ftparser.h.pp +++ b/include/mysql/plugin_ftparser.h.pp @@ -93,6 +93,13 @@ extern struct kill_statement_service_st { enum thd_kill_levels (*thd_kill_level_func)(const void*); } *thd_kill_statement_service; enum thd_kill_levels thd_kill_level(const void*); +#include <mysql/service_sha1.h> +extern struct my_sha1_service_st { + void (*my_sha1_type)(unsigned char*, const char*, size_t); + void (*my_sha1_multi_type)(unsigned char*, ...); +} *my_sha1_service; +void my_sha1(unsigned char*, const char*, size_t); +void my_sha1_multi(unsigned char*, ...); struct st_mysql_xid { long formatID; long gtrid_length; diff --git a/include/mysql/service_sha1.h b/include/mysql/service_sha1.h new file mode 100644 index 00000000000..01f5ba81566 --- /dev/null +++ b/include/mysql/service_sha1.h @@ -0,0 +1,57 @@ +#ifndef MYSQL_SERVICE_SHA1_INCLUDED +/* Copyright (c) 2013, Monty Program Ab + + 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 sha1 service + + Functions to calculate SHA1 hash from a memory buffer +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef MYSQL_ABI_CHECK +#include <stdlib.h> +#endif + +#define MY_SHA1_HASH_SIZE 20 /* Hash size in bytes */ + +extern struct my_sha1_service_st { + void (*my_sha1_type)(unsigned char*, const char*, size_t); + void (*my_sha1_multi_type)(unsigned char*, ...); +} *my_sha1_service; + +#ifdef MYSQL_DYNAMIC_PLUGIN + +#define my_sha1(A,B,C) my_sha1_service->my_sha1_type(A,B,C) +#define my_sha1_multi my_sha1_service->my_sha1_multi_type + +#else + +void my_sha1(unsigned char*, const char*, size_t); +void my_sha1_multi(unsigned char*, ...); + +#endif + +#ifdef __cplusplus +} +#endif + +#define MYSQL_SERVICE_SHA1_INCLUDED +#endif + diff --git a/include/mysql/services.h b/include/mysql/services.h index b5b331d4923..56706b356ab 100644 --- a/include/mysql/services.h +++ b/include/mysql/services.h @@ -25,6 +25,7 @@ extern "C" { #include <mysql/service_progress_report.h> #include <mysql/service_debug_sync.h> #include <mysql/service_kill_statement.h> +#include <mysql/service_sha1.h> #ifdef __cplusplus } diff --git a/include/service_versions.h b/include/service_versions.h index 9b41da7440e..35b67bb2ed9 100644 --- a/include/service_versions.h +++ b/include/service_versions.h @@ -19,11 +19,13 @@ #define SERVICE_VERSION void * #endif +#define VERSION_debug_sync 0x1000 +#define VERSION_kill_statement 0x1000 + #define VERSION_my_snprintf 0x0100 #define VERSION_thd_alloc 0x0100 #define VERSION_thd_wait 0x0100 #define VERSION_my_thread_scheduler 0x0100 #define VERSION_progress_report 0x0100 -#define VERSION_debug_sync 0x1000 -#define VERSION_kill_statement 0x1000 +#define VERSION_my_sha1 0x0100 diff --git a/include/sha1.h b/include/sha1.h index b20cc8f5026..d927cd26ad9 100644 --- a/include/sha1.h +++ b/include/sha1.h @@ -1,8 +1,7 @@ #ifndef SHA1_INCLUDED #define SHA1_INCLUDED -/* Copyright (c) 2002, 2006 MySQL AB, 2009 Sun Microsystems, Inc. - Use is subject to license terms. +/* Copyright (c) 2013, Monty Program Ab 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 @@ -18,13 +17,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#define SHA1_HASH_SIZE 20 /* Hash size in bytes */ - -C_MODE_START - -void compute_sha1_hash(uint8 *digest, const char *buf, int len); -void compute_sha1_hash_multi(uint8 *digest, const char *buf1, int len1, - const char *buf2, int len2); -C_MODE_END +#include <mysql/service_sha1.h> +#define SHA1_HASH_SIZE MY_SHA1_HASH_SIZE +#define compute_sha1_hash(A,B,C) my_sha1(A,B,C) +#define compute_sha1_hash_multi(A,B,C,D,E) my_sha1_multi(A,B,C,D,E,NULL) #endif /* SHA__INCLUDED */ diff --git a/libservices/CMakeLists.txt b/libservices/CMakeLists.txt index 1583d1ff792..3ffd72aea96 100644 --- a/libservices/CMakeLists.txt +++ b/libservices/CMakeLists.txt @@ -22,6 +22,7 @@ SET(MYSQLSERVICES_SOURCES my_thread_scheduler_service.c progress_report_service.c debug_sync_service.c + my_sha1_service.c kill_statement_service.c) ADD_CONVENIENCE_LIBRARY(mysqlservices ${MYSQLSERVICES_SOURCES}) diff --git a/libservices/HOWTO b/libservices/HOWTO index 7dcfb6d9583..512cdb43c99 100644 --- a/libservices/HOWTO +++ b/libservices/HOWTO @@ -76,7 +76,7 @@ it should also declare all the accompanying data structures, as necessary ================================================================== /* GPL header */ #include <service_versions.h> - SERVICE_VERSION *foo_service= (void*)VERSION_foo; + SERVICE_VERSION foo_service= (void*)VERSION_foo; ================================================================== 7. add the new file to libservices/CMakeLists.txt (MYSQLSERVICES_SOURCES) diff --git a/libservices/my_sha1_service.c b/libservices/my_sha1_service.c new file mode 100644 index 00000000000..196c1939082 --- /dev/null +++ b/libservices/my_sha1_service.c @@ -0,0 +1,18 @@ +/* Copyright (c) 2013 Monty Program Ab + Use is subject to license terms. + + 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_sha1_service= (void*)VERSION_my_sha1; diff --git a/mysys_ssl/my_sha1.cc b/mysys_ssl/my_sha1.cc index 1c4bf7c9747..fc8f88856bb 100644 --- a/mysys_ssl/my_sha1.cc +++ b/mysys_ssl/my_sha1.cc @@ -24,6 +24,7 @@ #include <my_global.h> #include <sha1.h> +#include <stdarg.h> #if defined(HAVE_YASSL) #include "sha.hpp" @@ -56,12 +57,15 @@ void mysql_sha1_yassl(uint8 *digest, const char *buf, int len) @return void */ -void mysql_sha1_multi_yassl(uint8 *digest, const char *buf1, int len1, - const char *buf2, int len2) +void mysql_sha1_multi_yassl(uint8 *digest, va_list args) { + const char *str; TaoCrypt::SHA hasher; - hasher.Update((const TaoCrypt::byte *) buf1, len1); - hasher.Update((const TaoCrypt::byte *) buf2, len2); + + for (str= va_arg(args, const char*); str; str= va_arg(args, const char*)) + { + hasher.Update((const TaoCrypt::byte *) str, va_arg(args, size_t)); + } hasher.Final((TaoCrypt::byte *) digest); } @@ -98,7 +102,7 @@ int mysql_sha1_result(SHA_CTX *context, @return void */ -void compute_sha1_hash(uint8 *digest, const char *buf, int len) +void my_sha1(uint8 *digest, const char *buf, size_t len) { #if defined(HAVE_YASSL) mysql_sha1_yassl(digest, buf, len); @@ -124,18 +128,24 @@ void compute_sha1_hash(uint8 *digest, const char *buf, int len) @return void */ -void compute_sha1_hash_multi(uint8 *digest, const char *buf1, int len1, - const char *buf2, int len2) +void my_sha1_multi(uint8 *digest, ...) { + va_list args; + va_start(args, digest); + #if defined(HAVE_YASSL) - mysql_sha1_multi_yassl(digest, buf1, len1, buf2, len2); + mysql_sha1_multi_yassl(digest, args); #elif defined(HAVE_OPENSSL) SHA_CTX sha1_context; + const char *str; mysql_sha1_reset(&sha1_context); - mysql_sha1_input(&sha1_context, (const uint8 *) buf1, len1); - mysql_sha1_input(&sha1_context, (const uint8 *) buf2, len2); + for (str= va_arg(args, const char*); str; str= va_arg(args, const char*)) + { + mysql_sha1_input(&sha1_context, (const uint8 *) str, va_arg(args, size_t)); + } mysql_sha1_result(&sha1_context, digest); #endif /* HAVE_YASSL */ + va_end(args); } diff --git a/sql/sql_plugin_services.h b/sql/sql_plugin_services.h index e3ef338eaad..b9d54d25c8a 100644 --- a/sql/sql_plugin_services.h +++ b/sql/sql_plugin_services.h @@ -58,6 +58,11 @@ static struct kill_statement_service_st thd_kill_statement_handler= { thd_kill_level }; +static struct my_sha1_service_st my_sha1_handler = { + my_sha1, + my_sha1_multi +}; + static struct st_service_ref list_of_services[]= { { "my_snprintf_service", VERSION_my_snprintf, &my_snprintf_handler }, @@ -66,6 +71,7 @@ static struct st_service_ref list_of_services[]= { "my_thread_scheduler_service", VERSION_my_thread_scheduler, &my_thread_scheduler_handler }, { "progress_report_service", VERSION_progress_report, &progress_report_handler }, { "debug_sync_service", VERSION_debug_sync, 0 }, // updated in plugin_init() - { "thd_kill_statement_service", VERSION_kill_statement, &thd_kill_statement_handler } + { "thd_kill_statement_service", VERSION_kill_statement, &thd_kill_statement_handler }, + { "my_sha1_service", VERSION_my_sha1, &my_sha1_handler} }; |