diff options
author | unknown <kostja@bodhi.(none)> | 2007-10-08 02:05:10 +0400 |
---|---|---|
committer | unknown <kostja@bodhi.(none)> | 2007-10-08 02:05:10 +0400 |
commit | ded7fe7fd16d35b0a63a7a417b67fdd31df5033d (patch) | |
tree | f4b4f76a55ded111308cad01bf89cd645eae2663 /libmysql | |
parent | 03bef972d3b508013cfcad2de294569ecdf16158 (diff) | |
parent | c215e78d1607a9afc55df3df3d5499d283ffed63 (diff) | |
download | mariadb-git-ded7fe7fd16d35b0a63a7a417b67fdd31df5033d.tar.gz |
Merge bk-internal.mysql.com:/home/bk/mysql-5.1
into bodhi.(none):/opt/local/work/mysql-5.1-runtime
mysql-test/include/mix1.inc:
Auto merged
mysql-test/r/create.result:
Auto merged
mysql-test/r/innodb_mysql.result:
Auto merged
mysql-test/r/sp.result:
Auto merged
mysql-test/t/sp.test:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_yacc.yy:
Auto merged
libmysql/libmysql.c:
Manual merge.
Diffstat (limited to 'libmysql')
-rw-r--r-- | libmysql/client_settings.h | 4 | ||||
-rw-r--r-- | libmysql/libmysql.c | 30 |
2 files changed, 31 insertions, 3 deletions
diff --git a/libmysql/client_settings.h b/libmysql/client_settings.h index a803ff8372f..f87e625771f 100644 --- a/libmysql/client_settings.h +++ b/libmysql/client_settings.h @@ -63,3 +63,7 @@ int cli_read_change_user_result(MYSQL *mysql, char *buff, const char *passwd); int init_embedded_server(int argc, char **argv, char **groups); void end_embedded_server(); #endif /*EMBEDDED_LIBRARY*/ + +C_MODE_START +extern int mysql_init_character_set(MYSQL *mysql); +C_MODE_END diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 74435a1eb57..4153bd773d5 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -685,14 +685,25 @@ int cli_read_change_user_result(MYSQL *mysql, char *buff, const char *passwd) return 0; } - my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, const char *passwd, const char *db) { char buff[512],*end=buff; int rc; + CHARSET_INFO *saved_cs= mysql->charset; + DBUG_ENTER("mysql_change_user"); + /* Get the connection-default character set. */ + + if (mysql_init_character_set(mysql)) + { + mysql->charset= saved_cs; + DBUG_RETURN(TRUE); + } + + /* Use an empty string instead of NULL. */ + if (!user) user=""; if (!passwd) @@ -721,6 +732,14 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, /* Add database if needed */ end= strmov(end, db ? db : "") + 1; + /* Add character set number. */ + + if (mysql->server_capabilities & CLIENT_SECURE_CONNECTION) + { + int2store(end, (ushort) mysql->charset->number); + end+= 2; + } + /* Write authentication package */ simple_command(mysql,COM_CHANGE_USER, (uchar*) buff, (ulong) (end-buff), 1); @@ -743,6 +762,11 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, mysql->passwd=my_strdup(passwd,MYF(MY_WME)); mysql->db= db ? my_strdup(db,MYF(MY_WME)) : 0; } + else + { + mysql->charset= saved_cs; + } + DBUG_RETURN(rc); } @@ -2502,7 +2526,7 @@ static my_bool execute(MYSQL_STMT *stmt, char *packet, ulong length) 5 /* execution flags */]; my_bool res; DBUG_ENTER("execute"); - DBUG_DUMP("packet", packet, length); + DBUG_DUMP("packet", (uchar *) packet, length); mysql->last_used_con= mysql; int4store(buff, stmt->stmt_id); /* Send stmt id to server */ @@ -4679,7 +4703,7 @@ int cli_read_binary_rows(MYSQL_STMT *stmt) NET *net; DBUG_ENTER("cli_read_binary_rows"); - + if (!mysql) { set_stmt_error(stmt, CR_SERVER_LOST, unknown_sqlstate); |