Merge bk-internal.mysql.com:/home/bk/mysql-4.0
into mysql.com:/home/my/mysql-4.0
This commit is contained in:
commit
b4364ca7a6
@ -63,4 +63,5 @@ extern const char *client_errors[]; /* Error messages */
|
|||||||
#define CR_PROBE_MASTER_CONNECT 2025
|
#define CR_PROBE_MASTER_CONNECT 2025
|
||||||
#define CR_SSL_CONNECTION_ERROR 2026
|
#define CR_SSL_CONNECTION_ERROR 2026
|
||||||
#define CR_MALFORMED_PACKET 2027
|
#define CR_MALFORMED_PACKET 2027
|
||||||
|
#define CR_WRONG_LICENSE 2028
|
||||||
|
|
||||||
|
@ -26,4 +26,9 @@
|
|||||||
#define MYSQL_CHARSET "@default_charset@"
|
#define MYSQL_CHARSET "@default_charset@"
|
||||||
#endif /* MYSQL_CHARSET */
|
#endif /* MYSQL_CHARSET */
|
||||||
#endif /* _CUSTOMCONFIG_ */
|
#endif /* _CUSTOMCONFIG_ */
|
||||||
|
|
||||||
|
#ifndef LICENSE
|
||||||
|
#define LICENSE "GPL"
|
||||||
|
#endif /* LICENSE */
|
||||||
|
|
||||||
#endif /* _mysql_version_h */
|
#endif /* _mysql_version_h */
|
||||||
|
@ -51,7 +51,8 @@ const char *client_errors[]=
|
|||||||
"Error connecting to slave:",
|
"Error connecting to slave:",
|
||||||
"Error connecting to master:",
|
"Error connecting to master:",
|
||||||
"SSL connection error",
|
"SSL connection error",
|
||||||
"Malformed packet"
|
"Malformed packet",
|
||||||
|
"This client library is licensed only for use with MySQL servers having '%s' license"
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Start of code added by Roberto M. Serqueira - martinsc@uol.com.br - 05.24.2001 */
|
/* Start of code added by Roberto M. Serqueira - martinsc@uol.com.br - 05.24.2001 */
|
||||||
@ -86,7 +87,8 @@ const char *client_errors[]=
|
|||||||
"Error connecting to slave:",
|
"Error connecting to slave:",
|
||||||
"Error connecting to master:",
|
"Error connecting to master:",
|
||||||
"SSL connection error",
|
"SSL connection error",
|
||||||
"Malformed packet"
|
"Malformed packet",
|
||||||
|
"This client library is licensed only for use with MySQL servers having '%s' license"
|
||||||
};
|
};
|
||||||
|
|
||||||
#else /* ENGLISH */
|
#else /* ENGLISH */
|
||||||
@ -119,7 +121,8 @@ const char *client_errors[]=
|
|||||||
"Error connecting to slave:",
|
"Error connecting to slave:",
|
||||||
"Error connecting to master:",
|
"Error connecting to master:",
|
||||||
"SSL connection error",
|
"SSL connection error",
|
||||||
"Malformed packet"
|
"Malformed packet",
|
||||||
|
"This client library is licensed only for use with MySQL servers having '%s' license"
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1612,6 +1612,56 @@ mysql_connect(MYSQL *mysql,const char *host,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CHECK_LICENSE
|
||||||
|
/*
|
||||||
|
Check server side variable 'license'.
|
||||||
|
If the variable does not exist or does not contain 'Commercial',
|
||||||
|
we're talking to non-commercial server from commercial client.
|
||||||
|
SYNOPSIS
|
||||||
|
check_license()
|
||||||
|
RETURN VALUE
|
||||||
|
0 success
|
||||||
|
!0 network error or the server is not commercial.
|
||||||
|
Error code is saved in mysql->net.last_errno.
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int check_license(MYSQL *mysql)
|
||||||
|
{
|
||||||
|
MYSQL_ROW row;
|
||||||
|
MYSQL_RES *res;
|
||||||
|
NET *net= &mysql->net;
|
||||||
|
static const char query[]= "SELECT @@license";
|
||||||
|
static const char required_license[]= LICENSE;
|
||||||
|
|
||||||
|
if (mysql_real_query(mysql, query, sizeof(query)-1))
|
||||||
|
{
|
||||||
|
if (net->last_errno == ER_UNKNOWN_SYSTEM_VARIABLE)
|
||||||
|
{
|
||||||
|
net->last_errno= CR_WRONG_LICENSE;
|
||||||
|
sprintf(net->last_error, ER(net->last_errno), required_license);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (!(res= mysql_use_result(mysql)))
|
||||||
|
return 1;
|
||||||
|
row= mysql_fetch_row(res);
|
||||||
|
/*
|
||||||
|
If no rows in result set, or column value is NULL (none of these
|
||||||
|
two is ever true for server variables now), or column value
|
||||||
|
mismatch, set wrong license error.
|
||||||
|
*/
|
||||||
|
if (!net->last_errno &&
|
||||||
|
(!row || !row[0] ||
|
||||||
|
strncmp(row[0], required_license, sizeof(required_license))))
|
||||||
|
{
|
||||||
|
net->last_errno= CR_WRONG_LICENSE;
|
||||||
|
sprintf(net->last_error, ER(net->last_errno), required_license);
|
||||||
|
}
|
||||||
|
mysql_free_result(res);
|
||||||
|
return net->last_errno;
|
||||||
|
}
|
||||||
|
#endif /* CHECK_LICENSE */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
The following union is used to force a struct to be double allgined.
|
The following union is used to force a struct to be double allgined.
|
||||||
This is to avoid warings with gethostname_r() on Linux itanium systems
|
This is to avoid warings with gethostname_r() on Linux itanium systems
|
||||||
@ -2048,6 +2098,10 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
|
|||||||
net->compress=1;
|
net->compress=1;
|
||||||
if (mysql->options.max_allowed_packet)
|
if (mysql->options.max_allowed_packet)
|
||||||
net->max_packet_size= mysql->options.max_allowed_packet;
|
net->max_packet_size= mysql->options.max_allowed_packet;
|
||||||
|
#ifdef CHECK_LICENSE
|
||||||
|
if (check_license(mysql))
|
||||||
|
goto error;
|
||||||
|
#endif
|
||||||
if (db && mysql_select_db(mysql,db))
|
if (db && mysql_select_db(mysql,db))
|
||||||
goto error;
|
goto error;
|
||||||
if (mysql->options.init_command)
|
if (mysql->options.init_command)
|
||||||
|
@ -111,6 +111,18 @@ n s
|
|||||||
2 two bar
|
2 two bar
|
||||||
3 three bar
|
3 three bar
|
||||||
4 four bar
|
4 four bar
|
||||||
|
stop slave;
|
||||||
|
reset slave;
|
||||||
|
load data from master;
|
||||||
|
start slave;
|
||||||
|
insert into bar.t1 values (5, 'five bar');
|
||||||
|
select * from bar.t1;
|
||||||
|
n s
|
||||||
|
1 one bar
|
||||||
|
2 two bar
|
||||||
|
3 three bar
|
||||||
|
4 four bar
|
||||||
|
5 five bar
|
||||||
load table bar.t1 from master;
|
load table bar.t1 from master;
|
||||||
Table 't1' already exists
|
Table 't1' already exists
|
||||||
drop table bar.t1;
|
drop table bar.t1;
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
#
|
|
||||||
# This is the test for mysql_fix_privilege_tables
|
|
||||||
#
|
|
||||||
|
|
||||||
-- disable_query_log
|
|
||||||
-- source include/create_old_system_tables.inc
|
|
||||||
-- exec $MYSQL_FIX_SYSTEM_TABLES --database=test > nil 2>nil
|
|
||||||
-- enable_query_log
|
|
||||||
|
|
||||||
-- source include/system_db_struct.inc
|
|
||||||
|
|
||||||
-- disable_query_log
|
|
||||||
-- source include/drop_system_tables.inc
|
|
||||||
-- enable_query_log
|
|
@ -108,6 +108,21 @@ connection slave;
|
|||||||
sync_with_master;
|
sync_with_master;
|
||||||
select * from bar.t1;
|
select * from bar.t1;
|
||||||
|
|
||||||
|
# Check that LOAD DATA FROM MASTER is able to create master.info
|
||||||
|
# if needed (if RESET SLAVE was used before), before writing to it (BUG#2922).
|
||||||
|
|
||||||
|
stop slave;
|
||||||
|
reset slave;
|
||||||
|
load data from master;
|
||||||
|
start slave;
|
||||||
|
# see if replication coordinates were restored fine
|
||||||
|
connection master;
|
||||||
|
insert into bar.t1 values (5, 'five bar');
|
||||||
|
save_master_pos;
|
||||||
|
connection slave;
|
||||||
|
sync_with_master;
|
||||||
|
select * from bar.t1;
|
||||||
|
|
||||||
# Check that LOAD DATA FROM MASTER reports the error if it can't drop a
|
# Check that LOAD DATA FROM MASTER reports the error if it can't drop a
|
||||||
# table to be overwritten.
|
# table to be overwritten.
|
||||||
# DISABLED FOR NOW AS chmod IS NOT PORTABLE ON NON-UNIX
|
# DISABLED FOR NOW AS chmod IS NOT PORTABLE ON NON-UNIX
|
||||||
|
78
mysql-test/t/system_mysql_db_fix.test
Normal file
78
mysql-test/t/system_mysql_db_fix.test
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
#
|
||||||
|
# This is the test for mysql_fix_privilege_tables
|
||||||
|
#
|
||||||
|
|
||||||
|
-- disable_result_log
|
||||||
|
-- disable_query_log
|
||||||
|
|
||||||
|
use test;
|
||||||
|
|
||||||
|
# create system tables as in mysql-3.20
|
||||||
|
|
||||||
|
CREATE TABLE db (
|
||||||
|
Host char(60) binary DEFAULT '' NOT NULL,
|
||||||
|
Db char(32) binary DEFAULT '' NOT NULL,
|
||||||
|
User char(16) binary DEFAULT '' NOT NULL,
|
||||||
|
Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
PRIMARY KEY Host (Host,Db,User),
|
||||||
|
KEY User (User)
|
||||||
|
)
|
||||||
|
type=ISAM;
|
||||||
|
|
||||||
|
INSERT INTO db VALUES ('%','test', '','Y','Y','Y','Y','Y','Y');
|
||||||
|
INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y');
|
||||||
|
|
||||||
|
CREATE TABLE host (
|
||||||
|
Host char(60) binary DEFAULT '' NOT NULL,
|
||||||
|
Db char(32) binary DEFAULT '' NOT NULL,
|
||||||
|
Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
PRIMARY KEY Host (Host,Db)
|
||||||
|
)
|
||||||
|
type=ISAM;
|
||||||
|
|
||||||
|
CREATE TABLE user (
|
||||||
|
Host char(60) binary DEFAULT '' NOT NULL,
|
||||||
|
User char(16) binary DEFAULT '' NOT NULL,
|
||||||
|
Password char(16),
|
||||||
|
Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Create_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Reload_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Shutdown_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
Process_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
|
PRIMARY KEY Host (Host,User)
|
||||||
|
)
|
||||||
|
type=ISAM;
|
||||||
|
|
||||||
|
INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y');
|
||||||
|
INSERT INTO user VALUES ('localhost','', '','N','N','N','N','N','N','N','N','N');
|
||||||
|
|
||||||
|
-- exec $MYSQL_FIX_SYSTEM_TABLES --database=test
|
||||||
|
-- enable_query_log
|
||||||
|
-- enable_result_log
|
||||||
|
|
||||||
|
-- source include/system_db_struct.inc
|
||||||
|
|
||||||
|
-- disable_query_log
|
||||||
|
|
||||||
|
DROP TABLE db;
|
||||||
|
DROP TABLE host;
|
||||||
|
DROP TABLE user;
|
||||||
|
DROP TABLE func;
|
||||||
|
DROP TABLE tables_priv;
|
||||||
|
DROP TABLE columns_priv;
|
||||||
|
|
||||||
|
-- enable_query_log
|
@ -87,3 +87,4 @@ drop table test_func;
|
|||||||
drop table test_host;
|
drop table test_host;
|
||||||
drop table test_user;
|
drop table test_user;
|
||||||
drop table test_db;
|
drop table test_db;
|
||||||
|
|
@ -874,7 +874,7 @@ int load_master_data(THD* thd)
|
|||||||
|
|
||||||
cleanup_mysql_results(db_res, cur_table_res - 1, table_res);
|
cleanup_mysql_results(db_res, cur_table_res - 1, table_res);
|
||||||
|
|
||||||
// adjust position in the master
|
// adjust replication coordinates from the master
|
||||||
if (master_status_res)
|
if (master_status_res)
|
||||||
{
|
{
|
||||||
MYSQL_ROW row = mc_mysql_fetch_row(master_status_res);
|
MYSQL_ROW row = mc_mysql_fetch_row(master_status_res);
|
||||||
@ -887,10 +887,18 @@ int load_master_data(THD* thd)
|
|||||||
*/
|
*/
|
||||||
if (row && row[0] && row[1])
|
if (row && row[0] && row[1])
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
If the slave's master info is not inited, we init it, then we write
|
||||||
|
the new coordinates to it. Must call init_master_info() *before*
|
||||||
|
setting active_mi, because init_master_info() sets active_mi with
|
||||||
|
defaults.
|
||||||
|
*/
|
||||||
|
if (init_master_info(active_mi, master_info_file, relay_log_info_file, 0))
|
||||||
|
send_error(&thd->net, ER_MASTER_INFO);
|
||||||
strmake(active_mi->master_log_name, row[0],
|
strmake(active_mi->master_log_name, row[0],
|
||||||
sizeof(active_mi->master_log_name));
|
sizeof(active_mi->master_log_name));
|
||||||
active_mi->master_log_pos = strtoull(row[1], (char**) 0, 10);
|
active_mi->master_log_pos = strtoull(row[1], (char**) 0, 10);
|
||||||
// don't hit the magic number
|
// at least in recent versions, the condition below should be false
|
||||||
if (active_mi->master_log_pos < BIN_LOG_HEADER_SIZE)
|
if (active_mi->master_log_pos < BIN_LOG_HEADER_SIZE)
|
||||||
active_mi->master_log_pos = BIN_LOG_HEADER_SIZE;
|
active_mi->master_log_pos = BIN_LOG_HEADER_SIZE;
|
||||||
active_mi->rli.pending = 0;
|
active_mi->rli.pending = 0;
|
||||||
|
@ -334,14 +334,12 @@ static sys_var_rand_seed2 sys_rand_seed2("rand_seed2");
|
|||||||
static sys_var_thd_ulong sys_default_week_format("default_week_format",
|
static sys_var_thd_ulong sys_default_week_format("default_week_format",
|
||||||
&SV::default_week_format);
|
&SV::default_week_format);
|
||||||
|
|
||||||
static const char license[]= "GPL";
|
|
||||||
|
|
||||||
/* Read only variables */
|
/* Read only variables */
|
||||||
|
|
||||||
sys_var_const_str sys_os("version_compile_os", SYSTEM_TYPE);
|
sys_var_const_str sys_os("version_compile_os", SYSTEM_TYPE);
|
||||||
sys_var_const_str sys_license("license", license);
|
|
||||||
|
|
||||||
/* Global read-only variable describing server license */
|
/* Global read-only variable describing server license */
|
||||||
|
sys_var_const_str sys_license("license", LICENSE);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user