From: Nirbhay Choubey Date: June 8 2012 8:05pm Subject: bzr push into mysql-trunk branch (nirbhay.choubey:3979 to 3980) WL#5603 List-Archive: http://lists.mysql.com/commits/144151 Message-Id: <20120608200503.20039.39214.3980@Nirbhay-lenovo> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3980 Nirbhay Choubey 2012-06-09 WL#5603 : Revise how we handle passwords on the command line Addressing additional review comments. added: mysys_ssl/my_default_priv.h renamed: mysys_ssl/default.c => mysys_ssl/my_default.cc mysys_ssl/my_default.h => include/my_default.h mysys_ssl/my_getopt.c => mysys_ssl/my_getopt.cc modified: client/mysql_config_editor.cc extra/CMakeLists.txt extra/my_print_defaults.c libmysql/CMakeLists.txt libmysqld/CMakeLists.txt libmysqld/examples/CMakeLists.txt mysql-test/r/mysql_config_editor.result mysql-test/t/mysql_config_editor.test mysys/mysys_priv.h mysys_ssl/CMakeLists.txt sql/CMakeLists.txt storage/myisam/CMakeLists.txt tests/CMakeLists.txt mysys_ssl/my_default.cc include/my_default.h 3979 Bjorn Munch 2012-06-08 [merge] null upmerge === modified file 'client/mysql_config_editor.cc' --- a/client/mysql_config_editor.cc 2012-05-31 15:33:21 +0000 +++ b/client/mysql_config_editor.cc 2012-06-08 20:03:42 +0000 @@ -31,14 +31,15 @@ #include "my_aes.h" #include "client_priv.h" #include "my_default.h" +#include "my_default_priv.h" #define MYSQL_CONFIG_EDITOR_VERSION "1.0" #define MY_LINE_MAX 4096 /* Header length for the login file. - 4-byte (unused) + MY_LOGIN_KEY_LEN + 4-byte (unused) + LOGIN_KEY_LEN */ -#define MY_LOGIN_HEADER_LEN (4 + MY_LOGIN_KEY_LEN) +#define MY_LOGIN_HEADER_LEN (4 + LOGIN_KEY_LEN) static int g_fd; @@ -50,9 +51,10 @@ static size_t file_size; static char *opt_user= NULL, *opt_password= NULL, *opt_host=NULL, *opt_login_path= NULL; -static char my_key[MY_LOGIN_KEY_LEN]; +static char my_login_file[FN_REFLEN]; +static char my_key[LOGIN_KEY_LEN]; -static my_bool opt_verbose, opt_all, tty_password= 0; +static my_bool opt_verbose, opt_all, tty_password= 0, opt_warn; int execute_commands(int argc, char **argv); static void print_login_path(DYNAMIC_STRING *file_buf, const char *path_name); @@ -125,6 +127,9 @@ static struct my_option my_long_options[ &opt_verbose, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"version", 'V', "Output version information and exit.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"warn", 'w', "Warn and ask for confirmation if set command attempts to " + "overwrite an existing login path (enabled by default).", + &opt_warn, &opt_warn, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} }; @@ -135,7 +140,7 @@ get_one_option(int optid, const struct m { switch(optid) { case '#': - DBUG_PUSH(argument ? argument : "d:t:o,/tmp/mysqladmin.trace"); + DBUG_PUSH(argument ? argument : "d:t:o,/tmp/mysql_config_editor.trace"); break; case 'p': tty_password= 1; @@ -234,7 +239,22 @@ int execute_commands(int argc, char **ar dynstr_append(&path_buf, "\n"); - /* Check and remove opt_login_path if it already exists. */ + /* Warn if login path already exists */ + if (opt_warn && ((locate_login_path (&file_buf, opt_login_path)) + != NULL)) + { + int choice; + printf ("WARNING : \'%s\' path already exists and will be " + "overwritten. \n Continue? (Press y|Y for Yes, any " + "other key for No) : ", + opt_login_path); + choice= getchar(); + + if (choice != (int) 'y' && choice != (int) 'Y') + break; /* skip */ + } + + /* Remove the login path. */ remove_login_path(&file_buf, opt_login_path); /* Append the new login path to the file buffer. */ @@ -329,7 +349,7 @@ static my_bool check_and_create_login_fi const ushort create_mode_all= (S_IRWXU | S_IRWXG | S_IRWXO); /* Get the login file name. */ - if (! set_login_file_name()) + if (! my_default_get_login_file(my_login_file, sizeof(my_login_file))) { verbose_msg("Error! Failed to set login file name.\n"); goto error; @@ -808,7 +828,7 @@ static int encrypt_buffer(const char *pl aes_len= my_aes_get_size(plain_len); - if (my_aes_encrypt(plain, plain_len, cipher, my_key, MY_LOGIN_KEY_LEN) == aes_len) + if (my_aes_encrypt(plain, plain_len, cipher, my_key, LOGIN_KEY_LEN) == aes_len) { DBUG_RETURN(aes_len); } @@ -837,7 +857,7 @@ static int decrypt_buffer(const char *ci int aes_length; if ((aes_length= my_aes_decrypt(cipher, cipher_len, (char *) plain, - my_key, MY_LOGIN_KEY_LEN)) > 0) + my_key, LOGIN_KEY_LEN)) > 0) { DBUG_RETURN(aes_length); } @@ -873,8 +893,8 @@ int add_header(void) } /* Write the login key. */ - if ((my_write(g_fd, (const uchar *)my_key, MY_LOGIN_KEY_LEN, MYF(MY_WME))) - != MY_LOGIN_KEY_LEN) + if ((my_write(g_fd, (const uchar *)my_key, LOGIN_KEY_LEN, MYF(MY_WME))) + != LOGIN_KEY_LEN) { verbose_msg("Error! couldn't write to the file.\n"); goto error; @@ -899,7 +919,7 @@ void generate_login_key() verbose_msg("Generating a new key.\n"); /* Get a sequence of random non-printable ASCII */ - for (uint i= 0; i < MY_LOGIN_KEY_LEN; i++) + for (uint i= 0; i < LOGIN_KEY_LEN; i++) my_key[i]= (char)((int)(my_rnd_ssl(&rnd) * 100000) % 32); DBUG_VOID_RETURN; @@ -921,8 +941,8 @@ int read_login_key(void) if (my_seek(g_fd, 4, SEEK_SET, MYF(MY_WME)) != 4) DBUG_RETURN(-1); /* Error while seeking. */ - if (my_read(g_fd, (uchar *)my_key, MY_LOGIN_KEY_LEN, MYF(MY_WME)) - != MY_LOGIN_KEY_LEN) + if (my_read(g_fd, (uchar *)my_key, LOGIN_KEY_LEN, MYF(MY_WME)) + != LOGIN_KEY_LEN) { verbose_msg("Failed to read login key.\n"); DBUG_RETURN(-1); === modified file 'extra/CMakeLists.txt' --- a/extra/CMakeLists.txt 2012-05-31 15:33:21 +0000 +++ b/extra/CMakeLists.txt 2012-06-08 20:03:42 +0000 @@ -15,7 +15,6 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/include -${CMAKE_SOURCE_DIR}/mysys_ssl ${ZLIB_INCLUDE_DIR} # Following is for perror, in case NDB is compiled in. ${CMAKE_SOURCE_DIR}/storage/ndb/include === modified file 'extra/my_print_defaults.c' --- a/extra/my_print_defaults.c 2012-05-31 15:33:21 +0000 +++ b/extra/my_print_defaults.c 2012-06-08 20:03:42 +0000 @@ -31,6 +31,7 @@ const char *config_file="my"; /* Default config file */ +static char *my_login_path; uint verbose= 0, opt_defaults_file_used= 0; const char *default_dbug_option="d:t:o,/tmp/my_print_defaults.trace"; === renamed file 'mysys_ssl/my_default.h' => 'include/my_default.h' --- a/mysys_ssl/my_default.h 2012-05-31 15:33:21 +0000 +++ b/include/my_default.h 2012-06-08 20:03:42 +0000 @@ -16,45 +16,36 @@ #ifndef MY_DEFAULT_INCLUDED #define MY_DEFAULT_INCLUDED -/* - Number of byte used to store the length of - cipher that follows. -*/ -#define MAX_CIPHER_STORE_LEN 4U -#define MY_LOGIN_KEY_LEN 20U - -#ifdef __cplusplus -extern "C" { -#endif + +#include "my_global.h" + +C_MODE_START + extern const char *my_defaults_extra_file; extern const char *my_defaults_group_suffix; extern const char *my_defaults_file; -extern const char* my_login_file; -extern const char* my_login_path; extern my_bool my_getopt_use_args_separator; /* Define the type of function to be passed to process_default_option_files */ typedef int (*Process_option_func)(void *ctx, const char *group_name, const char *option); -extern my_bool my_getopt_is_args_separator(const char* arg); -extern int get_defaults_options(int argc, char **argv, - char **defaults, char **extra_defaults, - char **group_suffix, char **login_path); -extern int my_load_defaults(const char *conf_file, const char **groups, - int *argc, char ***argv, const char ***); -extern int load_defaults(const char *conf_file, const char **groups, - int *argc, char ***argv); -extern int my_search_option_files(const char *conf_file, int *argc, - char ***argv, uint *args_used, - Process_option_func func, void *func_ctx, - const char **default_directories); -extern void free_defaults(char **argv); -extern void my_print_default_files(const char *conf_file); -extern void print_defaults(const char *conf_file, const char **groups); -extern int set_login_file_name(); -#ifdef __cplusplus -} -#endif +my_bool my_getopt_is_args_separator(const char* arg); +int get_defaults_options(int argc, char **argv, + char **defaults, char **extra_defaults, + char **group_suffix, char **login_path); +int my_load_defaults(const char *conf_file, const char **groups, + int *argc, char ***argv, const char ***); +int load_defaults(const char *conf_file, const char **groups, + int *argc, char ***argv); +int my_search_option_files(const char *conf_file, int *argc, + char ***argv, uint *args_used, + Process_option_func func, void *func_ctx, + const char **default_directories); +void free_defaults(char **argv); +void my_print_default_files(const char *conf_file); +void print_defaults(const char *conf_file, const char **groups); + +C_MODE_END #endif // MY_DEFAULT_INCLUDED === modified file 'libmysql/CMakeLists.txt' --- a/libmysql/CMakeLists.txt 2012-06-04 15:35:18 +0000 +++ b/libmysql/CMakeLists.txt 2012-06-08 20:03:42 +0000 @@ -19,7 +19,6 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/regex ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/strings - ${CMAKE_SOURCE_DIR}/mysys_ssl ${SSL_INCLUDE_DIRS} ${SSL_INTERNAL_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIR}) === modified file 'libmysqld/CMakeLists.txt' --- a/libmysqld/CMakeLists.txt 2012-05-31 15:33:21 +0000 +++ b/libmysqld/CMakeLists.txt 2012-06-08 20:03:42 +0000 @@ -23,7 +23,6 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/sql ${CMAKE_BINARY_DIR}/sql ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/mysys_ssl ${ZLIB_INCLUDE_DIR} ${SSL_INCLUDE_DIRS} ${SSL_INTERNAL_INCLUDE_DIRS} === modified file 'libmysqld/examples/CMakeLists.txt' --- a/libmysqld/examples/CMakeLists.txt 2012-05-31 15:33:21 +0000 +++ b/libmysqld/examples/CMakeLists.txt 2012-06-08 20:03:42 +0000 @@ -16,7 +16,6 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/libmysqld/include ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/mysys_ssl ${READLINE_INCLUDE_DIR} ) === modified file 'mysql-test/r/mysql_config_editor.result' --- a/mysql-test/r/mysql_config_editor.result 2012-05-31 15:33:21 +0000 +++ b/mysql-test/r/mysql_config_editor.result 2012-06-08 20:03:42 +0000 @@ -100,6 +100,9 @@ MySQL Configuration Tool. -u, --user=name User name to be entered into the login file. -v, --verbose Write more information. -V, --version Output version information and exit. + -w, --warn Warn and ask for confirmation if set command attempts to + overwrite an existing login path (enabled by default). + (Defaults to on; use --skip-warn to disable.) Variables (--variable-name=value) and boolean options {FALSE|TRUE} Value (after reading options) @@ -109,6 +112,7 @@ host (No de login-path client user (No default value) verbose FALSE +warn TRUE Where command can be any one of the following : set [options] Sets username/password/hostname for a === modified file 'mysql-test/t/mysql_config_editor.test' --- a/mysql-test/t/mysql_config_editor.test 2012-05-31 15:33:21 +0000 +++ b/mysql-test/t/mysql_config_editor.test 2012-06-08 20:03:42 +0000 @@ -45,8 +45,8 @@ --echo --echo # --echo # Overwrite existing paths, test-login-path2 & default ---exec $MYSQL_CONFIG_EDITOR set --user=test_user4 --login-path=test-login-path2 ---exec $MYSQL_CONFIG_EDITOR set --user=test_user5 +--exec $MYSQL_CONFIG_EDITOR set --user=test_user4 --login-path=test-login-path2 --skip-warn +--exec $MYSQL_CONFIG_EDITOR set --user=test_user5 --skip-warn --echo # --echo # all the paths again --exec $MYSQL_CONFIG_EDITOR print --all 2>&1 === modified file 'mysys/mysys_priv.h' --- a/mysys/mysys_priv.h 2011-09-07 10:08:09 +0000 +++ b/mysys/mysys_priv.h 2012-06-08 20:03:42 +0000 @@ -66,7 +66,7 @@ extern mysql_mutex_t THR_LOCK_charset; #ifdef HUGETLB_USE_PROC_MEMINFO extern PSI_file_key key_file_proc_meminfo; #endif /* HUGETLB_USE_PROC_MEMINFO */ -extern PSI_file_key key_file_charset, key_file_cnf; +extern PSI_file_key key_file_charset; #endif /* HAVE_PSI_INTERFACE */ /* === modified file 'mysys_ssl/CMakeLists.txt' --- a/mysys_ssl/CMakeLists.txt 2012-06-05 12:03:10 +0000 +++ b/mysys_ssl/CMakeLists.txt 2012-06-08 20:03:42 +0000 @@ -29,7 +29,7 @@ IF(HAVE_VISIBILITY_HIDDEN) PROPERTIES COMPILE_FLAGS "-fvisibility=hidden") ENDIF() -SET(MYSYS_SSL_SOURCES default.c my_getopt.c my_aes.cc) +SET(MYSYS_SSL_SOURCES my_default.cc my_getopt.cc my_aes.cc) ADD_CONVENIENCE_LIBRARY(mysys_ssl ${MYSYS_SSL_SOURCES}) TARGET_LINK_LIBRARIES(mysys_ssl dbug strings ${SSL_LIBRARIES}) === renamed file 'mysys_ssl/default.c' => 'mysys_ssl/my_default.cc' --- a/mysys_ssl/default.c 2012-05-31 15:33:21 +0000 +++ b/mysys_ssl/my_default.cc 2012-06-08 20:03:42 +0000 @@ -38,6 +38,7 @@ #include "../mysys/mysys_priv.h" #include "my_default.h" +#include "my_default_priv.h" #include "m_string.h" #include "m_ctype.h" #include @@ -46,6 +47,12 @@ #include #endif +C_MODE_START +#ifdef HAVE_PSI_INTERFACE +extern PSI_file_key key_file_cnf; +#endif +C_MODE_END + /** arguments separator @@ -93,14 +100,14 @@ my_bool my_getopt_is_args_separator(cons const char *my_defaults_file=0; const char *my_defaults_group_suffix=0; const char *my_defaults_extra_file=0; -const char *my_login_path= 0; -const char *my_login_file= 0; + +static const char *my_login_path= 0; static char my_defaults_file_buffer[FN_REFLEN]; static char my_defaults_extra_file_buffer[FN_REFLEN]; -static char my_login_file_buffer[FN_REFLEN]; -const char my_key[MY_LOGIN_KEY_LEN]; +static char my_login_file[FN_REFLEN]; +static char my_key[LOGIN_KEY_LEN]; static my_bool defaults_already_read= FALSE; @@ -312,7 +319,8 @@ int my_search_option_files(const char *c extra_groups[i]= group->type_names[i]; /** copy group */ len= strlen(extra_groups[i]); - if (!(ptr= alloc_root(ctx->alloc, (uint) (len+instance_len+1)))) + if (!(ptr= (char *) alloc_root(ctx->alloc, + (uint) (len + instance_len + 1)))) DBUG_RETURN(2); extra_groups[i+group->count]= ptr; @@ -355,7 +363,8 @@ int my_search_option_files(const char *c instance_len= strlen(my_defaults_group_suffix); len= strlen(extra_groups[i]); - if (!(ptr= alloc_root(ctx->alloc, (uint) (len + instance_len + 1)))) + if (!(ptr= (char *) alloc_root(ctx->alloc, + (uint) (len + instance_len + 1)))) DBUG_RETURN(2); extra_groups[i + 1]= ptr; @@ -456,7 +465,7 @@ static int handle_default_option(void *i if (find_type((char *)group_name, ctx->group, FIND_TYPE_NO_PREFIX)) { - if (!(tmp= alloc_root(ctx->alloc, strlen(option) + 1))) + if (!(tmp= (char *) alloc_root(ctx->alloc, strlen(option) + 1))) return 1; if (insert_dynamic(ctx->args, &tmp)) return 1; @@ -652,8 +661,8 @@ int my_load_defaults(const char *conf_fi ctx.group= &group; if ((error= my_search_option_files(conf_file, argc, argv, - &args_used, handle_default_option, - (void *) &ctx, dirs))) + &args_used, handle_default_option, + (void *) &ctx, dirs))) { free_root(&alloc,MYF(0)); DBUG_RETURN(error); @@ -661,7 +670,7 @@ int my_load_defaults(const char *conf_fi /* Read options from login group. */ is_login_file= TRUE; - if (set_login_file_name() && + if (my_default_get_login_file(my_login_file, sizeof(my_login_file)) && (error= my_search_option_files(my_login_file,argc, argv, &args_used, handle_default_option, (void *) &ctx, dirs))) @@ -1156,8 +1165,8 @@ static my_bool mysql_file_getline(char * { /* Move past unused bytes. */ mysql_file_fseek(file, 4, SEEK_SET, MYF(MY_WME)); - if (mysql_file_fread(file, (uchar *) my_key, MY_LOGIN_KEY_LEN, - MYF(MY_WME)) != MY_LOGIN_KEY_LEN) + if (mysql_file_fread(file, (uchar *) my_key, LOGIN_KEY_LEN, + MYF(MY_WME)) != LOGIN_KEY_LEN) return 0; } @@ -1173,7 +1182,7 @@ static my_bool mysql_file_getline(char * mysql_file_fread(file, cipher, cipher_len, MYF(MY_WME)); if ((length= my_aes_decrypt((const char *) cipher, cipher_len, str, - my_key, MY_LOGIN_KEY_LEN)) < 0) + my_key, LOGIN_KEY_LEN)) < 0) { /* Attempt to decrypt failed. */ return 0; @@ -1417,30 +1426,39 @@ static const char **init_default_directo } /** - Generate and store the login file name in my_login_file. + Place the login file name in the specified buffer. + + @param file_name [out] Buffer to hold login file name + @param file_name_size [in] Length of the buffer @return 1 - Success 0 - Failure */ -int set_login_file_name() +int my_default_get_login_file(char *file_name, size_t file_name_size) { - /* Read options from login group. */ - if (getenv("MYSQL_TEST_LOGIN_FILE")) - sprintf(my_login_file_buffer, "%s", getenv("MYSQL_TEST_LOGIN_FILE")); + size_t rc; + + if (getenv("MYSQL_TEST_LOGIN_FILE")) + rc= my_snprintf(file_name, file_name_size, "%s", + getenv("MYSQL_TEST_LOGIN_FILE")); #ifdef _WIN32 - else if (getenv("APPDATA")) - sprintf(my_login_file_buffer, "%s\\MySQL\\.mylogin.cnf", getenv("APPDATA")); + else if (getenv("APPDATA")) + rc= my_snprintf(file_name, file_name_size, "%s\\MySQL\\.mylogin.cnf", + getenv("APPDATA")); #else - else if (getenv("HOME")) - sprintf(my_login_file_buffer, "%s/.mylogin.cnf", getenv("HOME")); + else if (getenv("HOME")) + rc= my_snprintf(file_name, file_name_size, "%s/.mylogin.cnf", + getenv("HOME")); #endif - else - { - my_login_file= NULL; - return 0; - } - my_login_file= my_login_file_buffer; - return 1; -} + else + { + memset(file_name, 0, sizeof(file_name)); + return 0; + } + /* Anything <= 0 will be treated as error. */ + if (rc <= 0) + return 0; + return 1; +} === added file 'mysys_ssl/my_default_priv.h' --- a/mysys_ssl/my_default_priv.h 1970-01-01 00:00:00 +0000 +++ b/mysys_ssl/my_default_priv.h 2012-06-08 20:03:42 +0000 @@ -0,0 +1,43 @@ +/* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + + 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, + 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ + +#ifndef MY_DEFAULT_PRIV_INCLUDED +#define MY_DEFAULT_PRIV_INCLUDED + +#include "my_global.h" /* C_MODE_START, C_MODE_END */ + +/* + Number of byte used to store the length of + cipher that follows. +*/ +#define MAX_CIPHER_STORE_LEN 4U +#define LOGIN_KEY_LEN 20U + +C_MODE_START + +/** + Place the login file name in the specified buffer. + + @param file_name [out] Buffer to hold login file name + @param file_name_size [in] Length of the buffer + + @return 1 - Success + 0 - Failure +*/ +int my_default_get_login_file(char *file_name, size_t file_name_size); + +C_MODE_END + +#endif /* MY_DEFAULT_PRIV_INCLUDED */ === renamed file 'mysys_ssl/my_getopt.c' => 'mysys_ssl/my_getopt.cc' === modified file 'sql/CMakeLists.txt' --- a/sql/CMakeLists.txt 2012-06-04 15:35:18 +0000 +++ b/sql/CMakeLists.txt 2012-06-08 20:03:42 +0000 @@ -17,7 +17,6 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/regex - ${CMAKE_SOURCE_DIR}/mysys_ssl ${ZLIB_INCLUDE_DIR} ${SSL_INCLUDE_DIRS} ${CMAKE_BINARY_DIR}/sql === modified file 'storage/myisam/CMakeLists.txt' --- a/storage/myisam/CMakeLists.txt 2012-05-31 15:33:21 +0000 +++ b/storage/myisam/CMakeLists.txt 2012-06-08 20:03:42 +0000 @@ -13,7 +13,6 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/mysys_ssl) SET(MYISAM_SOURCES ft_boolean_search.c ft_nlq_search.c ft_parser.c ft_static.c ha_myisam.cc === modified file 'tests/CMakeLists.txt' --- a/tests/CMakeLists.txt 2012-05-31 15:33:21 +0000 +++ b/tests/CMakeLists.txt 2012-06-08 20:03:42 +0000 @@ -15,9 +15,7 @@ ADD_DEFINITIONS("-DMYSQL_CLIENT") -INCLUDE_DIRECTORIES( - ${CMAKE_SOURCE_DIR}/include - ${CMAKE_SOURCE_DIR}/mysys_ssl) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) ADD_EXECUTABLE(mysql_client_test mysql_client_test.c) TARGET_LINK_LIBRARIES(mysql_client_test mysqlclient) No bundle (reason: useless for push emails).