From: Tor Didriksen Date: May 18 2012 1:59pm Subject: bzr push into mysql-trunk branch (tor.didriksen:3865 to 3866) WL#5603 List-Archive: http://lists.mysql.com/commits/143849 Message-Id: <201205181359.q4IDx9tw029858@acsmt356.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3866 Tor Didriksen 2012-05-18 WL#5603 Revise how we handle passwords on the command line Fix some linking problems on various platforms. All executables which link with mysys_ssl must be linked with C++ SET_TARGET_PROPERTIES( PROPERTIES LINKER_LANGUAGE CXX) Add new header file mysys_ssl/my_default.h (TODO: move all declarations pertaining to default.c here) MAX_CIPHER_STORE_LEN must be a #define, since it is used for stack allocation of arrays (windows requirement) @ client/mysql_config_editor.cc Fix some compile warnings - always include my_config.h first - avoid 'while(condition);' use empty braces instead. @ unittest/gunit/CMakeLists.txt The unit test main programs also need the mysys_ssl library. added: mysys_ssl/my_default.h modified: client/CMakeLists.txt client/mysql_config_editor.cc extra/CMakeLists.txt extra/my_print_defaults.c include/my_sys.h mysys_ssl/default.c storage/myisam/CMakeLists.txt unittest/gunit/CMakeLists.txt 3865 Nirbhay Choubey 2012-05-17 WL#5603 : Revise how we handle passwords on the command line removed: include/rijndael.h mysys/rijndael.c added: client/mysql_config_editor.cc mysql-test/r/mysql_config_editor.result mysql-test/t/mysql_config_editor.test mysys_ssl/ mysys_ssl/CMakeLists.txt mysys_ssl/my_aes.cc renamed: mysys/default.c => mysys_ssl/default.c mysys/my_getopt.c => mysys_ssl/my_getopt.c modified: CMakeLists.txt client/CMakeLists.txt client/client_priv.h extra/CMakeLists.txt extra/my_print_defaults.c extra/yassl/taocrypt/include/misc.hpp include/my_aes.h include/my_sys.h libmysql/CMakeLists.txt libmysqld/CMakeLists.txt mysql-test/lib/v1/mysql-test-run.pl mysql-test/mysql-test-run.pl mysys/CMakeLists.txt sql/CMakeLists.txt storage/myisam/CMakeLists.txt mysys_ssl/default.c mysys_ssl/my_getopt.c === modified file 'client/CMakeLists.txt' --- a/client/CMakeLists.txt 2012-05-17 13:22:24 +0000 +++ b/client/CMakeLists.txt 2012-05-18 13:52:53 +0000 @@ -15,6 +15,7 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/mysys_ssl ${ZLIB_INCLUDE_DIR} ${SSL_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/libmysql === modified file 'client/mysql_config_editor.cc' --- a/client/mysql_config_editor.cc 2012-05-17 13:22:24 +0000 +++ b/client/mysql_config_editor.cc 2012-05-18 13:52:53 +0000 @@ -23,11 +23,13 @@ */ /* ORACLE_WELCOME_COPYRIGHT_NOTICE */ +#include "my_config.h" #include #include #include #include "my_aes.h" #include "client_priv.h" +#include "my_default.h" #define MYSQL_CONFIG_EDITOR_VERSION "1.0" #define MY_LINE_MAX 1024 @@ -272,6 +274,15 @@ static my_bool check_and_create_login_fi MY_STAT stat_info; +// This is a hack to make it compile. File permissions are different on Windows. +#ifdef _WIN32 +#define S_IRUSR 00400 +#define S_IWUSR 00200 +#define S_IRWXU 00700 +#define S_IRWXG 00070 +#define S_IRWXO 00007 +#endif + const int access_flag= (O_RDWR); const ushort create_mode= (S_IRUSR | S_IWUSR ); const ushort create_mode_all= (S_IRWXU | S_IRWXG | S_IRWXO); @@ -417,12 +428,14 @@ static void mask_password_and_print(char while ((next= strstr(buf, password_str)) != NULL) { - while ( *buf != 0 && buf != next) putc( *(buf ++), stdout); + while ( *buf != 0 && buf != next) + putc( *(buf ++), stdout); printf("%s", password_str); printf("%s", mask); /* Ignore the password. */ - while( *buf && *(++buf) != '\n'); + while( *buf && *(++buf) != '\n') + {} if ( !opt_all) break; @@ -590,7 +603,7 @@ static int encrypt_and_write_file(DYNAMI break; if ((enc_len= encrypt_buffer(&file_buf->str[bytes_read], - ++ len, cipher + max_cipher_store_len)) < 0) + ++ len, cipher + MAX_CIPHER_STORE_LEN)) < 0) { verbose_msg("Error! failed to encrypt the login file buffer..\n"); goto error; @@ -600,8 +613,8 @@ static int encrypt_and_write_file(DYNAMI /* Store cipher length first. */ int4store(cipher, enc_len); - if ((my_write(fd, (const uchar *)cipher, enc_len + max_cipher_store_len, - MYF(MY_WME))) != (enc_len + max_cipher_store_len)) + if ((my_write(fd, (const uchar *)cipher, enc_len + MAX_CIPHER_STORE_LEN, + MYF(MY_WME))) != (enc_len + MAX_CIPHER_STORE_LEN)) { verbose_msg("Error! couldn't write to the file..\n"); goto error; @@ -635,12 +648,12 @@ static int read_and_decrypt_file(DYNAMIC DBUG_ENTER("read_and_decrypt_file"); char cipher[MY_LINE_MAX], plain[MY_LINE_MAX]; - uchar len_buf[max_cipher_store_len]; + uchar len_buf[MAX_CIPHER_STORE_LEN]; int cipher_len= 0, dec_len= 0, total_len= 0; /* First read the length of the cipher. */ - while (my_read(fd, len_buf, max_cipher_store_len, - MYF(MY_WME)) == max_cipher_store_len) + while (my_read(fd, len_buf, MAX_CIPHER_STORE_LEN, + MYF(MY_WME)) == MAX_CIPHER_STORE_LEN) { cipher_len= sint4korr(len_buf); /* Now read 'cipher_len' bytes from the file. */ === modified file 'extra/CMakeLists.txt' --- a/extra/CMakeLists.txt 2012-05-17 13:22:24 +0000 +++ b/extra/CMakeLists.txt 2012-05-18 13:52:53 +0000 @@ -15,6 +15,7 @@ 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 @@ -29,6 +30,7 @@ SET(MYSQL_INSTALL_COMPONENT Server) IF(NOT CMAKE_CROSSCOMPILING) ADD_EXECUTABLE(comp_err comp_err.c) TARGET_LINK_LIBRARIES(comp_err mysys mysys_ssl) + SET_TARGET_PROPERTIES(comp_err PROPERTIES LINKER_LANGUAGE CXX) ENDIF() ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/include/mysqld_error.h @@ -52,13 +54,16 @@ ADD_CUSTOM_TARGET(GenError MYSQL_ADD_EXECUTABLE(my_print_defaults my_print_defaults.c) TARGET_LINK_LIBRARIES(my_print_defaults mysys mysys_ssl) +SET_TARGET_PROPERTIES(my_print_defaults PROPERTIES LINKER_LANGUAGE CXX) MYSQL_ADD_EXECUTABLE(perror perror.c) ADD_DEPENDENCIES(perror GenError) TARGET_LINK_LIBRARIES(perror mysys mysys_ssl) +SET_TARGET_PROPERTIES(perror PROPERTIES LINKER_LANGUAGE CXX) MYSQL_ADD_EXECUTABLE(resolveip resolveip.c) TARGET_LINK_LIBRARIES(resolveip mysys mysys_ssl) +SET_TARGET_PROPERTIES(resolveip PROPERTIES LINKER_LANGUAGE CXX) IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS") INCLUDE(CheckFunctionExists) INCLUDE(CheckLibraryExists) @@ -87,8 +92,10 @@ ENDIF() IF(UNIX) MYSQL_ADD_EXECUTABLE(resolve_stack_dump resolve_stack_dump.c) TARGET_LINK_LIBRARIES(resolve_stack_dump mysys mysys_ssl) + SET_TARGET_PROPERTIES(resolve_stack_dump PROPERTIES LINKER_LANGUAGE CXX) MYSQL_ADD_EXECUTABLE(mysql_waitpid mysql_waitpid.c) TARGET_LINK_LIBRARIES(mysql_waitpid mysys mysys_ssl) + SET_TARGET_PROPERTIES(mysql_waitpid PROPERTIES LINKER_LANGUAGE CXX) ENDIF() === modified file 'extra/my_print_defaults.c' --- a/extra/my_print_defaults.c 2012-05-17 13:22:24 +0000 +++ b/extra/my_print_defaults.c 2012-05-18 13:52:53 +0000 @@ -27,6 +27,7 @@ #include #include #include +#include "my_default.h" const char *config_file="my"; /* Default config file */ === modified file 'include/my_sys.h' --- a/include/my_sys.h 2012-05-17 13:22:24 +0000 +++ b/include/my_sys.h 2012-05-18 13:52:53 +0000 @@ -272,10 +272,6 @@ extern my_bool my_disable_locking, my_d my_disable_flush_key_blocks, my_disable_symlinks; extern char wild_many,wild_one,wild_prefix; extern const char *charsets_dir; -/* from default.c */ -extern const char *my_defaults_extra_file; -extern const char *my_defaults_group_suffix; -extern const char *my_defaults_file; extern my_bool timed_mutexes; @@ -844,7 +840,6 @@ extern int get_defaults_options(int argc char **group_suffix, char **login_path); extern my_bool my_getopt_use_args_separator; extern const char* my_key; -extern const uint max_cipher_store_len; extern my_bool my_getopt_is_args_separator(const char* arg); extern int my_load_defaults(const char *conf_file, const char **groups, int *argc, char ***argv, const char ***); === modified file 'mysys_ssl/default.c' --- a/mysys_ssl/default.c 2012-05-17 13:22:24 +0000 +++ b/mysys_ssl/default.c 2012-05-18 13:52:53 +0000 @@ -34,6 +34,7 @@ ****************************************************************************/ #include "../mysys/mysys_priv.h" +#include "my_default.h" #include "m_string.h" #include "m_ctype.h" #include @@ -96,12 +97,6 @@ static char my_defaults_extra_file_buffe char my_login_file[FN_REFLEN]; const char *my_key= "..May..the..force..be..with..you.."; -/* - Number of byte used to store the length of - cipher that follows. -*/ -const uint max_cipher_store_len= 4; - static my_bool defaults_already_read= FALSE; /* Set to TRUE, if --no-defaults is found. */ @@ -1136,13 +1131,13 @@ static char *remove_end_comment(char *pt static my_bool mysql_file_getline(char *str, int size, MYSQL_FILE *file) { - uchar cipher[4096], len_buf[max_cipher_store_len]; + uchar cipher[4096], len_buf[MAX_CIPHER_STORE_LEN]; int length= 0, cipher_len= 0; if (is_login_file) { - if (mysql_file_fread(file, len_buf, max_cipher_store_len, - MYF(MY_WME)) == max_cipher_store_len) + if (mysql_file_fread(file, len_buf, MAX_CIPHER_STORE_LEN, + MYF(MY_WME)) == MAX_CIPHER_STORE_LEN) { cipher_len= sint4korr(len_buf); if (cipher_len > size) === added file 'mysys_ssl/my_default.h' --- a/mysys_ssl/my_default.h 1970-01-01 00:00:00 +0000 +++ b/mysys_ssl/my_default.h 2012-05-18 13:52:53 +0000 @@ -0,0 +1,29 @@ +/* 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, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02111-1307 USA */ + +#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 + +extern const char *my_defaults_extra_file; +extern const char *my_defaults_group_suffix; +extern const char *my_defaults_file; + +#endif // MY_DEFAULT_INCLUDED === modified file 'storage/myisam/CMakeLists.txt' --- a/storage/myisam/CMakeLists.txt 2012-05-17 13:22:24 +0000 +++ b/storage/myisam/CMakeLists.txt 2012-05-18 13:52:53 +0000 @@ -35,19 +35,23 @@ TARGET_LINK_LIBRARIES(myisam mysys) MYSQL_ADD_EXECUTABLE(myisam_ftdump myisam_ftdump.c) TARGET_LINK_LIBRARIES(myisam_ftdump myisam mysys_ssl) +SET_TARGET_PROPERTIES(myisam_ftdump PROPERTIES LINKER_LANGUAGE CXX) MYSQL_ADD_EXECUTABLE(myisamchk myisamchk.c) TARGET_LINK_LIBRARIES(myisamchk myisam mysys_ssl) +SET_TARGET_PROPERTIES(myisamchk PROPERTIES LINKER_LANGUAGE CXX) MYSQL_ADD_EXECUTABLE(myisamlog myisamlog.c) TARGET_LINK_LIBRARIES(myisamlog myisam) MYSQL_ADD_EXECUTABLE(myisampack myisampack.c) TARGET_LINK_LIBRARIES(myisampack myisam mysys_ssl) +SET_TARGET_PROPERTIES(myisampack PROPERTIES LINKER_LANGUAGE CXX) IF(WITH_UNIT_TESTS AND FALSE) ADD_EXECUTABLE(mi_test1 mi_test1.c) TARGET_LINK_LIBRARIES(mi_test1 myisam mysys_ssl) + SET_TARGET_PROPERTIES(mi_test1 PROPERTIES LINKER_LANGUAGE CXX) ADD_EXECUTABLE(mi_test2 mi_test2.c) TARGET_LINK_LIBRARIES(mi_test2 myisam) === modified file 'unittest/gunit/CMakeLists.txt' --- a/unittest/gunit/CMakeLists.txt 2012-05-07 12:05:48 +0000 +++ b/unittest/gunit/CMakeLists.txt 2012-05-18 13:52:53 +0000 @@ -201,8 +201,10 @@ ADD_LIBRARY(gunit_large STATIC gunit_test_main_server.cc test_utils.cc tap_event_listener.cc thread_utils.cc) ADD_DEPENDENCIES(gunit_small GenError) ADD_DEPENDENCIES(gunit_large GenError) -TARGET_LINK_LIBRARIES(gunit_small mysys mytap dbug strings ${GTEST_LIBRARIES}) -TARGET_LINK_LIBRARIES(gunit_large mysys mytap dbug strings ${GTEST_LIBRARIES}) +TARGET_LINK_LIBRARIES(gunit_small + mysys mysys_ssl mytap dbug strings ${GTEST_LIBRARIES}) +TARGET_LINK_LIBRARIES(gunit_large + mysys mysys_ssl mytap dbug strings ${GTEST_LIBRARIES}) MESSAGE(STATUS "GTEST_LIBRARIES:${GTEST_LIBRARIES}") # Add some defines. No bundle (reason: useless for push emails).