Loading config/ac-macros/compiler_flag.m4 +22 −0 Original line number Diff line number Diff line Loading @@ -38,3 +38,25 @@ AC_DEFUN([AC_SYS_OS_COMPILER_FLAG], fi ]) AC_DEFUN([AC_CHECK_NOEXECSTACK], [ AC_CACHE_CHECK(whether --noexecstack is desirable for .S files, mysql_cv_as_noexecstack, [dnl cat > conftest.c <<EOF void foo (void) { } EOF if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \ && grep .note.GNU-stack conftest.s >/dev/null \ && AC_TRY_COMMAND([${CC-cc} $CCASFLAGS $CPPFLAGS -Wa,--noexecstack -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD]) then mysql_cv_as_noexecstack=yes else mysql_cv_as_noexecstack=no fi rm -f conftest*]) if test $mysql_cv_as_noexecstack = yes; then CCASFLAGS="$CCASFLAGS -Wa,--noexecstack" fi ]) configure.in +4 −0 Original line number Diff line number Diff line Loading @@ -515,6 +515,10 @@ AM_PROG_CC_STDC # We need an assembler, too AM_PROG_AS CCASFLAGS="$CCASFLAGS $ASFLAGS" # Check if we need noexec stack for assembler AC_CHECK_NOEXECSTACK if test "$am_cv_prog_cc_stdc" = "no" then Loading include/sql_common.h +1 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ extern const char *not_error_sqlstate; extern "C" { #endif extern CHARSET_INFO *default_client_charset_info; MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, my_bool default_value, uint server_capabilities); void free_rows(MYSQL_DATA *cur); Loading libmysqld/lib_sql.cc +7 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ extern "C" int check_user(THD *thd, enum enum_server_command command, const char *passwd, uint passwd_len, const char *db, bool check_count); void thd_init_client_charset(THD *thd, uint cs_number); C_MODE_START #include <mysql.h> Loading Loading @@ -600,11 +602,14 @@ void *create_embedded_thd(int client_flag, char *db) return NULL; } #ifdef NO_EMBEDDED_ACCESS_CHECKS int check_embedded_connection(MYSQL *mysql) { int result; THD *thd= (THD*)mysql->thd; thd_init_client_charset(thd, mysql->charset->number); thd->update_charset(); Security_context *sctx= thd->security_ctx; sctx->host_or_ip= sctx->host= (char*) my_localhost; strmake(sctx->priv_host, (char*) my_localhost, MAX_HOSTNAME-1); Loading @@ -623,6 +628,8 @@ int check_embedded_connection(MYSQL *mysql) char scramble_buff[SCRAMBLE_LENGTH]; int passwd_len; thd_init_client_charset(thd, mysql->charset->number); thd->update_charset(); if (mysql->options.client_ip) { sctx->host= my_strdup(mysql->options.client_ip, MYF(0)); Loading libmysqld/libmysqld.c +3 −45 Original line number Diff line number Diff line Loading @@ -90,49 +90,7 @@ static void end_server(MYSQL *mysql) } static int mysql_init_charset(MYSQL *mysql) { char charset_name_buff[16], *charset_name; if ((charset_name=mysql->options.charset_name)) { const char *save=charsets_dir; if (mysql->options.charset_dir) charsets_dir=mysql->options.charset_dir; mysql->charset=get_charset_by_name(mysql->options.charset_name, MYF(MY_WME)); charsets_dir=save; } else if (mysql->server_language) { charset_name=charset_name_buff; sprintf(charset_name,"%d",mysql->server_language); /* In case of errors */ mysql->charset=get_charset((uint8) mysql->server_language, MYF(MY_WME)); } else mysql->charset=default_charset_info; if (!mysql->charset) { mysql->net.last_errno=CR_CANT_READ_CHARSET; strmov(mysql->net.sqlstate, "HY0000"); if (mysql->options.charset_dir) sprintf(mysql->net.last_error,ER(mysql->net.last_errno), charset_name ? charset_name : "unknown", mysql->options.charset_dir); else { char cs_dir_name[FN_REFLEN]; get_charsets_dir(cs_dir_name); sprintf(mysql->net.last_error,ER(mysql->net.last_errno), charset_name ? charset_name : "unknown", cs_dir_name); } return mysql->net.last_errno; } return 0; } int mysql_init_character_set(MYSQL *mysql); MYSQL * STDCALL mysql_real_connect(MYSQL *mysql,const char *host, const char *user, Loading Loading @@ -222,10 +180,10 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, init_embedded_mysql(mysql, client_flag, db_name); if (check_embedded_connection(mysql)) if (mysql_init_character_set(mysql)) goto error; if (mysql_init_charset(mysql)) if (check_embedded_connection(mysql)) goto error; mysql->server_status= SERVER_STATUS_AUTOCOMMIT; Loading Loading
config/ac-macros/compiler_flag.m4 +22 −0 Original line number Diff line number Diff line Loading @@ -38,3 +38,25 @@ AC_DEFUN([AC_SYS_OS_COMPILER_FLAG], fi ]) AC_DEFUN([AC_CHECK_NOEXECSTACK], [ AC_CACHE_CHECK(whether --noexecstack is desirable for .S files, mysql_cv_as_noexecstack, [dnl cat > conftest.c <<EOF void foo (void) { } EOF if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \ && grep .note.GNU-stack conftest.s >/dev/null \ && AC_TRY_COMMAND([${CC-cc} $CCASFLAGS $CPPFLAGS -Wa,--noexecstack -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD]) then mysql_cv_as_noexecstack=yes else mysql_cv_as_noexecstack=no fi rm -f conftest*]) if test $mysql_cv_as_noexecstack = yes; then CCASFLAGS="$CCASFLAGS -Wa,--noexecstack" fi ])
configure.in +4 −0 Original line number Diff line number Diff line Loading @@ -515,6 +515,10 @@ AM_PROG_CC_STDC # We need an assembler, too AM_PROG_AS CCASFLAGS="$CCASFLAGS $ASFLAGS" # Check if we need noexec stack for assembler AC_CHECK_NOEXECSTACK if test "$am_cv_prog_cc_stdc" = "no" then Loading
include/sql_common.h +1 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ extern const char *not_error_sqlstate; extern "C" { #endif extern CHARSET_INFO *default_client_charset_info; MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, my_bool default_value, uint server_capabilities); void free_rows(MYSQL_DATA *cur); Loading
libmysqld/lib_sql.cc +7 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ extern "C" int check_user(THD *thd, enum enum_server_command command, const char *passwd, uint passwd_len, const char *db, bool check_count); void thd_init_client_charset(THD *thd, uint cs_number); C_MODE_START #include <mysql.h> Loading Loading @@ -600,11 +602,14 @@ void *create_embedded_thd(int client_flag, char *db) return NULL; } #ifdef NO_EMBEDDED_ACCESS_CHECKS int check_embedded_connection(MYSQL *mysql) { int result; THD *thd= (THD*)mysql->thd; thd_init_client_charset(thd, mysql->charset->number); thd->update_charset(); Security_context *sctx= thd->security_ctx; sctx->host_or_ip= sctx->host= (char*) my_localhost; strmake(sctx->priv_host, (char*) my_localhost, MAX_HOSTNAME-1); Loading @@ -623,6 +628,8 @@ int check_embedded_connection(MYSQL *mysql) char scramble_buff[SCRAMBLE_LENGTH]; int passwd_len; thd_init_client_charset(thd, mysql->charset->number); thd->update_charset(); if (mysql->options.client_ip) { sctx->host= my_strdup(mysql->options.client_ip, MYF(0)); Loading
libmysqld/libmysqld.c +3 −45 Original line number Diff line number Diff line Loading @@ -90,49 +90,7 @@ static void end_server(MYSQL *mysql) } static int mysql_init_charset(MYSQL *mysql) { char charset_name_buff[16], *charset_name; if ((charset_name=mysql->options.charset_name)) { const char *save=charsets_dir; if (mysql->options.charset_dir) charsets_dir=mysql->options.charset_dir; mysql->charset=get_charset_by_name(mysql->options.charset_name, MYF(MY_WME)); charsets_dir=save; } else if (mysql->server_language) { charset_name=charset_name_buff; sprintf(charset_name,"%d",mysql->server_language); /* In case of errors */ mysql->charset=get_charset((uint8) mysql->server_language, MYF(MY_WME)); } else mysql->charset=default_charset_info; if (!mysql->charset) { mysql->net.last_errno=CR_CANT_READ_CHARSET; strmov(mysql->net.sqlstate, "HY0000"); if (mysql->options.charset_dir) sprintf(mysql->net.last_error,ER(mysql->net.last_errno), charset_name ? charset_name : "unknown", mysql->options.charset_dir); else { char cs_dir_name[FN_REFLEN]; get_charsets_dir(cs_dir_name); sprintf(mysql->net.last_error,ER(mysql->net.last_errno), charset_name ? charset_name : "unknown", cs_dir_name); } return mysql->net.last_errno; } return 0; } int mysql_init_character_set(MYSQL *mysql); MYSQL * STDCALL mysql_real_connect(MYSQL *mysql,const char *host, const char *user, Loading Loading @@ -222,10 +180,10 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, init_embedded_mysql(mysql, client_flag, db_name); if (check_embedded_connection(mysql)) if (mysql_init_character_set(mysql)) goto error; if (mysql_init_charset(mysql)) if (check_embedded_connection(mysql)) goto error; mysql->server_status= SERVER_STATUS_AUTOCOMMIT; Loading