summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormonty@mysql.com <>2006-06-06 14:21:07 +0300
committermonty@mysql.com <>2006-06-06 14:21:07 +0300
commite50412ef38a722271b6d12be14ff517bf3310162 (patch)
tree10d58a84e96191fe4c020883fcbc2e19b98adbf3
parent63ed470566120e80b43ec2a82be49a4e2db96a7b (diff)
downloadmariadb-git-e50412ef38a722271b6d12be14ff517bf3310162.tar.gz
Re-apply missing changeset, orignally pushed by elliot
Add define YASSL_PREFIX when compiling yassl Import patch from yaSSL - avoid allocating memory for each call to 'EVP_md5' and 'EVP_des_ede3_cbc' which were not released until server was stopped - Those functions are used from the SQL function 'des_encrypt' and 'des_decrypt'. Add new define YASSL_PREFIX beforee including ssl.h to activate inclusion of prefix_*.h files Bug#20022 mysql-test-run can't be run with secure connections turned on for all testcases - Part 1, fixes rpl- and federated-tests where connection is made to 127.0.0.1 - Include prefix files that renames all public functions in yaSSLs OpenSSL API to ya<function_name>. They will otherwise conflict with OpenSSL functions if loaded by an application that uses OpenSSL as well as libmysqlclient with yaSSL support. Bug#18235: assertion/crash when windows mysqld is ended with ctrl-c Two threads both try a shutdown sequence which creates a race to the de-init/free of certain resources. This exists in similar form in the client as 17926: "mysql.exe crashes when ctrl-c is pressed in windows." Update after merge to 5.0 BUG#18669: Session COM_STATISTICS breaks mysqladmin status. Changed COM_STATISTICS to display the global status, instead of thead status, for slow queries and table opens. - In function 'handle_grant_struct' when searching the memory structures for an entry to modify, convert all entries here host.hostname is NULL to "" and compare that with the host passed in argument "user_from". - A user created with hostname "" is stored in "mysql.user" table as host="" but when loaded into memory it'll be stored as host.hostname NULL. Specifiying "" as hostname means that "any host" can connect. Thus is's correct to turn on allow_all_hosts when such a user is found. - Review and fix other places where host.hostname may be NULL. BUG#19394 OPT_INNODB_THREAD_CONCURRENCY duplicated Removed duplication (not a user-visible change)
-rw-r--r--client/Makefile.am2
-rw-r--r--client/mysqltest.c3
-rw-r--r--extra/yassl/include/openssl/crypto.h4
-rw-r--r--extra/yassl/include/openssl/generate_prefix_files.pl45
-rw-r--r--extra/yassl/include/openssl/prefix_crypto.h1
-rw-r--r--extra/yassl/include/openssl/prefix_ssl.h152
-rw-r--r--extra/yassl/include/openssl/ssl.h10
-rw-r--r--extra/yassl/include/yassl_int.hpp19
-rw-r--r--extra/yassl/src/Makefile.am2
-rw-r--r--extra/yassl/src/ssl.cpp33
-rw-r--r--extra/yassl/src/template_instnt.cpp1
-rw-r--r--extra/yassl/src/yassl_int.cpp34
-rw-r--r--extra/yassl/testsuite/Makefile.am2
-rwxr-xr-xextra/yassl/yassl.vcproj4
-rw-r--r--include/violite.h1
-rw-r--r--libmysql/Makefile.am2
-rw-r--r--libmysql_r/Makefile.am2
-rw-r--r--libmysqld/Makefile.am2
-rw-r--r--libmysqld/examples/Makefile.am2
-rw-r--r--mysql-test/r/analyze.result1
-rw-r--r--mysql-test/r/grant.result213
-rw-r--r--mysql-test/r/ps.result1
-rw-r--r--mysql-test/t/analyze.test1
-rw-r--r--mysql-test/t/grant.test144
-rw-r--r--mysql-test/t/ps.test2
-rw-r--r--server-tools/instance-manager/Makefile.am2
-rw-r--r--sql/Makefile.am2
-rw-r--r--sql/mysqld.cc9
-rw-r--r--sql/sql_acl.cc118
-rw-r--r--sql/sql_parse.cc9
-rw-r--r--vio/Makefile.am2
31 files changed, 680 insertions, 145 deletions
diff --git a/client/Makefile.am b/client/Makefile.am
index be2888367a6..4d8d95d19ed 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -32,7 +32,7 @@ endif
INCLUDES = -I$(top_builddir)/include \
-I$(top_srcdir)/include \
-I$(top_srcdir)/regex \
- $(openssl_includes) $(yassl_includes)
+ $(openssl_includes)
LIBS = @CLIENT_LIBS@
LDADD= @CLIENT_EXTRA_LDFLAGS@ $(CLIENT_THREAD_LIBS) \
$(top_builddir)/libmysql/libmysqlclient.la
diff --git a/client/mysqltest.c b/client/mysqltest.c
index 774cbac6e3f..11e2cc0048e 100644
--- a/client/mysqltest.c
+++ b/client/mysqltest.c
@@ -2757,6 +2757,9 @@ int do_connect(struct st_query *q)
#ifdef HAVE_OPENSSL
if (opt_use_ssl || con_ssl)
{
+ /* Turn on ssl_verify_server_cert only if host is "localhost" */
+ opt_ssl_verify_server_cert= !strcmp(con_host, "localhost");
+
mysql_ssl_set(&next_con->mysql, opt_ssl_key, opt_ssl_cert, opt_ssl_ca,
opt_ssl_capath, opt_ssl_cipher);
mysql_options(&next_con->mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
diff --git a/extra/yassl/include/openssl/crypto.h b/extra/yassl/include/openssl/crypto.h
index 4a0c1db0df1..288990e1318 100644
--- a/extra/yassl/include/openssl/crypto.h
+++ b/extra/yassl/include/openssl/crypto.h
@@ -3,6 +3,10 @@
#ifndef ysSSL_crypto_h__
#define yaSSL_crypto_h__
+#ifdef YASSL_PREFIX
+#include "prefix_crypto.h"
+#endif
+
const char* SSLeay_version(int type);
#define SSLEAY_VERSION 0x0900L
diff --git a/extra/yassl/include/openssl/generate_prefix_files.pl b/extra/yassl/include/openssl/generate_prefix_files.pl
new file mode 100644
index 00000000000..b921ee11e9a
--- /dev/null
+++ b/extra/yassl/include/openssl/generate_prefix_files.pl
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+#
+# This script generates defines for all functions
+# in yassl/include/openssl/ so they are renamed to
+# ya<old_function_name>. Hopefully that is unique enough.
+#
+# The script is to be run manually when we import
+# a new version of yaSSL
+#
+
+
+
+# Find all functions in "input" and add macros
+# to prefix/rename them into "output
+sub generate_prefix($$)
+{
+ my $input= shift;
+ my $output= shift;
+ open(IN, $input)
+ or die("Can't open input file $input: $!");
+ open(OUT, ">", $output)
+ or mtr_error("Can't open output file $output: $!");
+
+ while (<IN>)
+ {
+ chomp;
+
+ if ( /typedef/ )
+ {
+ next;
+ }
+
+ if ( /^\s*[a-zA-Z0-9*_ ]+\s+([_a-zA-Z0-9]+)\s*\(/ )
+ {
+ print OUT "#define $1 ya$1\n";
+ }
+ }
+
+ close OUT;
+ close IN;
+}
+
+generate_prefix("ssl.h", "prefix_ssl.h");
+generate_prefix("crypto.h", "prefix_crypto.h");
+
diff --git a/extra/yassl/include/openssl/prefix_crypto.h b/extra/yassl/include/openssl/prefix_crypto.h
new file mode 100644
index 00000000000..3fa5f32c627
--- /dev/null
+++ b/extra/yassl/include/openssl/prefix_crypto.h
@@ -0,0 +1 @@
+#define SSLeay_version yaSSLeay_version
diff --git a/extra/yassl/include/openssl/prefix_ssl.h b/extra/yassl/include/openssl/prefix_ssl.h
new file mode 100644
index 00000000000..7f815156f47
--- /dev/null
+++ b/extra/yassl/include/openssl/prefix_ssl.h
@@ -0,0 +1,152 @@
+#define Copyright yaCopyright
+#define yaSSL_CleanUp yayaSSL_CleanUp
+#define DH_new yaDH_new
+#define DH_free yaDH_free
+#define RSA_free yaRSA_free
+#define RSA_generate_key yaRSA_generate_key
+#define X509_free yaX509_free
+#define X509_STORE_CTX_get_current_cert yaX509_STORE_CTX_get_current_cert
+#define X509_STORE_CTX_get_error yaX509_STORE_CTX_get_error
+#define X509_STORE_CTX_get_error_depth yaX509_STORE_CTX_get_error_depth
+#define X509_NAME_oneline yaX509_NAME_oneline
+#define X509_get_issuer_name yaX509_get_issuer_name
+#define X509_get_subject_name yaX509_get_subject_name
+#define X509_verify_cert_error_string yaX509_verify_cert_error_string
+#define X509_LOOKUP_add_dir yaX509_LOOKUP_add_dir
+#define X509_LOOKUP_load_file yaX509_LOOKUP_load_file
+#define X509_LOOKUP_hash_dir yaX509_LOOKUP_hash_dir
+#define X509_LOOKUP_file yaX509_LOOKUP_file
+#define X509_STORE_add_lookup yaX509_STORE_add_lookup
+#define X509_STORE_new yaX509_STORE_new
+#define X509_STORE_get_by_subject yaX509_STORE_get_by_subject
+#define ERR_get_error_line_data yaERR_get_error_line_data
+#define ERR_print_errors_fp yaERR_print_errors_fp
+#define ERR_error_string yaERR_error_string
+#define ERR_remove_state yaERR_remove_state
+#define ERR_get_error yaERR_get_error
+#define ERR_peek_error yaERR_peek_error
+#define ERR_GET_REASON yaERR_GET_REASON
+#define SSL_CTX_new yaSSL_CTX_new
+#define SSL_new yaSSL_new
+#define SSL_set_fd yaSSL_set_fd
+#define SSL_connect yaSSL_connect
+#define SSL_write yaSSL_write
+#define SSL_read yaSSL_read
+#define SSL_accept yaSSL_accept
+#define SSL_CTX_free yaSSL_CTX_free
+#define SSL_free yaSSL_free
+#define SSL_clear yaSSL_clear
+#define SSL_shutdown yaSSL_shutdown
+#define SSL_set_connect_state yaSSL_set_connect_state
+#define SSL_set_accept_state yaSSL_set_accept_state
+#define SSL_do_handshake yaSSL_do_handshake
+#define SSL_get_cipher yaSSL_get_cipher
+#define SSL_get_cipher_name yaSSL_get_cipher_name
+#define SSL_get_shared_ciphers yaSSL_get_shared_ciphers
+#define SSL_get_cipher_list yaSSL_get_cipher_list
+#define SSL_get_version yaSSL_get_version
+#define SSLeay_version yaSSLeay_version
+#define SSL_get_error yaSSL_get_error
+#define SSL_load_error_strings yaSSL_load_error_strings
+#define SSL_set_session yaSSL_set_session
+#define SSL_get_session yaSSL_get_session
+#define SSL_SESSION_set_timeout yaSSL_SESSION_set_timeout
+#define SSL_get_peer_certificate yaSSL_get_peer_certificate
+#define SSL_get_verify_result yaSSL_get_verify_result
+#define SSL_CTX_set_verify yaSSL_CTX_set_verify
+#define SSL_CTX_load_verify_locations yaSSL_CTX_load_verify_locations
+#define SSL_CTX_set_default_verify_paths yaSSL_CTX_set_default_verify_paths
+#define SSL_CTX_check_private_key yaSSL_CTX_check_private_key
+#define SSL_CTX_set_session_id_context yaSSL_CTX_set_session_id_context
+#define SSL_CTX_set_tmp_rsa_callback yaSSL_CTX_set_tmp_rsa_callback
+#define SSL_CTX_set_options yaSSL_CTX_set_options
+#define SSL_CTX_set_session_cache_mode yaSSL_CTX_set_session_cache_mode
+#define SSL_CTX_set_timeout yaSSL_CTX_set_timeout
+#define SSL_CTX_use_certificate_chain_file yaSSL_CTX_use_certificate_chain_file
+#define SSL_CTX_set_default_passwd_cb yaSSL_CTX_set_default_passwd_cb
+#define SSL_CTX_use_RSAPrivateKey_file yaSSL_CTX_use_RSAPrivateKey_file
+#define SSL_CTX_set_info_callback yaSSL_CTX_set_info_callback
+#define SSL_CTX_sess_accept yaSSL_CTX_sess_accept
+#define SSL_CTX_sess_connect yaSSL_CTX_sess_connect
+#define SSL_CTX_sess_accept_good yaSSL_CTX_sess_accept_good
+#define SSL_CTX_sess_connect_good yaSSL_CTX_sess_connect_good
+#define SSL_CTX_sess_accept_renegotiate yaSSL_CTX_sess_accept_renegotiate
+#define SSL_CTX_sess_connect_renegotiate yaSSL_CTX_sess_connect_renegotiate
+#define SSL_CTX_sess_hits yaSSL_CTX_sess_hits
+#define SSL_CTX_sess_cb_hits yaSSL_CTX_sess_cb_hits
+#define SSL_CTX_sess_cache_full yaSSL_CTX_sess_cache_full
+#define SSL_CTX_sess_misses yaSSL_CTX_sess_misses
+#define SSL_CTX_sess_timeouts yaSSL_CTX_sess_timeouts
+#define SSL_CTX_sess_number yaSSL_CTX_sess_number
+#define SSL_CTX_sess_get_cache_size yaSSL_CTX_sess_get_cache_size
+#define SSL_CTX_get_verify_mode yaSSL_CTX_get_verify_mode
+#define SSL_get_verify_mode yaSSL_get_verify_mode
+#define SSL_CTX_get_verify_depth yaSSL_CTX_get_verify_depth
+#define SSL_get_verify_depth yaSSL_get_verify_depth
+#define SSL_get_default_timeout yaSSL_get_default_timeout
+#define SSL_CTX_get_session_cache_mode yaSSL_CTX_get_session_cache_mode
+#define SSL_session_reused yaSSL_session_reused
+#define SSL_set_rfd yaSSL_set_rfd
+#define SSL_set_wfd yaSSL_set_wfd
+#define SSL_set_shutdown yaSSL_set_shutdown
+#define SSL_want_read yaSSL_want_read
+#define SSL_want_write yaSSL_want_write
+#define SSL_pending yaSSL_pending
+#define SSL_CTX_use_certificate_file yaSSL_CTX_use_certificate_file
+#define SSL_CTX_use_PrivateKey_file yaSSL_CTX_use_PrivateKey_file
+#define SSL_CTX_set_cipher_list yaSSL_CTX_set_cipher_list
+#define SSL_CTX_sess_set_cache_size yaSSL_CTX_sess_set_cache_size
+#define SSL_CTX_set_tmp_dh yaSSL_CTX_set_tmp_dh
+#define OpenSSL_add_all_algorithms yaOpenSSL_add_all_algorithms
+#define SSL_library_init yaSSL_library_init
+#define SSLeay_add_ssl_algorithms yaSSLeay_add_ssl_algorithms
+#define SSL_get_current_cipher yaSSL_get_current_cipher
+#define SSL_CIPHER_description yaSSL_CIPHER_description
+#define SSL_alert_type_string_long yaSSL_alert_type_string_long
+#define SSL_alert_desc_string_long yaSSL_alert_desc_string_long
+#define SSL_state_string_long yaSSL_state_string_long
+#define EVP_md5 yaEVP_md5
+#define EVP_des_ede3_cbc yaEVP_des_ede3_cbc
+#define EVP_BytesToKey yaEVP_BytesToKey
+#define DES_set_key_unchecked yaDES_set_key_unchecked
+#define DES_ede3_cbc_encrypt yaDES_ede3_cbc_encrypt
+#define RAND_screen yaRAND_screen
+#define RAND_file_name yaRAND_file_name
+#define RAND_write_file yaRAND_write_file
+#define RAND_load_file yaRAND_load_file
+#define RAND_status yaRAND_status
+#define DES_set_key yaDES_set_key
+#define DES_set_odd_parity yaDES_set_odd_parity
+#define DES_ecb_encrypt yaDES_ecb_encrypt
+#define SSL_CTX_set_default_passwd_cb_userdata yaSSL_CTX_set_default_passwd_cb_userdata
+#define SSL_SESSION_free yaSSL_SESSION_free
+#define SSL_get_certificate yaSSL_get_certificate
+#define SSL_get_privatekey yaSSL_get_privatekey
+#define X509_get_pubkey yaX509_get_pubkey
+#define EVP_PKEY_copy_parameters yaEVP_PKEY_copy_parameters
+#define EVP_PKEY_free yaEVP_PKEY_free
+#define ERR_error_string_n yaERR_error_string_n
+#define ERR_free_strings yaERR_free_strings
+#define EVP_cleanup yaEVP_cleanup
+#define X509_get_ext_d2i yaX509_get_ext_d2i
+#define GENERAL_NAMES_free yaGENERAL_NAMES_free
+#define sk_GENERAL_NAME_num yask_GENERAL_NAME_num
+#define sk_GENERAL_NAME_value yask_GENERAL_NAME_value
+#define ASN1_STRING_data yaASN1_STRING_data
+#define ASN1_STRING_length yaASN1_STRING_length
+#define ASN1_STRING_type yaASN1_STRING_type
+#define X509_NAME_get_index_by_NID yaX509_NAME_get_index_by_NID
+#define X509_NAME_ENTRY_get_data yaX509_NAME_ENTRY_get_data
+#define X509_NAME_get_entry yaX509_NAME_get_entry
+#define ASN1_STRING_to_UTF8 yaASN1_STRING_to_UTF8
+#define SSLv23_client_method yaSSLv23_client_method
+#define SSLv2_client_method yaSSLv2_client_method
+#define SSL_get1_session yaSSL_get1_session
+#define X509_get_notBefore yaX509_get_notBefore
+#define X509_get_notAfter yaX509_get_notAfter
+#define MD4_Init yaMD4_Init
+#define MD4_Update yaMD4_Update
+#define MD4_Final yaMD4_Final
+#define MD5_Init yaMD5_Init
+#define MD5_Update yaMD5_Update
+#define MD5_Final yaMD5_Final
diff --git a/extra/yassl/include/openssl/ssl.h b/extra/yassl/include/openssl/ssl.h
index 23e48d2011f..af801029561 100644
--- a/extra/yassl/include/openssl/ssl.h
+++ b/extra/yassl/include/openssl/ssl.h
@@ -28,6 +28,10 @@
#ifndef yaSSL_openssl_h__
#define yaSSL_openssl_h__
+#ifdef YASSL_PREFIX
+#include "prefix_ssl.h"
+#endif
+
#include <stdio.h> /* ERR_print fp */
#include "opensslv.h" /* for version number */
#include "rsa.h"
@@ -373,11 +377,9 @@ char* SSL_state_string_long(SSL*);
/* EVP stuff, des and md5, different file? */
-typedef struct Digest Digest;
-typedef Digest EVP_MD;
+typedef char EVP_MD;
-typedef struct BulkCipher BulkCipher;
-typedef BulkCipher EVP_CIPHER;
+typedef char EVP_CIPHER;
typedef struct EVP_PKEY EVP_PKEY;
diff --git a/extra/yassl/include/yassl_int.hpp b/extra/yassl/include/yassl_int.hpp
index 97ae468d2f9..633b75d479f 100644
--- a/extra/yassl/include/yassl_int.hpp
+++ b/extra/yassl/include/yassl_int.hpp
@@ -127,25 +127,6 @@ private:
};
-// hold add crypt references provided to callers
-class CryptProvider {
- mySTL::list<Digest*> digestList_;
- mySTL::list<BulkCipher*> cipherList_;
- CryptProvider() {} // only GetCryptProvider creates
-public:
- ~CryptProvider();
-
- Digest* NewMd5();
- BulkCipher* NewDesEde();
-
- friend CryptProvider& GetCryptProvider();
-private:
- CryptProvider(const CryptProvider&); // hide copy
- CryptProvider& operator=(const CryptProvider&); // and assign
-};
-
-CryptProvider& GetCryptProvider();
-
#undef X509_NAME // wincrypt.h clash
// openSSL X509 names
diff --git a/extra/yassl/src/Makefile.am b/extra/yassl/src/Makefile.am
index a852ca4019b..2b3e1aea5f5 100644
--- a/extra/yassl/src/Makefile.am
+++ b/extra/yassl/src/Makefile.am
@@ -5,4 +5,4 @@ libyassl_la_SOURCES = buffer.cpp cert_wrapper.cpp crypto_wrapper.cpp \
handshake.cpp lock.cpp log.cpp socket_wrapper.cpp ssl.cpp \
template_instnt.cpp timer.cpp yassl_imp.cpp yassl_error.cpp yassl_int.cpp
EXTRA_DIST = $(wildcard ../include/*.hpp) $(wildcard ../include/openssl/*.h)
-AM_CXXFLAGS = -DYASSL_PURE_C
+AM_CXXFLAGS = -DYASSL_PURE_C -DYASSL_PREFIX
diff --git a/extra/yassl/src/ssl.cpp b/extra/yassl/src/ssl.cpp
index 747305730df..07f5e9859b2 100644
--- a/extra/yassl/src/ssl.cpp
+++ b/extra/yassl/src/ssl.cpp
@@ -811,25 +811,34 @@ const char* X509_verify_cert_error_string(long /* error */)
const EVP_MD* EVP_md5(void)
{
- return GetCryptProvider().NewMd5();
+ static const char* type = "MD5";
+ return type;
}
const EVP_CIPHER* EVP_des_ede3_cbc(void)
{
- return GetCryptProvider().NewDesEde();
+ static const char* type = "DES_EDE3_CBC";
+ return type;
}
int EVP_BytesToKey(const EVP_CIPHER* type, const EVP_MD* md, const byte* salt,
const byte* data, int sz, int count, byte* key, byte* iv)
{
- EVP_MD* myMD = const_cast<EVP_MD*>(md);
- uint digestSz = myMD->get_digestSize();
+ // only support MD5 for now
+ if (strncmp(md, "MD5", 3)) return 0;
+
+ // only support DES_EDE3_CBC for now
+ if (strncmp(type, "DES_EDE3_CBC", 12)) return 0;
+
+ yaSSL::MD5 myMD;
+ uint digestSz = myMD.get_digestSize();
byte digest[SHA_LEN]; // max size
- int keyLen = type->get_keySize();
- int ivLen = type->get_ivSize();
+ yaSSL::DES_EDE cipher;
+ int keyLen = cipher.get_keySize();
+ int ivLen = cipher.get_ivSize();
int keyLeft = keyLen;
int ivLeft = ivLen;
int keyOutput = 0;
@@ -838,17 +847,17 @@ int EVP_BytesToKey(const EVP_CIPHER* type, const EVP_MD* md, const byte* salt,
int digestLeft = digestSz;
// D_(i - 1)
if (keyOutput) // first time D_0 is empty
- myMD->update(digest, digestSz);
+ myMD.update(digest, digestSz);
// data
- myMD->update(data, sz);
+ myMD.update(data, sz);
// salt
if (salt)
- myMD->update(salt, EVP_SALT_SZ);
- myMD->get_digest(digest);
+ myMD.update(salt, EVP_SALT_SZ);
+ myMD.get_digest(digest);
// count
for (int j = 1; j < count; j++) {
- myMD->update(digest, digestSz);
- myMD->get_digest(digest);
+ myMD.update(digest, digestSz);
+ myMD.get_digest(digest);
}
if (keyLeft) {
diff --git a/extra/yassl/src/template_instnt.cpp b/extra/yassl/src/template_instnt.cpp
index 134deb00c75..ce8972c72fe 100644
--- a/extra/yassl/src/template_instnt.cpp
+++ b/extra/yassl/src/template_instnt.cpp
@@ -86,7 +86,6 @@ template void ysDelete<X509>(X509*);
template void ysDelete<Message>(Message*);
template void ysDelete<sslFactory>(sslFactory*);
template void ysDelete<Sessions>(Sessions*);
-template void ysDelete<CryptProvider>(CryptProvider*);
template void ysArrayDelete<unsigned char>(unsigned char*);
template void ysArrayDelete<char>(char*);
}
diff --git a/extra/yassl/src/yassl_int.cpp b/extra/yassl/src/yassl_int.cpp
index 842bcd5fb5d..1ff46903bfd 100644
--- a/extra/yassl/src/yassl_int.cpp
+++ b/extra/yassl/src/yassl_int.cpp
@@ -1382,38 +1382,6 @@ sslFactory& GetSSL_Factory()
}
-static CryptProvider* cryptProviderInstance = 0;
-
-CryptProvider& GetCryptProvider()
-{
- if (!cryptProviderInstance)
- cryptProviderInstance = NEW_YS CryptProvider;
- return *cryptProviderInstance;
-}
-
-
-CryptProvider::~CryptProvider()
-{
- mySTL::for_each(digestList_.begin(), digestList_.end(), del_ptr_zero());
- mySTL::for_each(cipherList_.begin(), cipherList_.end(), del_ptr_zero());
-}
-
-
-Digest* CryptProvider::NewMd5()
-{
- Digest* ptr = NEW_YS MD5();
- digestList_.push_back(ptr);
- return ptr;
-}
-
-
-BulkCipher* CryptProvider::NewDesEde()
-{
- BulkCipher* ptr = NEW_YS DES_EDE();
- cipherList_.push_back(ptr);
- return ptr;
-}
-
typedef Mutex::Lock Lock;
@@ -2106,12 +2074,10 @@ ASN1_STRING* StringHolder::GetString()
extern "C" void yaSSL_CleanUp()
{
TaoCrypt::CleanUp();
- yaSSL::ysDelete(yaSSL::cryptProviderInstance);
yaSSL::ysDelete(yaSSL::sslFactoryInstance);
yaSSL::ysDelete(yaSSL::sessionsInstance);
// In case user calls more than once, prevent seg fault
- yaSSL::cryptProviderInstance = 0;
yaSSL::sslFactoryInstance = 0;
yaSSL::sessionsInstance = 0;
}
diff --git a/extra/yassl/testsuite/Makefile.am b/extra/yassl/testsuite/Makefile.am
index d91822f609e..2ae46a1b409 100644
--- a/extra/yassl/testsuite/Makefile.am
+++ b/extra/yassl/testsuite/Makefile.am
@@ -5,7 +5,7 @@ testsuite_SOURCES = testsuite.cpp ../taocrypt/test/test.cpp \
../examples/echoclient/echoclient.cpp \
../examples/echoserver/echoserver.cpp
testsuite_LDFLAGS = -L../src/ -L../taocrypt/src
-testsuite_CXXFLAGS = -DYASSL_PURE_C -DNO_MAIN_DRIVER
+testsuite_CXXFLAGS = -DYASSL_PURE_C -DYASSL_PREFIX -DNO_MAIN_DRIVER
testsuite_LDADD = -lyassl -ltaocrypt
testsuite_DEPENDENCIES = ../src/libyassl.la ../taocrypt/src/libtaocrypt.la
EXTRA_DIST = testsuite.dsp test.hpp input quit make.bat
diff --git a/extra/yassl/yassl.vcproj b/extra/yassl/yassl.vcproj
index e2915e3f575..a7688ac4583 100755
--- a/extra/yassl/yassl.vcproj
+++ b/extra/yassl/yassl.vcproj
@@ -22,7 +22,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="include,taocrypt\include,mySTL"
- PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
+ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;YASSL_PREFIX"
ExceptionHandling="FALSE"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
@@ -76,7 +76,7 @@
Optimization="2"
InlineFunctionExpansion="1"
AdditionalIncludeDirectories="include,taocrypt\include,mySTL"
- PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+ PreprocessorDefinitions="WIN32;NDEBUG;_LIB;YASSL_PREFIX"
StringPooling="TRUE"
ExceptionHandling="FALSE"
RuntimeLibrary="0"
diff --git a/include/violite.h b/include/violite.h
index 4837ade64b4..323e72e82d3 100644
--- a/include/violite.h
+++ b/include/violite.h
@@ -102,6 +102,7 @@ void vio_timeout(Vio *vio,uint which, uint timeout);
#define HEADER_DES_LOCL_H dummy_something
#define YASSL_MYSQL_COMPATIBLE
+#define YASSL_PREFIX
#include <openssl/ssl.h>
#include <openssl/err.h>
diff --git a/libmysql/Makefile.am b/libmysql/Makefile.am
index 787ffc51de7..5e6c60a007b 100644
--- a/libmysql/Makefile.am
+++ b/libmysql/Makefile.am
@@ -24,7 +24,7 @@ target = libmysqlclient.la
target_defs = -DUNDEF_THREADS_HACK -DDONT_USE_RAID @LIB_EXTRA_CCFLAGS@
LIBS = @CLIENT_LIBS@
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
- $(openssl_includes) $(yassl_includes) @ZLIB_INCLUDES@
+ $(openssl_includes) @ZLIB_INCLUDES@
include $(srcdir)/Makefile.shared
diff --git a/libmysql_r/Makefile.am b/libmysql_r/Makefile.am
index a1ccbca48e5..93f5bffdec7 100644
--- a/libmysql_r/Makefile.am
+++ b/libmysql_r/Makefile.am
@@ -25,7 +25,7 @@ target_defs = -DDONT_USE_RAID -DMYSQL_CLIENT @LIB_EXTRA_CCFLAGS@
LIBS = @LIBS@ @ZLIB_LIBS@ @openssl_libs@
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
- $(openssl_includes) $(yassl_includes) @ZLIB_INCLUDES@
+ $(openssl_includes) @ZLIB_INCLUDES@
## automake barfs if you don't use $(srcdir) or $(top_srcdir) in include
include $(top_srcdir)/libmysql/Makefile.shared
diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am
index a3af2d43bd5..50f364babe1 100644
--- a/libmysqld/Makefile.am
+++ b/libmysqld/Makefile.am
@@ -32,7 +32,7 @@ INCLUDES= -I$(top_builddir)/include -I$(top_srcdir)/include \
-I$(top_builddir)/include -I$(top_srcdir)/include \
-I$(top_srcdir)/sql -I$(top_srcdir)/sql/examples \
-I$(top_srcdir)/regex \
- $(openssl_includes) $(yassl_includes) @ZLIB_INCLUDES@
+ $(openssl_includes) @ZLIB_INCLUDES@
noinst_LIBRARIES = libmysqld_int.a
pkglib_LIBRARIES = libmysqld.a
diff --git a/libmysqld/examples/Makefile.am b/libmysqld/examples/Makefile.am
index 7ee8adfef80..c705fb1e68d 100644
--- a/libmysqld/examples/Makefile.am
+++ b/libmysqld/examples/Makefile.am
@@ -34,7 +34,7 @@ link_sources:
DEFS = -DEMBEDDED_LIBRARY
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(srcdir) \
-I$(top_srcdir) -I$(top_srcdir)/client -I$(top_srcdir)/regex \
- $(openssl_includes) $(yassl_includes)
+ $(openssl_includes)
LIBS = @LIBS@ @WRAPLIBS@ @CLIENT_LIBS@ $(yassl_libs)
LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysqld.a @LIBDL@ $(CXXLDFLAGS)
diff --git a/mysql-test/r/analyze.result b/mysql-test/r/analyze.result
index fc267cb598d..7b476c3cca2 100644
--- a/mysql-test/r/analyze.result
+++ b/mysql-test/r/analyze.result
@@ -46,6 +46,7 @@ Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_
execute stmt1;
Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
deallocate prepare stmt1;
+drop table t1;
create temporary table t1(a int, index(a));
insert into t1 values('1'),('2'),('3'),('4'),('5');
analyze table t1;
diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result
index 75afab911b9..82775f0735b 100644
--- a/mysql-test/r/grant.result
+++ b/mysql-test/r/grant.result
@@ -607,6 +607,7 @@ insert into tables_priv values ('','test_db','mysqltest_1','test_table','test_gr
flush privileges;
delete from tables_priv where host = '' and user = 'mysqltest_1';
flush privileges;
+use test;
set @user123="non-existent";
select * from mysql.db where user=@user123;
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv Trigger_priv
@@ -637,7 +638,6 @@ show grants for mysqltest_7@;
Grants for mysqltest_7@
GRANT USAGE ON *.* TO 'mysqltest_7'@'' IDENTIFIED BY PASSWORD '*2FB071A056F9BB745219D9C876814231DAF46517'
drop user mysqltest_7@;
-flush privileges;
show grants for mysqltest_7@;
ERROR 42000: There is no such grant defined for user 'mysqltest_7' on host ''
create database mysqltest;
@@ -658,3 +658,214 @@ delete from mysql.db where user='mysqltest1';
delete from mysql.tables_priv where user='mysqltest1';
flush privileges;
drop database mysqltest;
+use test;
+create table t1 (a int);
+create table t2 as select * from mysql.user where user='';
+delete from mysql.user where user='';
+flush privileges;
+create user mysqltest_8@'';
+create user mysqltest_8;
+create user mysqltest_8@host8;
+create user mysqltest_8@'';
+ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@''
+create user mysqltest_8;
+ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'%'
+create user mysqltest_8@host8;
+ERROR HY000: Operation CREATE USER failed for 'mysqltest_8'@'host8'
+select user, QUOTE(host) from mysql.user where user="mysqltest_8";
+user QUOTE(host)
+mysqltest_8 ''
+mysqltest_8 '%'
+mysqltest_8 'host8'
+Schema privileges
+grant select on mysqltest.* to mysqltest_8@'';
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@''
+grant select on mysqltest.* to mysqltest_8@;
+show grants for mysqltest_8@;
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@''
+grant select on mysqltest.* to mysqltest_8;
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@'%'
+select * from information_schema.schema_privileges
+where grantee like "'mysqltest_8'%";
+GRANTEE TABLE_CATALOG TABLE_SCHEMA PRIVILEGE_TYPE IS_GRANTABLE
+'mysqltest_8'@'%' NULL mysqltest SELECT NO
+'mysqltest_8'@'' NULL mysqltest SELECT NO
+select * from t1;
+a
+revoke select on mysqltest.* from mysqltest_8@'';
+revoke select on mysqltest.* from mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+select * from information_schema.schema_privileges
+where grantee like "'mysqltest_8'%";
+GRANTEE TABLE_CATALOG TABLE_SCHEMA PRIVILEGE_TYPE IS_GRANTABLE
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8@;
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+grant select on mysqltest.* to mysqltest_8@'';
+flush privileges;
+show grants for mysqltest_8@;
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT SELECT ON `mysqltest`.* TO 'mysqltest_8'@''
+revoke select on mysqltest.* from mysqltest_8@'';
+flush privileges;
+Column privileges
+grant update (a) on t1 to mysqltest_8@'';
+grant update (a) on t1 to mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@'%'
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@'%'
+select * from information_schema.column_privileges;
+GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME PRIVILEGE_TYPE IS_GRANTABLE
+'mysqltest_8'@'%' NULL test t1 a UPDATE NO
+'mysqltest_8'@'' NULL test t1 a UPDATE NO
+select * from t1;
+a
+revoke update (a) on t1 from mysqltest_8@'';
+revoke update (a) on t1 from mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+select * from information_schema.column_privileges;
+GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME PRIVILEGE_TYPE IS_GRANTABLE
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+Table privileges
+grant update on t1 to mysqltest_8@'';
+grant update on t1 to mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@'%'
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT UPDATE ON `test`.`t1` TO 'mysqltest_8'@'%'
+select * from information_schema.table_privileges;
+GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE
+'mysqltest_8'@'%' NULL test t1 UPDATE NO
+'mysqltest_8'@'' NULL test t1 UPDATE NO
+select * from t1;
+a
+revoke update on t1 from mysqltest_8@'';
+revoke update on t1 from mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+select * from information_schema.table_privileges;
+GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+"DROP USER" should clear privileges
+grant all privileges on mysqltest.* to mysqltest_8@'';
+grant select on mysqltest.* to mysqltest_8@'';
+grant update on t1 to mysqltest_8@'';
+grant update (a) on t1 to mysqltest_8@'';
+grant all privileges on mysqltest.* to mysqltest_8;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@''
+GRANT UPDATE, UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@'%'
+select * from information_schema.user_privileges
+where grantee like "'mysqltest_8'%";
+GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
+'mysqltest_8'@'host8' NULL USAGE NO
+'mysqltest_8'@'%' NULL USAGE NO
+'mysqltest_8'@'' NULL USAGE NO
+select * from t1;
+a
+flush privileges;
+show grants for mysqltest_8@'';
+Grants for mysqltest_8@
+GRANT USAGE ON *.* TO 'mysqltest_8'@''
+GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@''
+GRANT UPDATE, UPDATE (a) ON `test`.`t1` TO 'mysqltest_8'@''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@'%'
+drop user mysqltest_8@'';
+show grants for mysqltest_8@'';
+ERROR 42000: There is no such grant defined for user 'mysqltest_8' on host ''
+show grants for mysqltest_8;
+Grants for mysqltest_8@%
+GRANT USAGE ON *.* TO 'mysqltest_8'@'%'
+GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_8'@'%'
+select * from information_schema.user_privileges
+where grantee like "'mysqltest_8'%";
+GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
+'mysqltest_8'@'host8' NULL USAGE NO
+'mysqltest_8'@'%' NULL USAGE NO
+drop user mysqltest_8;
+connect(localhost,mysqltest_8,,test,MASTER_PORT,MASTER_SOCKET);
+ERROR 28000: Access denied for user 'mysqltest_8'@'localhost' (using password: NO)
+show grants for mysqltest_8;
+ERROR 42000: There is no such grant defined for user 'mysqltest_8' on host '%'
+drop user mysqltest_8@host8;
+show grants for mysqltest_8@host8;
+ERROR 42000: There is no such grant defined for user 'mysqltest_8' on host 'host8'
+insert into mysql.user select * from t2;
+flush privileges;
+drop table t2;
+drop table t1;
diff --git a/mysql-test/r/ps.result b/mysql-test/r/ps.result
index 06443cde01d..3e3981c0050 100644
--- a/mysql-test/r/ps.result
+++ b/mysql-test/r/ps.result
@@ -1157,3 +1157,4 @@ test.t1 analyze status Table is already up to date
Warnings:
Error 1146 Table 'test.t4' doesn't exist
deallocate prepare stmt;
+drop table t1, t2, t3;
diff --git a/mysql-test/t/analyze.test b/mysql-test/t/analyze.test
index 1801a4a440f..7c9830bb468 100644
--- a/mysql-test/t/analyze.test
+++ b/mysql-test/t/analyze.test
@@ -61,6 +61,7 @@ prepare stmt1 from "SELECT * FROM t1 PROCEDURE ANALYSE()";
execute stmt1;
execute stmt1;
deallocate prepare stmt1;
+drop table t1;
#
# bug#15225 (ANALYZE temporary has no effect)
diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test
index 3db38d93ee1..a9d52f559ca 100644
--- a/mysql-test/t/grant.test
+++ b/mysql-test/t/grant.test
@@ -490,6 +490,7 @@ insert into tables_priv values ('','test_db','mysqltest_1','test_table','test_gr
flush privileges;
delete from tables_priv where host = '' and user = 'mysqltest_1';
flush privileges;
+use test;
#
# Bug #10892 user variables not auto cast for comparisons
@@ -518,7 +519,6 @@ create user mysqltest_7@;
set password for mysqltest_7@ = password('systpass');
show grants for mysqltest_7@;
drop user mysqltest_7@;
-flush privileges; # BUG#16297(flush should be removed when that bug is fixed)
--error 1141
show grants for mysqltest_7@;
@@ -539,3 +539,145 @@ flush privileges;
drop database mysqltest;
# End of 4.1 tests
+
+#
+# Bug #16297 In memory grant tables not flushed when users's hostname is ""
+#
+use test;
+create table t1 (a int);
+
+# Backup anonymous users and remove them. (They get in the way of
+# the one we test with here otherwise.)
+create table t2 as select * from mysql.user where user='';
+delete from mysql.user where user='';
+flush privileges;
+
+# Create some users with different hostnames
+create user mysqltest_8@'';
+create user mysqltest_8;
+create user mysqltest_8@host8;
+
+# Try to create them again
+--error 1396
+create user mysqltest_8@'';
+--error 1396
+create user mysqltest_8;
+--error 1396
+create user mysqltest_8@host8;
+
+select user, QUOTE(host) from mysql.user where user="mysqltest_8";
+
+--echo Schema privileges
+grant select on mysqltest.* to mysqltest_8@'';
+show grants for mysqltest_8@'';
+grant select on mysqltest.* to mysqltest_8@;
+show grants for mysqltest_8@;
+grant select on mysqltest.* to mysqltest_8;
+show grants for mysqltest_8;
+select * from information_schema.schema_privileges
+where grantee like "'mysqltest_8'%";
+connect (conn3,localhost,mysqltest_8,,);
+select * from t1;
+disconnect conn3;
+connection master;
+revoke select on mysqltest.* from mysqltest_8@'';
+revoke select on mysqltest.* from mysqltest_8;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+select * from information_schema.schema_privileges
+where grantee like "'mysqltest_8'%";
+flush privileges;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8@;
+grant select on mysqltest.* to mysqltest_8@'';
+flush privileges;
+show grants for mysqltest_8@;
+revoke select on mysqltest.* from mysqltest_8@'';
+flush privileges;
+
+--echo Column privileges
+grant update (a) on t1 to mysqltest_8@'';
+grant update (a) on t1 to mysqltest_8;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+flush privileges;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+select * from information_schema.column_privileges;
+connect (conn4,localhost,mysqltest_8,,);
+select * from t1;
+disconnect conn4;
+connection master;
+revoke update (a) on t1 from mysqltest_8@'';
+revoke update (a) on t1 from mysqltest_8;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+select * from information_schema.column_privileges;
+flush privileges;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+
+--echo Table privileges
+grant update on t1 to mysqltest_8@'';
+grant update on t1 to mysqltest_8;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+flush privileges;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+select * from information_schema.table_privileges;
+connect (conn5,localhost,mysqltest_8,,);
+select * from t1;
+disconnect conn5;
+connection master;
+revoke update on t1 from mysqltest_8@'';
+revoke update on t1 from mysqltest_8;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+select * from information_schema.table_privileges;
+flush privileges;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+
+--echo "DROP USER" should clear privileges
+grant all privileges on mysqltest.* to mysqltest_8@'';
+grant select on mysqltest.* to mysqltest_8@'';
+grant update on t1 to mysqltest_8@'';
+grant update (a) on t1 to mysqltest_8@'';
+grant all privileges on mysqltest.* to mysqltest_8;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+select * from information_schema.user_privileges
+where grantee like "'mysqltest_8'%";
+connect (conn5,localhost,mysqltest_8,,);
+select * from t1;
+disconnect conn5;
+connection master;
+flush privileges;
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+drop user mysqltest_8@'';
+--error 1141
+show grants for mysqltest_8@'';
+show grants for mysqltest_8;
+select * from information_schema.user_privileges
+where grantee like "'mysqltest_8'%";
+drop user mysqltest_8;
+--replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT
+--error 1045
+connect (conn6,localhost,mysqltest_8,,);
+connection master;
+--error 1141
+show grants for mysqltest_8;
+drop user mysqltest_8@host8;
+--error 1141
+show grants for mysqltest_8@host8;
+
+# Restore the anonymous users.
+insert into mysql.user select * from t2;
+flush privileges;
+drop table t2;
+
+drop table t1;
+
+
diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test
index 639a576fb35..4a336962293 100644
--- a/mysql-test/t/ps.test
+++ b/mysql-test/t/ps.test
@@ -1145,5 +1145,5 @@ prepare stmt from "analyze table t4, t1";
execute stmt;
execute stmt;
deallocate prepare stmt;
-
+drop table t1, t2, t3;
# End of 5.0 tests
diff --git a/server-tools/instance-manager/Makefile.am b/server-tools/instance-manager/Makefile.am
index 4139bf2eb10..4719828081a 100644
--- a/server-tools/instance-manager/Makefile.am
+++ b/server-tools/instance-manager/Makefile.am
@@ -15,7 +15,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
INCLUDES= @ZLIB_INCLUDES@ -I$(top_srcdir)/include \
- @openssl_includes@ @yassl_includes@ -I$(top_builddir)/include
+ @openssl_includes@ -I$(top_builddir)/include
DEFS= -DMYSQL_INSTANCE_MANAGER -DMYSQL_SERVER
diff --git a/sql/Makefile.am b/sql/Makefile.am
index d7a6eac72cc..ffc5b2c2573 100644
--- a/sql/Makefile.am
+++ b/sql/Makefile.am
@@ -22,7 +22,7 @@ MYSQLBASEdir= $(prefix)
MYSQLLIBdir= $(pkglibdir)
INCLUDES = @ZLIB_INCLUDES@ \
-I$(top_builddir)/include -I$(top_srcdir)/include \
- -I$(top_srcdir)/regex -I$(srcdir) $(yassl_includes) \
+ -I$(top_srcdir)/regex -I$(srcdir) \
$(openssl_includes)
WRAPLIBS= @WRAPLIBS@
SUBDIRS = share
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index b1b68093d17..56c3b1857a8 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -1081,7 +1081,11 @@ static void __cdecl kill_server(int sig_ptr)
my_thread_init(); // If this is a new thread
#endif
close_connections();
- if (sig != MYSQL_KILL_SIGNAL && sig != 0)
+ if (sig != MYSQL_KILL_SIGNAL &&
+#ifdef __WIN__
+ sig != SIGINT && /* Bug#18235 */
+#endif
+ sig != 0)
unireg_abort(1); /* purecov: inspected */
else
unireg_end();
@@ -4754,6 +4758,7 @@ enum options_mysqld
OPT_INNODB_FILE_IO_THREADS,
OPT_INNODB_LOCK_WAIT_TIMEOUT,
OPT_INNODB_THREAD_CONCURRENCY,
+ OPT_INNODB_COMMIT_CONCURRENCY,
OPT_INNODB_FORCE_RECOVERY,
OPT_INNODB_STATUS_FILE,
OPT_INNODB_MAX_DIRTY_PAGES_PCT,
@@ -5809,7 +5814,7 @@ log and this option does nothing anymore.",
(gptr*) &innobase_buffer_pool_size, (gptr*) &innobase_buffer_pool_size, 0,
GET_LL, REQUIRED_ARG, 8*1024*1024L, 1024*1024L, LONGLONG_MAX, 0,
1024*1024L, 0},
- {"innodb_commit_concurrency", OPT_INNODB_THREAD_CONCURRENCY,
+ {"innodb_commit_concurrency", OPT_INNODB_COMMIT_CONCURRENCY,
"Helps in performance tuning in heavily concurrent environments.",
(gptr*) &srv_commit_concurrency, (gptr*) &srv_commit_concurrency,
0, GET_LONG, REQUIRED_ARG, 0, 0, 1000, 0, 1, 0},
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 8eb7242dfab..4c2dfac6b8b 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -343,7 +343,8 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
"case that has been forced to lowercase because "
"lower_case_table_names is set. It will not be "
"possible to remove this privilege using REVOKE.",
- host.host.hostname, host.db);
+ host.host.hostname ? host.host.hostname : "",
+ host.db ? host.db : "");
}
host.access= get_access(table,2);
host.access= fix_rights_for_db(host.access);
@@ -352,7 +353,8 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
{
sql_print_warning("'host' entry '%s|%s' "
"ignored in --skip-name-resolve mode.",
- host.host.hostname, host.db?host.db:"");
+ host.host.hostname ? host.host.hostname : "",
+ host.db ? host.db : "");
continue;
}
#ifndef TO_BE_REMOVED
@@ -423,7 +425,8 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
{
sql_print_warning("'user' entry '%s@%s' "
"ignored in --skip-name-resolve mode.",
- user.user, user.host.hostname);
+ user.user ? user.user : "",
+ user.host.hostname ? user.host.hostname : "");
continue;
}
@@ -546,8 +549,8 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
#endif
}
VOID(push_dynamic(&acl_users,(gptr) &user));
- if (!user.host.hostname || user.host.hostname[0] == wild_many &&
- !user.host.hostname[1])
+ if (!user.host.hostname ||
+ (user.host.hostname[0] == wild_many && !user.host.hostname[1]))
allow_all_hosts=1; // Anyone can connect
}
}
@@ -574,7 +577,9 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
{
sql_print_warning("'db' entry '%s %s@%s' "
"ignored in --skip-name-resolve mode.",
- db.db, db.user, db.host.hostname);
+ db.db,
+ db.user ? db.user : "",
+ db.host.hostname ? db.host.hostname : "");
continue;
}
db.access=get_access(table,3);
@@ -593,7 +598,9 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
"case that has been forced to lowercase because "
"lower_case_table_names is set. It will not be "
"possible to remove this privilege using REVOKE.",
- db.db, db.user, db.host.hostname, db.host.hostname);
+ db.db,
+ db.user ? db.user : "",
+ db.host.hostname ? db.host.hostname : "");
}
}
db.sort=get_sort(3,db.host.hostname,db.db,db.user);
@@ -1167,8 +1174,7 @@ static void acl_update_user(const char *user, const char *host,
{
ACL_USER *acl_user=dynamic_element(&acl_users,i,ACL_USER*);
if (!acl_user->user && !user[0] ||
- acl_user->user &&
- !strcmp(user,acl_user->user))
+ acl_user->user && !strcmp(user,acl_user->user))
{
if (!acl_user->host.hostname && !host[0] ||
acl_user->host.hostname &&
@@ -1231,8 +1237,8 @@ static void acl_insert_user(const char *user, const char *host,
set_user_salt(&acl_user, password, password_len);
VOID(push_dynamic(&acl_users,(gptr) &acl_user));
- if (!acl_user.host.hostname || acl_user.host.hostname[0] == wild_many
- && !acl_user.host.hostname[1])
+ if (!acl_user.host.hostname ||
+ (acl_user.host.hostname[0] == wild_many && !acl_user.host.hostname[1]))
allow_all_hosts=1; // Anyone can connect /* purecov: tested */
qsort((gptr) dynamic_element(&acl_users,0,ACL_USER*),acl_users.elements,
sizeof(ACL_USER),(qsort_cmp) acl_compare);
@@ -1292,7 +1298,7 @@ static void acl_insert_db(const char *user, const char *host, const char *db,
ACL_DB acl_db;
safe_mutex_assert_owner(&acl_cache->lock);
acl_db.user=strdup_root(&mem,user);
- update_hostname(&acl_db.host,strdup_root(&mem,host));
+ update_hostname(&acl_db.host, *host ? strdup_root(&mem,host) : 0);
acl_db.db=strdup_root(&mem,db);
acl_db.access=privileges;
acl_db.sort=get_sort(3,acl_db.host.hostname,acl_db.db,acl_db.user);
@@ -1679,11 +1685,10 @@ find_acl_user(const char *host, const char *user, my_bool exact)
{
ACL_USER *acl_user=dynamic_element(&acl_users,i,ACL_USER*);
DBUG_PRINT("info",("strcmp('%s','%s'), compare_hostname('%s','%s'),",
- user,
- acl_user->user ? acl_user->user : "",
- host,
- acl_user->host.hostname ? acl_user->host.hostname :
- ""));
+ user, acl_user->user ? acl_user->user : "",
+ host,
+ acl_user->host.hostname ? acl_user->host.hostname :
+ ""));
if (!acl_user->user && !user[0] ||
acl_user->user && !strcmp(user,acl_user->user))
{
@@ -1733,7 +1738,7 @@ static const char *calc_ip(const char *ip, long *val, char end)
static void update_hostname(acl_host_and_ip *host, const char *hostname)
{
- host->hostname=(char*) hostname; // This will not be modified!
+ host->hostname=(char*) hostname; // This will not be modified!
if (!hostname ||
(!(hostname=calc_ip(hostname,&host->ip,'/')) ||
!(hostname=calc_ip(hostname+1,&host->ip_mask,'\0'))))
@@ -1753,8 +1758,8 @@ static bool compare_hostname(const acl_host_and_ip *host, const char *hostname,
}
return (!host->hostname ||
(hostname && !wild_case_compare(system_charset_info,
- hostname,host->hostname)) ||
- (ip && !wild_compare(ip,host->hostname,0)));
+ hostname, host->hostname)) ||
+ (ip && !wild_compare(ip, host->hostname, 0)));
}
bool hostname_requires_resolving(const char *hostname)
@@ -2408,7 +2413,8 @@ static GRANT_NAME *name_hash_search(HASH *name_hash,
{
if (exact)
{
- if ((host &&
+ if (!grant_name->host.hostname ||
+ (host &&
!my_strcasecmp(system_charset_info, host,
grant_name->host.hostname)) ||
(ip && !strcmp(ip, grant_name->host.hostname)))
@@ -3515,8 +3521,10 @@ static my_bool grant_load(TABLE_LIST *tables)
{
sql_print_warning("'tables_priv' entry '%s %s@%s' "
"ignored in --skip-name-resolve mode.",
- mem_check->tname, mem_check->user,
- mem_check->host, mem_check->host);
+ mem_check->tname,
+ mem_check->user ? mem_check->user : "",
+ mem_check->host.hostname ?
+ mem_check->host.hostname : "");
continue;
}
}
@@ -3554,7 +3562,8 @@ static my_bool grant_load(TABLE_LIST *tables)
sql_print_warning("'procs_priv' entry '%s %s@%s' "
"ignored in --skip-name-resolve mode.",
mem_check->tname, mem_check->user,
- mem_check->host);
+ mem_check->host.hostname ?
+ mem_check->host.hostname : "");
continue;
}
}
@@ -4266,11 +4275,6 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
DBUG_RETURN(TRUE);
}
- if (!lex_user->host.str)
- {
- lex_user->host.str= (char*) "%";
- lex_user->host.length=1;
- }
if (lex_user->host.length > HOSTNAME_LENGTH ||
lex_user->user.length > USERNAME_LENGTH)
{
@@ -4480,16 +4484,17 @@ bool mysql_show_grants(THD *thd,LEX_USER *lex_user)
/* Add table & column access */
for (index=0 ; index < column_priv_hash.records ; index++)
{
- const char *user;
+ const char *user, *host;
GRANT_TABLE *grant_table= (GRANT_TABLE*) hash_element(&column_priv_hash,
index);
if (!(user=grant_table->user))
user= "";
+ if (!(host= grant_table->host.hostname))
+ host= "";
if (!strcmp(lex_user->user.str,user) &&
- !my_strcasecmp(system_charset_info, lex_user->host.str,
- grant_table->host.hostname))
+ !my_strcasecmp(system_charset_info, lex_user->host.str, host))
{
ulong table_access= grant_table->privs;
if ((table_access | grant_table->cols) != 0)
@@ -4616,15 +4621,16 @@ static int show_routine_grants(THD* thd, LEX_USER *lex_user, HASH *hash,
/* Add routine access */
for (index=0 ; index < hash->records ; index++)
{
- const char *user;
+ const char *user, *host;
GRANT_NAME *grant_proc= (GRANT_NAME*) hash_element(hash, index);
if (!(user=grant_proc->user))
user= "";
+ if (!(host= grant_proc->host.hostname))
+ host= "";
if (!strcmp(lex_user->user.str,user) &&
- !my_strcasecmp(system_charset_info, lex_user->host.str,
- grant_proc->host.hostname))
+ !my_strcasecmp(system_charset_info, lex_user->host.str, host))
{
ulong proc_access= grant_proc->privs;
if (proc_access != 0)
@@ -5079,39 +5085,37 @@ static int handle_grant_struct(uint struct_no, bool drop,
{
/*
Get a pointer to the element.
- Unfortunaltely, the host default differs for the structures.
*/
switch (struct_no) {
case 0:
acl_user= dynamic_element(&acl_users, idx, ACL_USER*);
user= acl_user->user;
- if (!(host= acl_user->host.hostname))
- host= "%";
- break;
+ host= acl_user->host.hostname;
+ break;
case 1:
acl_db= dynamic_element(&acl_dbs, idx, ACL_DB*);
user= acl_db->user;
- if (!(host= acl_db->host.hostname))
- host= "%";
+ host= acl_db->host.hostname;
break;
case 2:
grant_name= (GRANT_NAME*) hash_element(&column_priv_hash, idx);
user= grant_name->user;
- if (!(host= grant_name->host.hostname))
- host= "%";
+ host= grant_name->host.hostname;
break;
case 3:
grant_name= (GRANT_NAME*) hash_element(&proc_priv_hash, idx);
user= grant_name->user;
- if (!(host= grant_name->host.hostname))
- host= "%";
+ host= grant_name->host.hostname;
break;
}
if (! user)
user= "";
+ if (! host)
+ host= "";
+
#ifdef EXTRA_DEBUG
DBUG_PRINT("loop",("scan struct: %u index: %u user: '%s' host: '%s'",
struct_no, idx, user, host));
@@ -5696,8 +5700,10 @@ bool sp_revoke_privileges(THD *thd, const char *sp_db, const char *sp_name,
LEX_USER lex_user;
lex_user.user.str= grant_proc->user;
lex_user.user.length= strlen(grant_proc->user);
- lex_user.host.str= grant_proc->host.hostname;
- lex_user.host.length= strlen(grant_proc->host.hostname);
+ lex_user.host.str= grant_proc->host.hostname ?
+ grant_proc->host.hostname : (char*)"";
+ lex_user.host.length= grant_proc->host.hostname ?
+ strlen(grant_proc->host.hostname) : 0;
if (!replace_routine_table(thd,grant_proc,tables[4].table,lex_user,
grant_proc->db, grant_proc->tname,
is_proc, ~(ulong)0, 1))
@@ -6004,16 +6010,17 @@ int fill_schema_table_privileges(THD *thd, TABLE_LIST *tables, COND *cond)
for (index=0 ; index < column_priv_hash.records ; index++)
{
- const char *user, *is_grantable= "YES";
+ const char *user, *host, *is_grantable= "YES";
GRANT_TABLE *grant_table= (GRANT_TABLE*) hash_element(&column_priv_hash,
index);
if (!(user=grant_table->user))
user= "";
+ if (!(host= grant_table->host.hostname))
+ host= "";
if (no_global_access &&
(strcmp(thd->security_ctx->priv_user, user) ||
- my_strcasecmp(system_charset_info, curr_host,
- grant_table->host.hostname)))
+ my_strcasecmp(system_charset_info, curr_host, host)))
continue;
ulong table_access= grant_table->privs;
@@ -6029,7 +6036,7 @@ int fill_schema_table_privileges(THD *thd, TABLE_LIST *tables, COND *cond)
if (!(table_access & GRANT_ACL))
is_grantable= "NO";
- strxmov(buff,"'",user,"'@'",grant_table->host.hostname,"'",NullS);
+ strxmov(buff, "'", user, "'@'", host, "'", NullS);
if (!test_access)
update_schema_privilege(table, buff, grant_table->db, grant_table->tname,
0, 0, STRING_WITH_LEN("USAGE"), is_grantable);
@@ -6071,16 +6078,17 @@ int fill_schema_column_privileges(THD *thd, TABLE_LIST *tables, COND *cond)
for (index=0 ; index < column_priv_hash.records ; index++)
{
- const char *user, *is_grantable= "YES";
+ const char *user, *host, *is_grantable= "YES";
GRANT_TABLE *grant_table= (GRANT_TABLE*) hash_element(&column_priv_hash,
index);
if (!(user=grant_table->user))
user= "";
+ if (!(host= grant_table->host.hostname))
+ host= "";
if (no_global_access &&
(strcmp(thd->security_ctx->priv_user, user) ||
- my_strcasecmp(system_charset_info, curr_host,
- grant_table->host.hostname)))
+ my_strcasecmp(system_charset_info, curr_host, host)))
continue;
ulong table_access= grant_table->cols;
@@ -6090,7 +6098,7 @@ int fill_schema_column_privileges(THD *thd, TABLE_LIST *tables, COND *cond)
is_grantable= "NO";
ulong test_access= table_access & ~GRANT_ACL;
- strxmov(buff,"'",user,"'@'",grant_table->host.hostname,"'",NullS);
+ strxmov(buff, "'", user, "'@'", host, "'", NullS);
if (!test_access)
continue;
else
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 520684df8a8..a055a8df82d 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2010,14 +2010,17 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
#else
char *buff= thd->net.last_error;
#endif
+
+ STATUS_VAR current_global_status_var;
+ calc_sum_of_all_status(&current_global_status_var);
+
ulong uptime = (ulong) (thd->start_time - start_time);
sprintf((char*) buff,
"Uptime: %lu Threads: %d Questions: %lu Slow queries: %lu Opens: %lu Flush tables: %lu Open tables: %u Queries per second avg: %.3f",
uptime,
(int) thread_count, (ulong) thd->query_id,
- (ulong) thd->status_var.long_query_count,
- thd->status_var.opened_tables, refresh_version,
- cached_open_tables(),
+ current_global_status_var.long_query_count,
+ current_global_status_var.opened_tables, refresh_version, cached_open_tables(),
(uptime ? (ulonglong2double(thd->query_id) / (double) uptime) :
(double) 0));
#ifdef SAFEMALLOC
diff --git a/vio/Makefile.am b/vio/Makefile.am
index e1830fdc636..b57f2453f41 100644
--- a/vio/Makefile.am
+++ b/vio/Makefile.am
@@ -20,7 +20,7 @@ else
yassl_dummy_link_fix=
endif
INCLUDES= -I$(top_builddir)/include -I$(top_srcdir)/include \
- $(openssl_includes) $(yassl_includes)
+ $(openssl_includes)
LDADD= @CLIENT_EXTRA_LDFLAGS@ $(openssl_libs) $(yassl_libs)
pkglib_LIBRARIES= libvio.a
noinst_PROGRAMS = test-ssl test-sslserver test-sslclient