summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <gluh@gluh.(none)>2006-09-28 14:09:31 +0500
committerunknown <gluh@gluh.(none)>2006-09-28 14:09:31 +0500
commit5f10ffd0640f1f613b6f6538bb36431e10f5967c (patch)
tree73252a3a983ef93143ce19885f926adef37d149d
parent5529b7fb959e1d01b3699f0c347bb5e97becdc65 (diff)
parentc316933e602dbd8144e13254bc517f4e108032c3 (diff)
downloadmariadb-git-5f10ffd0640f1f613b6f6538bb36431e10f5967c.tar.gz
Merge mysql.com:/home/gluh/MySQL/Merge/5.0
into mysql.com:/home/gluh/MySQL/Merge/5.1 include/mysql_com.h: Auto merged mysql-test/r/ctype_utf8.result: Auto merged mysql-test/r/func_time.result: Auto merged mysql-test/r/query_cache.result: Auto merged mysql-test/r/type_date.result: Auto merged mysql-test/r/view.result: Auto merged mysql-test/t/ctype_utf8.test: Auto merged mysql-test/t/func_time.test: Auto merged mysql-test/t/view.test: Auto merged sql/item_cmpfunc.cc: Auto merged sql/mysql_priv.h: Auto merged sql/slave.h: Auto merged sql/sql_acl.cc: Auto merged sql/sql_parse.cc: Auto merged sql-common/client.c: Auto merged sql/sql_repl.h: Auto merged sql/sql_yacc.yy: Auto merged sql/sp.cc: manual merge sql/sp_head.cc: manual merge sql/sql_class.h: manual merge sql/table.cc: manual merge
-rw-r--r--include/mysql_com.h5
-rw-r--r--mysql-test/r/ctype_utf8.result13
-rw-r--r--mysql-test/t/ctype_utf8.test17
-rw-r--r--sql-common/client.c6
-rw-r--r--sql/mysql_priv.h2
-rw-r--r--sql/slave.h2
-rw-r--r--sql/sp.cc12
-rw-r--r--sql/sp_head.cc6
-rw-r--r--sql/sql_acl.cc12
-rw-r--r--sql/sql_parse.cc17
-rw-r--r--sql/sql_repl.h2
-rw-r--r--sql/sql_yacc.yy6
-rw-r--r--sql/table.cc5
13 files changed, 35 insertions, 70 deletions
diff --git a/include/mysql_com.h b/include/mysql_com.h
index af3b8535ee2..a290feb9686 100644
--- a/include/mysql_com.h
+++ b/include/mysql_com.h
@@ -26,9 +26,6 @@
#define USERNAME_LENGTH 16
#define SERVER_VERSION_LENGTH 60
#define SQLSTATE_LENGTH 5
-#define SYSTEM_CHARSET_MBMAXLEN 3
-#define NAME_BYTE_LEN NAME_LEN*SYSTEM_CHARSET_MBMAXLEN
-#define USERNAME_BYTE_LENGTH USERNAME_LENGTH*SYSTEM_CHARSET_MBMAXLEN
/*
USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain
@@ -36,7 +33,7 @@
MySQL standard format:
user_name_part@host_name_part\0
*/
-#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_BYTE_LENGTH + 2
+#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_LENGTH + 2
#define LOCAL_HOST "localhost"
#define LOCAL_HOST_NAMEDPIPE "."
diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result
index f5e4054a385..2b9602215fb 100644
--- a/mysql-test/r/ctype_utf8.result
+++ b/mysql-test/r/ctype_utf8.result
@@ -1340,19 +1340,6 @@ select a from t1 group by a;
a
e
drop table t1;
-set names utf8;
-grant select on test.* to юзер_юзер@localhost;
-user()
-юзер_юзер@localhost
-revoke all on test.* from юзер_юзер@localhost;
-drop user юзер_юзер@localhost;
-create database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-use имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-select database();
-database()
-имя_базы_в_кодировке_утф8_длиной_больше_чем_45
-drop database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-use test;
CREATE TABLE t1(id varchar(20) NOT NULL) DEFAULT CHARSET=utf8;
INSERT INTO t1 VALUES ('xxx'), ('aa'), ('yyy'), ('aa');
SELECT id FROM t1;
diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test
index 54ded650a1e..5e3a3f640b1 100644
--- a/mysql-test/t/ctype_utf8.test
+++ b/mysql-test/t/ctype_utf8.test
@@ -1069,23 +1069,6 @@ explain select a from t1 group by a;
select a from t1 group by a;
drop table t1;
-#
-# Bug#20393: User name truncation in mysql client
-# Bug#21432: Database/Table name limited to 64 bytes, not chars, problems with multi-byte
-#
-set names utf8;
-#create user юзер_юзер@localhost;
-grant select on test.* to юзер_юзер@localhost;
---exec $MYSQL --default-character-set=utf8 --user=юзер_юзер -e "select user()"
-revoke all on test.* from юзер_юзер@localhost;
-drop user юзер_юзер@localhost;
-
-create database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-use имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-select database();
-drop database имя_базы_в_кодировке_утф8_длиной_больше_чем_45;
-use test;
-
# End of 4.1 tests
#
diff --git a/sql-common/client.c b/sql-common/client.c
index 6722597531d..79a5be938b2 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -1753,7 +1753,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
const char *passwd, const char *db,
uint port, const char *unix_socket,ulong client_flag)
{
- char buff[NAME_BYTE_LEN+USERNAME_BYTE_LENGTH+100];
+ char buff[NAME_LEN+USERNAME_LENGTH+100];
char *end,*host_info;
my_socket sock;
in_addr_t ip_addr;
@@ -2212,7 +2212,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
mysql->server_status, client_flag));
/* This needs to be changed as it's not useful with big packets */
if (user && user[0])
- strmake(end,user,USERNAME_BYTE_LENGTH); /* Max user name */
+ strmake(end,user,USERNAME_LENGTH); /* Max user name */
else
read_user_name((char*) end);
@@ -2242,7 +2242,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
/* Add database if needed */
if (db && (mysql->server_capabilities & CLIENT_CONNECT_WITH_DB))
{
- end= strmake(end, db, NAME_BYTE_LEN) + 1;
+ end= strmake(end, db, NAME_LEN) + 1;
mysql->db= my_strdup(db,MYF(MY_WME));
db= 0;
}
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index dcd0624564c..e1b9f514845 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -588,7 +588,7 @@ void get_default_definer(THD *thd, LEX_USER *definer);
LEX_USER *create_default_definer(THD *thd);
LEX_USER *create_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name);
LEX_USER *get_current_user(THD *thd, LEX_USER *user);
-bool check_string_length(CHARSET_INFO *cs, LEX_STRING *str,
+bool check_string_length(LEX_STRING *str,
const char *err_msg, uint max_length);
enum enum_mysql_completiontype {
diff --git a/sql/slave.h b/sql/slave.h
index 9d76277da0d..053358dc686 100644
--- a/sql/slave.h
+++ b/sql/slave.h
@@ -152,7 +152,7 @@ typedef struct st_master_info
/* the variables below are needed because we can change masters on the fly */
char master_log_name[FN_REFLEN];
char host[HOSTNAME_LENGTH+1];
- char user[USERNAME_BYTE_LENGTH+1];
+ char user[USERNAME_LENGTH+1];
char password[MAX_PASSWORD_LENGTH+1];
my_bool ssl; // enables use of SSL connection if true
char ssl_ca[FN_REFLEN], ssl_capath[FN_REFLEN], ssl_cert[FN_REFLEN];
diff --git a/sql/sp.cc b/sql/sp.cc
index 7ae335a1a3d..f0a748cf8a2 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -406,16 +406,16 @@ db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp,
{
LEX *old_lex= thd->lex, newlex;
String defstr;
- char old_db_buf[NAME_BYTE_LEN+1];
+ char old_db_buf[NAME_LEN+1];
LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
bool dbchanged;
ulong old_sql_mode= thd->variables.sql_mode;
ha_rows old_select_limit= thd->variables.select_limit;
sp_rcontext *old_spcont= thd->spcont;
-
- char definer_user_name_holder[USERNAME_BYTE_LENGTH + 1];
- LEX_STRING definer_user_name= { definer_user_name_holder,
- USERNAME_BYTE_LENGTH };
+
+ char definer_user_name_holder[USERNAME_LENGTH + 1];
+ LEX_STRING_WITH_INIT definer_user_name(definer_user_name_holder,
+ USERNAME_LENGTH);
char definer_host_name_holder[HOSTNAME_LENGTH + 1];
LEX_STRING definer_host_name= { definer_host_name_holder, HOSTNAME_LENGTH };
@@ -514,7 +514,7 @@ db_create_routine(THD *thd, int type, sp_head *sp)
int ret;
TABLE *table;
char definer[USER_HOST_BUFF_SIZE];
- char old_db_buf[NAME_BYTE_LEN+1];
+ char old_db_buf[NAME_LEN+1];
LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
bool dbchanged;
DBUG_ENTER("db_create_routine");
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index db5f35cc5ee..274999a3521 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -962,7 +962,7 @@ bool
sp_head::execute(THD *thd)
{
DBUG_ENTER("sp_head::execute");
- char old_db_buf[NAME_BYTE_LEN+1];
+ char old_db_buf[NAME_LEN+1];
LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
bool dbchanged;
sp_rcontext *ctx;
@@ -2010,8 +2010,8 @@ sp_head::set_info(longlong created, longlong modified,
void
sp_head::set_definer(const char *definer, uint definerlen)
{
- char user_name_holder[USERNAME_BYTE_LENGTH + 1];
- LEX_STRING user_name= { user_name_holder, USERNAME_BYTE_LENGTH };
+ char user_name_holder[USERNAME_LENGTH + 1];
+ LEX_STRING_WITH_INIT user_name(user_name_holder, USERNAME_LENGTH);
char host_name_holder[HOSTNAME_LENGTH + 1];
LEX_STRING host_name= { host_name_holder, HOSTNAME_LENGTH };
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 318f0798c5d..f293e62f9db 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -169,7 +169,7 @@ static byte* acl_entry_get_key(acl_entry *entry,uint *length,
}
#define IP_ADDR_STRLEN (3+1+3+1+3+1+3)
-#define ACL_KEY_LENGTH (IP_ADDR_STRLEN+1+NAME_BYTE_LEN+1+USERNAME_BYTE_LENGTH+1)
+#define ACL_KEY_LENGTH (IP_ADDR_STRLEN+1+NAME_LEN+1+USERNAME_LENGTH+1)
static DYNAMIC_ARRAY acl_hosts,acl_users,acl_dbs;
static MEM_ROOT mem, memex;
@@ -312,7 +312,7 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
READ_RECORD read_record_info;
my_bool return_val= 1;
bool check_no_resolve= specialflag & SPECIAL_NO_RESOLVE;
- char tmp_name[NAME_BYTE_LEN+1];
+ char tmp_name[NAME_LEN+1];
int password_length;
DBUG_ENTER("acl_load");
@@ -2401,7 +2401,7 @@ static GRANT_NAME *name_hash_search(HASH *name_hash,
const char *user, const char *tname,
bool exact)
{
- char helping [NAME_BYTE_LEN*2+USERNAME_BYTE_LENGTH+3];
+ char helping [NAME_LEN*2+USERNAME_LENGTH+3];
uint len;
GRANT_NAME *grant_name,*found=0;
HASH_SEARCH_STATE state;
@@ -3308,7 +3308,7 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
{
List_iterator <LEX_USER> str_list (list);
LEX_USER *Str, *tmp_Str;
- char tmp_db[NAME_BYTE_LEN+1];
+ char tmp_db[NAME_LEN+1];
bool create_new_users=0;
TABLE_LIST tables[2];
DBUG_ENTER("mysql_grant");
@@ -3372,7 +3372,7 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
{
result= TRUE;
continue;
- }
+ }
if (replace_user_table(thd, tables[0].table, *Str,
(!db ? rights : 0), revoke_grant, create_new_users,
test(thd->variables.sql_mode &
@@ -4012,7 +4012,7 @@ err2:
bool check_grant_db(THD *thd,const char *db)
{
Security_context *sctx= thd->security_ctx;
- char helping [NAME_BYTE_LEN+USERNAME_BYTE_LENGTH+2];
+ char helping [NAME_LEN+USERNAME_LENGTH+2];
uint len;
bool error= 1;
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 8cbc7bc46f6..fc7ed7ff673 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -1047,8 +1047,8 @@ static int check_connection(THD *thd)
char *passwd= strend(user)+1;
uint user_len= passwd - user - 1;
char *db= passwd;
- char db_buff[NAME_BYTE_LEN + 1]; // buffer to store db in utf8
- char user_buff[USERNAME_BYTE_LENGTH + 1]; // buffer to store user in utf8
+ char db_buff[NAME_LEN + 1]; // buffer to store db in utf8
+ char user_buff[USERNAME_LENGTH + 1]; // buffer to store user in utf8
uint dummy_errors;
/*
@@ -1724,7 +1724,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
password. New clients send the size (1 byte) + string (not null
terminated, so also '\0' for empty string).
*/
- char db_buff[NAME_BYTE_LEN+1]; // buffer to store db in utf8
+ char db_buff[NAME_LEN+1]; // buffer to store db in utf8
char *db= passwd;
uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ?
*passwd++ : strlen(passwd);
@@ -7783,7 +7783,6 @@ LEX_USER *get_current_user(THD *thd, LEX_USER *user)
SYNOPSIS
check_string_length()
- cs string charset
str string to be checked
err_msg error message to be displayed if the string is too long
max_length max length
@@ -7793,13 +7792,13 @@ LEX_USER *get_current_user(THD *thd, LEX_USER *user)
TRUE the passed string is longer than max_length
*/
-bool check_string_length(CHARSET_INFO *cs, LEX_STRING *str,
- const char *err_msg, uint max_length)
+bool check_string_length(LEX_STRING *str, const char *err_msg,
+ uint max_length)
{
- if (cs->cset->charpos(cs, str->str, str->str + str->length,
- max_length) >= str->length)
- return FALSE;
+ if (str->length <= max_length)
+ return FALSE;
my_error(ER_WRONG_STRING_LENGTH, MYF(0), str->str, err_msg, max_length);
+
return TRUE;
}
diff --git a/sql/sql_repl.h b/sql/sql_repl.h
index 45d3254dad0..789de64da85 100644
--- a/sql/sql_repl.h
+++ b/sql/sql_repl.h
@@ -24,7 +24,7 @@ typedef struct st_slave_info
uint32 server_id;
uint32 rpl_recovery_rank, master_id;
char host[HOSTNAME_LENGTH+1];
- char user[USERNAME_BYTE_LENGTH+1];
+ char user[USERNAME_LENGTH+1];
char password[MAX_PASSWORD_LENGTH+1];
uint16 port;
THD* thd;
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 472313bdf85..bfe23d359ca 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -9237,7 +9237,7 @@ user:
$$->host.str= (char *) "%";
$$->host.length= 1;
- if (check_string_length(system_charset_info, &$$->user,
+ if (check_string_length(&$$->user,
ER(ER_USERNAME), USERNAME_LENGTH))
YYABORT;
}
@@ -9248,9 +9248,9 @@ user:
YYABORT;
$$->user = $1; $$->host=$3;
- if (check_string_length(system_charset_info, &$$->user,
+ if (check_string_length(&$$->user,
ER(ER_USERNAME), USERNAME_LENGTH) ||
- check_string_length(&my_charset_latin1, &$$->host,
+ check_string_length(&$$->host,
ER(ER_HOSTNAME), HOSTNAME_LENGTH))
YYABORT;
}
diff --git a/sql/table.cc b/sql/table.cc
index 834c2ed9c82..74100f34964 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -2257,7 +2257,7 @@ char *get_field(MEM_ROOT *mem, Field *field)
bool check_db_name(char *name)
{
- uint name_length= 0; // name length in symbols
+ char *start= name;
/* Used to catch empty names and names with end space */
bool last_char_is_space= TRUE;
@@ -2282,10 +2282,9 @@ bool check_db_name(char *name)
#else
last_char_is_space= *name==' ';
#endif
- name_length++;
name++;
}
- return last_char_is_space || name_length > NAME_LEN;
+ return last_char_is_space || (uint) (name - start) > NAME_LEN;
}