mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
Merge alik.:/mnt/raid/alik/MySQL/devel/5.0-tree
into alik.:/mnt/raid/alik/MySQL/devel/5.0-rt-merged
This commit is contained in:
commit
c490d7ab02
25 changed files with 328 additions and 43 deletions
|
@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc)
|
|||
AC_CANONICAL_SYSTEM
|
||||
# The Docs Makefile.am parses this line!
|
||||
# remember to also change ndb version below and update version.c in ndb
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.25)
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.26)
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
PROTOCOL_VERSION=10
|
||||
|
@ -19,7 +19,7 @@ SHARED_LIB_VERSION=$SHARED_LIB_MAJOR_VERSION:0:0
|
|||
# ndb version
|
||||
NDB_VERSION_MAJOR=5
|
||||
NDB_VERSION_MINOR=0
|
||||
NDB_VERSION_BUILD=25
|
||||
NDB_VERSION_BUILD=26
|
||||
NDB_VERSION_STATUS=""
|
||||
|
||||
# Set all version vars based on $VERSION. How do we do this more elegant ?
|
||||
|
@ -2826,8 +2826,9 @@ AC_CONFIG_FILES(Makefile extra/Makefile mysys/Makefile dnl
|
|||
include/mysql_version.h dnl
|
||||
cmd-line-utils/Makefile dnl
|
||||
cmd-line-utils/libedit/Makefile dnl
|
||||
win/Makefile dnl
|
||||
zlib/Makefile dnl
|
||||
cmd-line-utils/readline/Makefile win/Makefile)
|
||||
cmd-line-utils/readline/Makefile)
|
||||
AC_CONFIG_COMMANDS([default], , test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h)
|
||||
AC_OUTPUT
|
||||
|
||||
|
|
|
@ -26,6 +26,9 @@
|
|||
#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
|
||||
|
@ -33,7 +36,7 @@
|
|||
MySQL standard format:
|
||||
user_name_part@host_name_part\0
|
||||
*/
|
||||
#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_LENGTH + 2
|
||||
#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_BYTE_LENGTH + 2
|
||||
|
||||
#define LOCAL_HOST "localhost"
|
||||
#define LOCAL_HOST_NAMEDPIPE "."
|
||||
|
|
21
mysql-test/include/loaddata_autocom.inc
Normal file
21
mysql-test/include/loaddata_autocom.inc
Normal file
|
@ -0,0 +1,21 @@
|
|||
# Test if the engine does autocommit in LOAD DATA INFILE, or not
|
||||
# (NDB wants to do, others don't).
|
||||
|
||||
eval SET SESSION STORAGE_ENGINE = $engine_type;
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
create table t1 (a text, b text);
|
||||
start transaction;
|
||||
load data infile '../std_data_ln/loaddata2.dat' into table t1 fields terminated by ',' enclosed by '''';
|
||||
commit;
|
||||
select count(*) from t1;
|
||||
truncate table t1;
|
||||
start transaction;
|
||||
load data infile '../std_data_ln/loaddata2.dat' into table t1 fields terminated by ',' enclosed by '''';
|
||||
rollback;
|
||||
select count(*) from t1;
|
||||
|
||||
drop table t1;
|
|
@ -1340,6 +1340,19 @@ 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;
|
||||
|
|
21
mysql-test/r/loaddata_autocom_innodb.result
Normal file
21
mysql-test/r/loaddata_autocom_innodb.result
Normal file
|
@ -0,0 +1,21 @@
|
|||
SET SESSION STORAGE_ENGINE = InnoDB;
|
||||
drop table if exists t1;
|
||||
create table t1 (a text, b text);
|
||||
start transaction;
|
||||
load data infile '../std_data_ln/loaddata2.dat' into table t1 fields terminated by ',' enclosed by '''';
|
||||
Warnings:
|
||||
Warning 1261 Row 3 doesn't contain data for all columns
|
||||
commit;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
4
|
||||
truncate table t1;
|
||||
start transaction;
|
||||
load data infile '../std_data_ln/loaddata2.dat' into table t1 fields terminated by ',' enclosed by '''';
|
||||
Warnings:
|
||||
Warning 1261 Row 3 doesn't contain data for all columns
|
||||
rollback;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
0
|
||||
drop table t1;
|
23
mysql-test/r/loaddata_autocom_ndb.result
Normal file
23
mysql-test/r/loaddata_autocom_ndb.result
Normal file
|
@ -0,0 +1,23 @@
|
|||
SET SESSION STORAGE_ENGINE = ndbcluster;
|
||||
drop table if exists t1;
|
||||
create table t1 (a text, b text);
|
||||
start transaction;
|
||||
load data infile '../std_data_ln/loaddata2.dat' into table t1 fields terminated by ',' enclosed by '''';
|
||||
Warnings:
|
||||
Warning 1261 Row 3 doesn't contain data for all columns
|
||||
commit;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
4
|
||||
truncate table t1;
|
||||
start transaction;
|
||||
load data infile '../std_data_ln/loaddata2.dat' into table t1 fields terminated by ',' enclosed by '''';
|
||||
Warnings:
|
||||
Warning 1261 Row 3 doesn't contain data for all columns
|
||||
rollback;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
4
|
||||
drop table t1;
|
103
mysql-test/r/rpl_ndb_innodb_trans.result
Normal file
103
mysql-test/r/rpl_ndb_innodb_trans.result
Normal file
|
@ -0,0 +1,103 @@
|
|||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
create table t1 (a int, unique(a)) engine=ndbcluster;
|
||||
create table t2 (a int, unique(a)) engine=innodb;
|
||||
begin;
|
||||
insert into t1 values(1);
|
||||
insert into t2 values(1);
|
||||
rollback;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
0
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
0
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
0
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
0
|
||||
begin;
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2;
|
||||
Warnings:
|
||||
Warning 1262 Row 1 was truncated; it contained more data than there were input columns
|
||||
Warning 1262 Row 2 was truncated; it contained more data than there were input columns
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t1;
|
||||
Warnings:
|
||||
Warning 1262 Row 1 was truncated; it contained more data than there were input columns
|
||||
Warning 1262 Row 2 was truncated; it contained more data than there were input columns
|
||||
rollback;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
2
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
0
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
2
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
0
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
begin;
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2;
|
||||
Warnings:
|
||||
Warning 1262 Row 1 was truncated; it contained more data than there were input columns
|
||||
Warning 1262 Row 2 was truncated; it contained more data than there were input columns
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t1;
|
||||
Warnings:
|
||||
Warning 1262 Row 1 was truncated; it contained more data than there were input columns
|
||||
Warning 1262 Row 2 was truncated; it contained more data than there were input columns
|
||||
rollback;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
2
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
0
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
2
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
0
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
begin;
|
||||
insert into t2 values(3),(4);
|
||||
insert into t1 values(3),(4);
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2;
|
||||
Warnings:
|
||||
Warning 1262 Row 1 was truncated; it contained more data than there were input columns
|
||||
Warning 1262 Row 2 was truncated; it contained more data than there were input columns
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t1;
|
||||
Warnings:
|
||||
Warning 1262 Row 1 was truncated; it contained more data than there were input columns
|
||||
Warning 1262 Row 2 was truncated; it contained more data than there were input columns
|
||||
rollback;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
4
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
0
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
4
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
0
|
||||
drop table t1,t2;
|
|
@ -1069,6 +1069,23 @@ 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
|
||||
|
||||
#
|
||||
|
|
4
mysql-test/t/loaddata_autocom_innodb.test
Normal file
4
mysql-test/t/loaddata_autocom_innodb.test
Normal file
|
@ -0,0 +1,4 @@
|
|||
--source include/have_innodb.inc
|
||||
let $engine_type= InnoDB;
|
||||
|
||||
--source include/loaddata_autocom.inc
|
4
mysql-test/t/loaddata_autocom_ndb.test
Normal file
4
mysql-test/t/loaddata_autocom_ndb.test
Normal file
|
@ -0,0 +1,4 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine_type=ndbcluster;
|
||||
|
||||
--source include/loaddata_autocom.inc
|
1
mysql-test/t/rpl_ndb_innodb_trans-slave.opt
Normal file
1
mysql-test/t/rpl_ndb_innodb_trans-slave.opt
Normal file
|
@ -0,0 +1 @@
|
|||
--innodb
|
66
mysql-test/t/rpl_ndb_innodb_trans.test
Normal file
66
mysql-test/t/rpl_ndb_innodb_trans.test
Normal file
|
@ -0,0 +1,66 @@
|
|||
# Test of a transaction mixing the two engines
|
||||
|
||||
-- source include/have_ndb.inc
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
create table t1 (a int, unique(a)) engine=ndbcluster;
|
||||
create table t2 (a int, unique(a)) engine=innodb;
|
||||
|
||||
|
||||
begin;
|
||||
insert into t1 values(1);
|
||||
insert into t2 values(1);
|
||||
rollback;
|
||||
|
||||
select count(*) from t1;
|
||||
select count(*) from t2;
|
||||
sync_slave_with_master;
|
||||
select count(*) from t1;
|
||||
select count(*) from t2;
|
||||
connection master;
|
||||
|
||||
begin;
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2;
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t1;
|
||||
rollback;
|
||||
|
||||
select count(*) from t1;
|
||||
select count(*) from t2;
|
||||
sync_slave_with_master;
|
||||
select count(*) from t1;
|
||||
select count(*) from t2;
|
||||
connection master;
|
||||
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
begin;
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2;
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t1;
|
||||
rollback;
|
||||
|
||||
select count(*) from t1;
|
||||
select count(*) from t2;
|
||||
sync_slave_with_master;
|
||||
select count(*) from t1;
|
||||
select count(*) from t2;
|
||||
connection master;
|
||||
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
begin;
|
||||
insert into t2 values(3),(4);
|
||||
insert into t1 values(3),(4);
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2;
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t1;
|
||||
rollback;
|
||||
|
||||
select count(*) from t1;
|
||||
select count(*) from t2;
|
||||
sync_slave_with_master;
|
||||
select count(*) from t1;
|
||||
select count(*) from t2;
|
||||
connection master;
|
||||
|
||||
drop table t1,t2;
|
||||
sync_slave_with_master;
|
|
@ -1758,7 +1758,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_LEN+USERNAME_LENGTH+100];
|
||||
char buff[NAME_BYTE_LEN+USERNAME_BYTE_LENGTH+100];
|
||||
char *end,*host_info;
|
||||
my_socket sock;
|
||||
in_addr_t ip_addr;
|
||||
|
@ -2217,7 +2217,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_LENGTH); /* Max user name */
|
||||
strmake(end,user,USERNAME_BYTE_LENGTH); /* Max user name */
|
||||
else
|
||||
read_user_name((char*) end);
|
||||
|
||||
|
@ -2247,7 +2247,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_LEN) + 1;
|
||||
end= strmake(end, db, NAME_BYTE_LEN) + 1;
|
||||
mysql->db= my_strdup(db,MYF(MY_WME));
|
||||
db= 0;
|
||||
}
|
||||
|
|
|
@ -3526,7 +3526,14 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
|
|||
if (lock_type != F_UNLCK)
|
||||
{
|
||||
DBUG_PRINT("info", ("lock_type != F_UNLCK"));
|
||||
if (!thd->transaction.on)
|
||||
if (thd->lex->sql_command == SQLCOM_LOAD)
|
||||
{
|
||||
m_transaction_on= FALSE;
|
||||
/* Would be simpler if has_transactions() didn't always say "yes" */
|
||||
thd->options|= OPTION_STATUS_NO_TRANS_UPDATE;
|
||||
thd->no_trans_update= TRUE;
|
||||
}
|
||||
else if (!thd->transaction.on)
|
||||
m_transaction_on= FALSE;
|
||||
else
|
||||
m_transaction_on= thd->variables.ndb_use_transactions;
|
||||
|
|
|
@ -566,7 +566,8 @@ 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(LEX_STRING *str, const char *err_msg, uint max_length);
|
||||
bool check_string_length(CHARSET_INFO *cs, LEX_STRING *str,
|
||||
const char *err_msg, uint max_length);
|
||||
|
||||
enum enum_mysql_completiontype {
|
||||
ROLLBACK_RELEASE=-2, ROLLBACK=1, ROLLBACK_AND_CHAIN=7,
|
||||
|
|
|
@ -406,7 +406,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_LENGTH+1];
|
||||
char user[USERNAME_BYTE_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];
|
||||
|
|
|
@ -404,16 +404,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_LEN+1];
|
||||
char old_db_buf[NAME_BYTE_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_LENGTH + 1];
|
||||
char definer_user_name_holder[USERNAME_BYTE_LENGTH + 1];
|
||||
LEX_STRING_WITH_INIT definer_user_name(definer_user_name_holder,
|
||||
USERNAME_LENGTH);
|
||||
USERNAME_BYTE_LENGTH);
|
||||
|
||||
char definer_host_name_holder[HOSTNAME_LENGTH + 1];
|
||||
LEX_STRING_WITH_INIT definer_host_name(definer_host_name_holder,
|
||||
|
@ -511,7 +511,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_LEN+1];
|
||||
char old_db_buf[NAME_BYTE_LEN+1];
|
||||
LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
|
||||
bool dbchanged;
|
||||
DBUG_ENTER("db_create_routine");
|
||||
|
|
|
@ -924,7 +924,7 @@ bool
|
|||
sp_head::execute(THD *thd)
|
||||
{
|
||||
DBUG_ENTER("sp_head::execute");
|
||||
char old_db_buf[NAME_LEN+1];
|
||||
char old_db_buf[NAME_BYTE_LEN+1];
|
||||
LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
|
||||
bool dbchanged;
|
||||
sp_rcontext *ctx;
|
||||
|
@ -1957,8 +1957,8 @@ sp_head::set_info(longlong created, longlong modified,
|
|||
void
|
||||
sp_head::set_definer(const char *definer, uint definerlen)
|
||||
{
|
||||
char user_name_holder[USERNAME_LENGTH + 1];
|
||||
LEX_STRING_WITH_INIT user_name(user_name_holder, USERNAME_LENGTH);
|
||||
char user_name_holder[USERNAME_BYTE_LENGTH + 1];
|
||||
LEX_STRING_WITH_INIT user_name(user_name_holder, USERNAME_BYTE_LENGTH);
|
||||
|
||||
char host_name_holder[HOSTNAME_LENGTH + 1];
|
||||
LEX_STRING_WITH_INIT host_name(host_name_holder, HOSTNAME_LENGTH);
|
||||
|
|
|
@ -54,7 +54,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_LEN+1+USERNAME_LENGTH+1)
|
||||
#define ACL_KEY_LENGTH (IP_ADDR_STRLEN+1+NAME_BYTE_LEN+1+USERNAME_BYTE_LENGTH+1)
|
||||
|
||||
static DYNAMIC_ARRAY acl_hosts,acl_users,acl_dbs;
|
||||
static MEM_ROOT mem, memex;
|
||||
|
@ -197,7 +197,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_LEN+1];
|
||||
char tmp_name[NAME_BYTE_LEN+1];
|
||||
int password_length;
|
||||
DBUG_ENTER("acl_load");
|
||||
|
||||
|
@ -2264,7 +2264,7 @@ static GRANT_NAME *name_hash_search(HASH *name_hash,
|
|||
const char *user, const char *tname,
|
||||
bool exact)
|
||||
{
|
||||
char helping [NAME_LEN*2+USERNAME_LENGTH+3];
|
||||
char helping [NAME_BYTE_LEN*2+USERNAME_BYTE_LENGTH+3];
|
||||
uint len;
|
||||
GRANT_NAME *grant_name,*found=0;
|
||||
HASH_SEARCH_STATE state;
|
||||
|
@ -3167,7 +3167,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_LEN+1];
|
||||
char tmp_db[NAME_BYTE_LEN+1];
|
||||
bool create_new_users=0;
|
||||
TABLE_LIST tables[2];
|
||||
DBUG_ENTER("mysql_grant");
|
||||
|
@ -3867,7 +3867,7 @@ err2:
|
|||
bool check_grant_db(THD *thd,const char *db)
|
||||
{
|
||||
Security_context *sctx= thd->security_ctx;
|
||||
char helping [NAME_LEN+USERNAME_LENGTH+2];
|
||||
char helping [NAME_BYTE_LEN+USERNAME_BYTE_LENGTH+2];
|
||||
uint len;
|
||||
bool error= 1;
|
||||
|
||||
|
|
|
@ -200,7 +200,7 @@ class MYSQL_LOG: public TC_LOG
|
|||
IO_CACHE log_file;
|
||||
IO_CACHE index_file;
|
||||
char *name;
|
||||
char time_buff[20],db[NAME_LEN+1];
|
||||
char time_buff[20],db[NAME_BYTE_LEN+1];
|
||||
char log_file_name[FN_REFLEN],index_file_name[FN_REFLEN];
|
||||
/*
|
||||
The max size before rotation (usable only if log_type == LOG_BIN: binary
|
||||
|
|
|
@ -147,10 +147,6 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
|||
MYF(0));
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
/*
|
||||
This needs to be done before external_lock
|
||||
*/
|
||||
ha_enable_transaction(thd, FALSE);
|
||||
if (open_and_lock_tables(thd, table_list))
|
||||
DBUG_RETURN(TRUE);
|
||||
if (setup_tables_and_check_access(thd, &thd->lex->select_lex.context,
|
||||
|
@ -394,7 +390,6 @@ bool mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
|||
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
|
||||
table->next_number_field=0;
|
||||
}
|
||||
ha_enable_transaction(thd, TRUE);
|
||||
if (file >= 0)
|
||||
my_close(file,MYF(0));
|
||||
free_blobs(table); /* if pack_blob was used */
|
||||
|
|
|
@ -1001,8 +1001,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_LEN+1]; // buffer to store db in utf8
|
||||
char user_buff[USERNAME_LENGTH+1]; // buffer to store user in utf8
|
||||
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
|
||||
uint dummy_errors;
|
||||
|
||||
/*
|
||||
|
@ -1662,7 +1662,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_LEN+1]; // buffer to store db in utf8
|
||||
char db_buff[NAME_BYTE_LEN+1]; // buffer to store db in utf8
|
||||
char *db= passwd;
|
||||
uint passwd_len= thd->client_capabilities & CLIENT_SECURE_CONNECTION ?
|
||||
*passwd++ : strlen(passwd);
|
||||
|
@ -7552,6 +7552,7 @@ 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
|
||||
|
@ -7561,13 +7562,13 @@ LEX_USER *get_current_user(THD *thd, LEX_USER *user)
|
|||
TRUE the passed string is longer than max_length
|
||||
*/
|
||||
|
||||
bool check_string_length(LEX_STRING *str, const char *err_msg,
|
||||
uint max_length)
|
||||
bool check_string_length(CHARSET_INFO *cs, LEX_STRING *str,
|
||||
const char *err_msg, uint max_length)
|
||||
{
|
||||
if (str->length <= max_length)
|
||||
return FALSE;
|
||||
if (cs->cset->charpos(cs, str->str, str->str + str->length,
|
||||
max_length) >= str->length)
|
||||
return FALSE;
|
||||
|
||||
my_error(ER_WRONG_STRING_LENGTH, MYF(0), str->str, err_msg, max_length);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@ typedef struct st_slave_info
|
|||
uint32 server_id;
|
||||
uint32 rpl_recovery_rank, master_id;
|
||||
char host[HOSTNAME_LENGTH+1];
|
||||
char user[USERNAME_LENGTH+1];
|
||||
char user[USERNAME_BYTE_LENGTH+1];
|
||||
char password[MAX_PASSWORD_LENGTH+1];
|
||||
uint16 port;
|
||||
THD* thd;
|
||||
|
|
|
@ -7507,7 +7507,8 @@ user:
|
|||
$$->host.str= (char *) "%";
|
||||
$$->host.length= 1;
|
||||
|
||||
if (check_string_length(&$$->user, ER(ER_USERNAME), USERNAME_LENGTH))
|
||||
if (check_string_length(system_charset_info, &$$->user,
|
||||
ER(ER_USERNAME), USERNAME_LENGTH))
|
||||
YYABORT;
|
||||
}
|
||||
| ident_or_text '@' ident_or_text
|
||||
|
@ -7517,9 +7518,10 @@ user:
|
|||
YYABORT;
|
||||
$$->user = $1; $$->host=$3;
|
||||
|
||||
if (check_string_length(&$$->user, ER(ER_USERNAME), USERNAME_LENGTH) ||
|
||||
check_string_length(&$$->host, ER(ER_HOSTNAME),
|
||||
HOSTNAME_LENGTH))
|
||||
if (check_string_length(system_charset_info, &$$->user,
|
||||
ER(ER_USERNAME), USERNAME_LENGTH) ||
|
||||
check_string_length(&my_charset_latin1, &$$->host,
|
||||
ER(ER_HOSTNAME), HOSTNAME_LENGTH))
|
||||
YYABORT;
|
||||
}
|
||||
| CURRENT_USER optional_braces
|
||||
|
|
|
@ -1592,7 +1592,7 @@ char *get_field(MEM_ROOT *mem, Field *field)
|
|||
|
||||
bool check_db_name(char *name)
|
||||
{
|
||||
char *start=name;
|
||||
uint name_length= 0; // name length in symbols
|
||||
/* Used to catch empty names and names with end space */
|
||||
bool last_char_is_space= TRUE;
|
||||
|
||||
|
@ -1609,6 +1609,7 @@ bool check_db_name(char *name)
|
|||
name+system_charset_info->mbmaxlen);
|
||||
if (len)
|
||||
{
|
||||
name_length++;
|
||||
name += len;
|
||||
continue;
|
||||
}
|
||||
|
@ -1616,12 +1617,13 @@ bool check_db_name(char *name)
|
|||
#else
|
||||
last_char_is_space= *name==' ';
|
||||
#endif
|
||||
name_length++;
|
||||
if (*name == '/' || *name == '\\' || *name == FN_LIBCHAR ||
|
||||
*name == FN_EXTCHAR)
|
||||
return 1;
|
||||
name++;
|
||||
}
|
||||
return last_char_is_space || (uint) (name - start) > NAME_LEN;
|
||||
return (last_char_is_space || name_length > NAME_LEN);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue