Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
17278496
Commit
17278496
authored
Mar 11, 2014
by
Michael Widenius
Browse files
Options
Browse Files
Download
Plain Diff
Merge with 5.5
parents
23af77d2
800a278f
Changes
22
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
2759 additions
and
65 deletions
+2759
-65
debian/dist/Debian/mariadb-server-5.5.files.in
debian/dist/Debian/mariadb-server-5.5.files.in
+1
-0
debian/dist/Ubuntu/mariadb-server-5.5.files.in
debian/dist/Ubuntu/mariadb-server-5.5.files.in
+1
-0
extra/replace.c
extra/replace.c
+2
-2
mysql-test/r/stack-crash.result
mysql-test/r/stack-crash.result
+93
-0
mysql-test/suite/plugins/r/server_audit.result
mysql-test/suite/plugins/r/server_audit.result
+203
-0
mysql-test/suite/plugins/t/server_audit.opt
mysql-test/suite/plugins/t/server_audit.opt
+2
-0
mysql-test/suite/plugins/t/server_audit.test
mysql-test/suite/plugins/t/server_audit.test
+77
-0
mysql-test/t/stack-crash.test
mysql-test/t/stack-crash.test
+96
-0
plugin/server_audit/CMakeLists.txt
plugin/server_audit/CMakeLists.txt
+16
-0
plugin/server_audit/COPYING
plugin/server_audit/COPYING
+339
-0
plugin/server_audit/server_audit.c
plugin/server_audit/server_audit.c
+1836
-0
sql/sql_audit.cc
sql/sql_audit.cc
+2
-2
sql/sql_audit.h
sql/sql_audit.h
+10
-2
storage/innobase/fil/fil0fil.c
storage/innobase/fil/fil0fil.c
+19
-8
storage/maria/ma_blockrec.c
storage/maria/ma_blockrec.c
+15
-7
storage/maria/ma_dynrec.c
storage/maria/ma_dynrec.c
+17
-15
storage/maria/ma_unique.c
storage/maria/ma_unique.c
+3
-3
storage/maria/maria_def.h
storage/maria/maria_def.h
+1
-0
storage/maria/maria_pack.c
storage/maria/maria_pack.c
+6
-4
storage/myisam/mi_check.c
storage/myisam/mi_check.c
+1
-1
storage/myisam/mi_checksum.c
storage/myisam/mi_checksum.c
+1
-1
storage/xtradb/fil/fil0fil.c
storage/xtradb/fil/fil0fil.c
+18
-20
No files found.
debian/dist/Debian/mariadb-server-5.5.files.in
View file @
17278496
...
...
@@ -7,6 +7,7 @@ usr/lib/mysql/plugin/semisync_master.so
usr/lib/mysql/plugin/semisync_slave.so
usr/lib/mysql/plugin/handlersocket.so
usr/lib/mysql/plugin/sql_errlog.so
usr/lib/mysql/plugin/server_audit.so
usr/lib/libhsclient.so.*
etc/mysql/debian-start
etc/mysql/conf.d/mysqld_safe_syslog.cnf
...
...
debian/dist/Ubuntu/mariadb-server-5.5.files.in
View file @
17278496
...
...
@@ -7,6 +7,7 @@ usr/lib/mysql/plugin/semisync_master.so
usr/lib/mysql/plugin/semisync_slave.so
usr/lib/mysql/plugin/handlersocket.so
usr/lib/mysql/plugin/sql_errlog.so
usr/lib/mysql/plugin/server_audit.so
usr/lib/libhsclient.so.*
etc/apparmor.d/usr.sbin.mysqld
usr/share/apport/package-hooks/source_mariadb-5.5.py
...
...
extra/replace.c
View file @
17278496
...
...
@@ -265,7 +265,7 @@ static int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name)
if
(
!
(
pa
->
str
=
(
uchar
*
)
my_malloc
((
uint
)
(
PS_MALLOC
-
MALLOC_OVERHEAD
),
MYF
(
MY_WME
))))
{
my_free
((
char
*
)
pa
->
typelib
.
type_names
);
my_free
((
void
*
)
pa
->
typelib
.
type_names
);
DBUG_RETURN
(
-
1
);
}
pa
->
max_count
=
(
PC_MALLOC
-
MALLOC_OVERHEAD
)
/
(
sizeof
(
uchar
*
)
+
...
...
@@ -327,7 +327,7 @@ static void free_pointer_array(reg1 POINTER_ARRAY *pa)
if
(
pa
->
typelib
.
count
)
{
pa
->
typelib
.
count
=
0
;
my_free
((
char
*
)
pa
->
typelib
.
type_names
);
my_free
((
void
*
)
pa
->
typelib
.
type_names
);
pa
->
typelib
.
type_names
=
0
;
my_free
(
pa
->
str
);
}
...
...
mysql-test/r/stack-crash.result
0 → 100644
View file @
17278496
drop table if exists t1,t2;
Warnings:
Note 1051 Unknown table 't1'
Note 1051 Unknown table 't2'
CREATE TABLE t1 (
`sspo_id` int(11) NOT NULL AUTO_INCREMENT,
`sspo_uid` int(11) NOT NULL DEFAULT '0',
`sspo_type` varchar(1) NOT NULL DEFAULT 'P',
`sspo_text` longtext NOT NULL,
`sspo_image` varchar(255) NOT NULL,
`sspo_source` int(11) NOT NULL DEFAULT '0',
`sspo_event_name` varchar(255) NOT NULL DEFAULT '',
`sspo_event_location` varchar(255) NOT NULL DEFAULT '',
`sspo_event_date` datetime DEFAULT NULL,
`sspo_remote_title` varchar(255) NOT NULL,
`sspo_remote_url` varchar(255) NOT NULL,
`sspo_remote_desc` text NOT NULL,
`sspo_remote_image` varchar(255) NOT NULL,
`sspo_obj_status` varchar(1) NOT NULL DEFAULT 'A',
`sspo_cr_date` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
`sspo_cr_uid` int(11) NOT NULL DEFAULT '0',
`sspo_lu_date` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
`sspo_lu_uid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`sspo_id`),
KEY `post_uid` (`sspo_uid`,`sspo_cr_date`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;
Warnings:
Warning 1286 Unknown storage engine 'InnoDB'
Warning 1266 Using storage engine MyISAM for table 't1'
INSERT INTO t1 VALUES (1,2,'P','test1','',0,'','',NULL,'','','','','A','2013-09-30 00:19:32',2,'2013-09-30 00:19:32',2),(2,2,'P','bbb','',0,'','',NULL,'','','','','A','2013-10-02 15:06:35',2,'2013-10-02 15:06:35',2);
CREATE TABLE `t2` (
`spoo_id` int(11) NOT NULL AUTO_INCREMENT,
`spoo_user_type_id` int(11) NOT NULL DEFAULT '0',
`spoo_uid` int(11) NOT NULL DEFAULT '0',
`spoo_option_id` int(11) NOT NULL DEFAULT '0',
`spoo_value` varchar(10000) NOT NULL,
`spoo_obj_status` varchar(1) NOT NULL DEFAULT 'A',
`spoo_cr_date` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
`spoo_cr_uid` int(11) NOT NULL DEFAULT '0',
`spoo_lu_date` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
`spoo_lu_uid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`spoo_id`),
KEY `object_option_main_idx` (`spoo_user_type_id`,`spoo_uid`,`spoo_option_id`,`spoo_value`(255))
) ENGINE=InnoDB AUTO_INCREMENT=107 DEFAULT CHARSET=utf8;
Warnings:
Warning 1286 Unknown storage engine 'InnoDB'
Warning 1266 Using storage engine MyISAM for table 't2'
INSERT INTO `t2` VALUES (19,1,2,6,'Dortmund','A','2013-09-26 01:36:51',2,'2013-09-26 01:36:51',2),(20,1,2,8,'49','A','2013-09-26 01:36:51',2,'2013-09-26 01:36:51',2);
SELECT Count(*)
FROM t1 AS tbl
LEFT JOIN t2 a
ON a.spoo_uid = sspo_uid
AND a.spoo_option_id = 1
LEFT JOIN t2 b
ON b.spoo_uid = sspo_uid
AND b.spoo_option_id = 2
LEFT JOIN t2 c
ON c.spoo_uid = sspo_uid
AND c.spoo_option_id = 3
LEFT JOIN t2 d
ON d.spoo_uid = sspo_uid
AND d.spoo_option_id = 5
LEFT JOIN t2 e
ON e.spoo_uid = sspo_uid
AND e.spoo_option_id = 4
LEFT JOIN t2 f
ON f.spoo_uid = sspo_uid
AND f.spoo_option_id = 11
LEFT JOIN t2 g
ON g.spoo_uid = sspo_uid
AND g.spoo_option_id = 7
LEFT JOIN t2 h
ON h.spoo_uid = sspo_uid
AND h.spoo_option_id = 10
LEFT JOIN t2 i
ON i.spoo_uid = sspo_uid
AND i.spoo_option_id = 18
LEFT JOIN t2 j
ON j.spoo_uid = sspo_uid
AND j.spoo_option_id = 6
GROUP BY a.spoo_value,
b.spoo_value,
c.spoo_value,
d.spoo_value,
e.spoo_value,
f.spoo_value,
g.spoo_value,
h.spoo_value,
i.spoo_value,
j.spoo_value;
Count(*)
2
drop table t1,t2;
mysql-test/suite/plugins/r/server_audit.result
0 → 100644
View file @
17278496
install plugin server_audit soname 'server_audit';
show variables like 'server_audit%';
Variable_name Value
server_audit_events
server_audit_excl_users
server_audit_file_path server_audit.log
server_audit_file_rotate_now OFF
server_audit_file_rotate_size 1000000
server_audit_file_rotations 9
server_audit_incl_users
server_audit_logging OFF
server_audit_mode 0
server_audit_output_type file
server_audit_syslog_facility LOG_USER
server_audit_syslog_ident mysql-server_auditing
server_audit_syslog_info
server_audit_syslog_priority LOG_INFO
set global server_audit_file_path='server_audit.log';
set global server_audit_output_type=file;
set global server_audit_logging=on;
connect(localhost,no_such_user,,mysql,MASTER_PORT,MASTER_SOCKET);
ERROR 28000: Access denied for user 'no_such_user'@'localhost' (using password: NO)
set global server_audit_incl_users='odin, dva, tri';
create table t1 (id int);
set global server_audit_incl_users='odin, root, dva, tri';
create table t2 (id int);
set global server_audit_excl_users='odin, dva, tri';
Warnings:
Warning 1 User 'odin' is in the server_audit_incl_users, so wasn't added.
Warning 1 User 'dva' is in the server_audit_incl_users, so wasn't added.
Warning 1 User 'tri' is in the server_audit_incl_users, so wasn't added.
insert into t1 values (1), (2);
select * from t1;
id
1
2
set global server_audit_incl_users='odin, root, dva, tri';
insert into t2 values (1), (2);
select * from t2;
id
1
2
alter table t1 rename renamed_t1;
set global server_audit_events='connect,query';
insert into t2 values (1), (2);
select * from t2;
id
1
2
1
2
select * from t_doesnt_exist;
ERROR 42S02: Table 'test.t_doesnt_exist' doesn't exist
syntax_error_query;
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'syntax_error_query' at line 1
drop table renamed_t1, t2;
show variables like 'server_audit%';
Variable_name Value
server_audit_events CONNECT,QUERY
server_audit_excl_users
server_audit_file_path server_audit.log
server_audit_file_rotate_now OFF
server_audit_file_rotate_size 1000000
server_audit_file_rotations 9
server_audit_incl_users odin, root, dva, tri
server_audit_logging ON
server_audit_mode 0
server_audit_output_type file
server_audit_syslog_facility LOG_USER
server_audit_syslog_ident mysql-server_auditing
server_audit_syslog_info
server_audit_syslog_priority LOG_INFO
set global server_audit_mode=1;
set global server_audit_events='';
create database sa_db;
create table t1 (id2 int);
insert into t1 values (1), (2);
select * from t1;
id2
1
2
drop table t1;
use sa_db;
create table sa_t1(id int);
insert into sa_t1 values (1), (2);
drop table sa_t1;
drop database sa_db;
set global server_audit_file_path='.';
show status like 'server_audit_current_log';
Variable_name Value
Server_audit_current_log HOME_DIR/server_audit.log
set global server_audit_file_path='';
show status like 'server_audit_current_log';
Variable_name Value
Server_audit_current_log server_audit.log
set global server_audit_file_path=' ';
show status like 'server_audit_current_log';
Variable_name Value
Server_audit_current_log server_audit.log
set global server_audit_file_path='nonexisting_dir/';
Warnings:
Warning 1 SERVER AUDIT plugin can't create file 'nonexisting_dir/'.
show status like 'server_audit_current_log';
Variable_name Value
Server_audit_current_log server_audit.log
show variables like 'server_audit%';
Variable_name Value
server_audit_events
server_audit_excl_users
server_audit_file_path
server_audit_file_rotate_now OFF
server_audit_file_rotate_size 1000000
server_audit_file_rotations 9
server_audit_incl_users odin, root, dva, tri
server_audit_logging ON
server_audit_mode 1
server_audit_output_type file
server_audit_syslog_facility LOG_USER
server_audit_syslog_ident mysql-server_auditing
server_audit_syslog_info
server_audit_syslog_priority LOG_INFO
uninstall plugin server_audit;
Warnings:
Warning 1620 Plugin is busy and will be uninstalled on shutdown
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_logging=on',0
TIME,HOSTNAME,root,localhost,ID,0,CONNECT,mysql,,0
TIME,HOSTNAME,root,localhost,ID,0,DISCONNECT,mysql,,0
TIME,HOSTNAME,no_such_user,localhost,ID,0,FAILED_CONNECT,,,ID
TIME,HOSTNAME,no_such_user,localhost,ID,0,DISCONNECT,,,0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_incl_users=\'odin, root, dva, tri\'',0
TIME,HOSTNAME,root,localhost,ID,ID,CREATE,test,t2,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'create table t2 (id int)',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_excl_users=\'odin, dva, tri\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'SHOW WARNINGS',0
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,test,t1,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'insert into t1 values (1), (2)',0
TIME,HOSTNAME,root,localhost,ID,ID,READ,test,t1,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t1',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_incl_users=\'odin, root, dva, tri\'',0
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,test,t2,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'insert into t2 values (1), (2)',0
TIME,HOSTNAME,root,localhost,ID,ID,READ,test,t2,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t2',0
TIME,HOSTNAME,root,localhost,ID,ID,READ,test,t1,
TIME,HOSTNAME,root,localhost,ID,ID,ALTER,test,t1,
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,table_stats,
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,column_stats,
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,index_stats,
TIME,HOSTNAME,root,localhost,ID,ID,RENAME,test,t1|test.renamed_t1,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'alter table t1 rename renamed_t1',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_events=\'connect,query\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'insert into t2 values (1), (2)',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t2',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t_doesnt_exist',ID
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'syntax_error_query',ID
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'drop table renamed_t1, t2',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show variables like \'server_audit%\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_mode=1',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_events=\'\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'create database sa_db',0
TIME,HOSTNAME,root,localhost,ID,0,CONNECT,test,,0
TIME,HOSTNAME,root,localhost,ID,ID,CREATE,test,t1,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'create table t1 (id2 int)',0
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,test,t1,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'insert into t1 values (1), (2)',0
TIME,HOSTNAME,root,localhost,ID,ID,READ,test,t1,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'select * from t1',0
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,table_stats,
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,column_stats,
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,index_stats,
TIME,HOSTNAME,root,localhost,ID,ID,DROP,test,t1,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'drop table t1',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'use sa_db',0
TIME,HOSTNAME,root,localhost,ID,ID,CREATE,sa_db,sa_t1,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'create table sa_t1(id int)',0
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,sa_db,sa_t1,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'insert into sa_t1 values (1), (2)',0
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,table_stats,
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,column_stats,
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,index_stats,
TIME,HOSTNAME,root,localhost,ID,ID,DROP,sa_db,sa_t1,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop table sa_t1',0
TIME,HOSTNAME,root,localhost,ID,ID,READ,mysql,proc,
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,proc,
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,event,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop database sa_db',0
TIME,HOSTNAME,root,localhost,ID,0,DISCONNECT,sa_db,,0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'.\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'.\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show status like \'server_audit_current_log\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show status like \'server_audit_current_log\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\' \'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\' \'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show status like \'server_audit_current_log\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'nonexisting_dir/\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'nonexisting_dir/\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'SHOW WARNINGS',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show status like \'server_audit_current_log\'',0
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show variables like \'server_audit%\'',0
TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,plugin,
TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'uninstall plugin server_audit',0
mysql-test/suite/plugins/t/server_audit.opt
0 → 100644
View file @
17278496
--thread_handling='one-thread-per-connection'
mysql-test/suite/plugins/t/server_audit.test
0 → 100644
View file @
17278496
--
source
include
/
not_embedded
.
inc
if
(
!
$SERVER_AUDIT_SO
)
{
skip
No
SERVER_AUDIT
plugin
;
}
install
plugin
server_audit
soname
'server_audit'
;
show
variables
like
'server_audit%'
;
set
global
server_audit_file_path
=
'server_audit.log'
;
set
global
server_audit_output_type
=
file
;
set
global
server_audit_logging
=
on
;
connect
(
con1
,
localhost
,
root
,,
mysql
);
connection
default
;
disconnect
con1
;
--
replace_result
$MASTER_MYSOCK
MASTER_SOCKET
$MASTER_MYPORT
MASTER_PORT
--
error
ER_ACCESS_DENIED_ERROR
connect
(
con1
,
localhost
,
no_such_user
,,
mysql
);
connection
default
;
--
sleep
2
set
global
server_audit_incl_users
=
'odin, dva, tri'
;
create
table
t1
(
id
int
);
set
global
server_audit_incl_users
=
'odin, root, dva, tri'
;
create
table
t2
(
id
int
);
set
global
server_audit_excl_users
=
'odin, dva, tri'
;
insert
into
t1
values
(
1
),
(
2
);
select
*
from
t1
;
set
global
server_audit_incl_users
=
'odin, root, dva, tri'
;
insert
into
t2
values
(
1
),
(
2
);
select
*
from
t2
;
alter
table
t1
rename
renamed_t1
;
set
global
server_audit_events
=
'connect,query'
;
insert
into
t2
values
(
1
),
(
2
);
select
*
from
t2
;
--
error
ER_NO_SUCH_TABLE
select
*
from
t_doesnt_exist
;
--
error
1064
syntax_error_query
;
drop
table
renamed_t1
,
t2
;
show
variables
like
'server_audit%'
;
set
global
server_audit_mode
=
1
;
set
global
server_audit_events
=
''
;
create
database
sa_db
;
connect
(
con1
,
localhost
,
root
,,
test
);
connection
con1
;
create
table
t1
(
id2
int
);
insert
into
t1
values
(
1
),
(
2
);
select
*
from
t1
;
drop
table
t1
;
use
sa_db
;
create
table
sa_t1
(
id
int
);
insert
into
sa_t1
values
(
1
),
(
2
);
drop
table
sa_t1
;
drop
database
sa_db
;
connection
default
;
disconnect
con1
;
--
sleep
2
set
global
server_audit_file_path
=
'.'
;
--
replace_regex
/
\
.
[
\\\
/
]
/
HOME_DIR
\
//
show
status
like
'server_audit_current_log'
;
set
global
server_audit_file_path
=
''
;
show
status
like
'server_audit_current_log'
;
set
global
server_audit_file_path
=
' '
;
show
status
like
'server_audit_current_log'
;
set
global
server_audit_file_path
=
'nonexisting_dir/'
;
show
status
like
'server_audit_current_log'
;
show
variables
like
'server_audit%'
;
uninstall
plugin
server_audit
;
let
$MYSQLD_DATADIR
=
`SELECT @@datadir`
;
# replace the timestamp and the hostname with constant values
--
replace_regex
/
[
0
-
9
]
*
[
0
-
9
][
0
-
9
]
:
[
0
-
9
][
0
-
9
]
:
[
0
-
9
][
0
-
9
]
\
,[
^
,]
*
\
,
/
TIME
,
HOSTNAME
,
/
/
\
,[
1
-
9
][
0
-
9
]
*
\
,
/
,
1
,
/
/
\
,[
1
-
9
][
0
-
9
]
*/
,
ID
/
cat_file
$MYSQLD_DATADIR
/
server_audit
.
log
;
remove_file
$MYSQLD_DATADIR
/
server_audit
.
log
;
mysql-test/t/stack-crash.test
0 → 100644
View file @
17278496
#
# Test to ensure that we don't get stack overflows
#
drop
table
if
exists
t1
,
t2
;
#
# MDEV-5724
# Server crashes on SQL select containing more group by and left join
# statements
# This was because record_buffer was 300,000 bytes and caused stack overflow
#
CREATE
TABLE
t1
(
`sspo_id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`sspo_uid`
int
(
11
)
NOT
NULL
DEFAULT
'0'
,
`sspo_type`
varchar
(
1
)
NOT
NULL
DEFAULT
'P'
,
`sspo_text`
longtext
NOT
NULL
,
`sspo_image`
varchar
(
255
)
NOT
NULL
,
`sspo_source`
int
(
11
)
NOT
NULL
DEFAULT
'0'
,
`sspo_event_name`
varchar
(
255
)
NOT
NULL
DEFAULT
''
,
`sspo_event_location`
varchar
(
255
)
NOT
NULL
DEFAULT
''
,
`sspo_event_date`
datetime
DEFAULT
NULL
,
`sspo_remote_title`
varchar
(
255
)
NOT
NULL
,
`sspo_remote_url`
varchar
(
255
)
NOT
NULL
,
`sspo_remote_desc`
text
NOT
NULL
,
`sspo_remote_image`
varchar
(
255
)
NOT
NULL
,
`sspo_obj_status`
varchar
(
1
)
NOT
NULL
DEFAULT
'A'
,
`sspo_cr_date`
datetime
NOT
NULL
DEFAULT
'1970-01-01 00:00:00'
,
`sspo_cr_uid`
int
(
11
)
NOT
NULL
DEFAULT
'0'
,
`sspo_lu_date`
datetime
NOT
NULL
DEFAULT
'1970-01-01 00:00:00'
,
`sspo_lu_uid`
int
(
11
)
NOT
NULL
DEFAULT
'0'
,
PRIMARY
KEY
(
`sspo_id`
),
KEY
`post_uid`
(
`sspo_uid`
,
`sspo_cr_date`
)
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
30
DEFAULT
CHARSET
=
utf8
;
INSERT
INTO
t1
VALUES
(
1
,
2
,
'P'
,
'test1'
,
''
,
0
,
''
,
''
,
NULL
,
''
,
''
,
''
,
''
,
'A'
,
'2013-09-30 00:19:32'
,
2
,
'2013-09-30 00:19:32'
,
2
),(
2
,
2
,
'P'
,
'bbb'
,
''
,
0
,
''
,
''
,
NULL
,
''
,
''
,
''
,
''
,
'A'
,
'2013-10-02 15:06:35'
,
2
,
'2013-10-02 15:06:35'
,
2
);
CREATE
TABLE
`t2`
(
`spoo_id`
int
(
11
)
NOT
NULL
AUTO_INCREMENT
,
`spoo_user_type_id`
int
(
11
)
NOT
NULL
DEFAULT
'0'
,
`spoo_uid`
int
(
11
)
NOT
NULL
DEFAULT
'0'
,
`spoo_option_id`
int
(
11
)
NOT
NULL
DEFAULT
'0'
,
`spoo_value`
varchar
(
10000
)
NOT
NULL
,
`spoo_obj_status`
varchar
(
1
)
NOT
NULL
DEFAULT
'A'
,
`spoo_cr_date`
datetime
NOT
NULL
DEFAULT
'1970-01-01 00:00:00'
,
`spoo_cr_uid`
int
(
11
)
NOT
NULL
DEFAULT
'0'
,
`spoo_lu_date`
datetime
NOT
NULL
DEFAULT
'1970-01-01 00:00:00'
,
`spoo_lu_uid`
int
(
11
)
NOT
NULL
DEFAULT
'0'
,
PRIMARY
KEY
(
`spoo_id`
),
KEY
`object_option_main_idx`
(
`spoo_user_type_id`
,
`spoo_uid`
,
`spoo_option_id`
,
`spoo_value`
(
255
))
)
ENGINE
=
InnoDB
AUTO_INCREMENT
=
107
DEFAULT
CHARSET
=
utf8
;
INSERT
INTO
`t2`
VALUES
(
19
,
1
,
2
,
6
,
'Dortmund'
,
'A'
,
'2013-09-26 01:36:51'
,
2
,
'2013-09-26 01:36:51'
,
2
),(
20
,
1
,
2
,
8
,
'49'
,
'A'
,
'2013-09-26 01:36:51'
,
2
,
'2013-09-26 01:36:51'
,
2
);
SELECT
Count
(
*
)
FROM
t1
AS
tbl
LEFT
JOIN
t2
a
ON
a
.
spoo_uid
=
sspo_uid
AND
a
.
spoo_option_id
=
1
LEFT
JOIN
t2
b
ON
b
.
spoo_uid
=
sspo_uid
AND
b
.
spoo_option_id
=
2
LEFT
JOIN
t2
c
ON
c
.
spoo_uid
=
sspo_uid
AND
c
.
spoo_option_id
=
3
LEFT
JOIN
t2
d
ON
d
.
spoo_uid
=
sspo_uid
AND
d
.
spoo_option_id
=
5
LEFT
JOIN
t2
e
ON
e
.
spoo_uid
=
sspo_uid
AND
e
.
spoo_option_id
=
4
LEFT
JOIN
t2
f
ON
f
.
spoo_uid
=
sspo_uid
AND
f
.
spoo_option_id
=
11
LEFT
JOIN
t2
g
ON
g
.
spoo_uid
=
sspo_uid
AND
g
.
spoo_option_id
=
7
LEFT
JOIN
t2
h
ON
h
.
spoo_uid
=
sspo_uid
AND
h
.
spoo_option_id
=
10
LEFT
JOIN
t2
i
ON
i
.
spoo_uid
=
sspo_uid
AND
i
.
spoo_option_id
=
18
LEFT
JOIN
t2
j
ON
j
.
spoo_uid
=
sspo_uid
AND
j
.
spoo_option_id
=
6
GROUP
BY
a
.
spoo_value
,
b
.
spoo_value
,
c
.
spoo_value
,
d
.
spoo_value
,
e
.
spoo_value
,
f
.
spoo_value
,
g
.
spoo_value
,
h
.
spoo_value
,
i
.
spoo_value
,
j
.
spoo_value
;
drop
table
t1
,
t2
;
plugin/server_audit/CMakeLists.txt
0 → 100644
View file @
17278496
# Copyright (C) 2013 Alexey Botchkov and SkySQL Ab
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
MYSQL_ADD_PLUGIN
(
server_audit server_audit.c MODULE_ONLY
)
plugin/server_audit/COPYING
0 → 100644
View file @
17278496
This diff is collapsed.
Click to expand it.
plugin/server_audit/server_audit.c
0 → 100644
View file @
17278496
This diff is collapsed.
Click to expand it.
sql/sql_audit.cc
View file @
17278496
...
...
@@ -84,7 +84,7 @@ static void general_class_handler(THD *thd, uint event_subtype, va_list ap)
event
.
general_rows
=
(
unsigned
long
long
)
va_arg
(
ap
,
ha_rows
);
event
.
database
=
va_arg
(
ap
,
const
char
*
);
event
.
database_length
=
va_arg
(
ap
,
unsigned
int
);
event
.
query_id
=
(
unsigned
long
long
)
thd
->
query_id
;
event
.
query_id
=
(
unsigned
long
long
)
(
thd
?
thd
->
query_id
:
0
)
;
event_class_dispatch
(
thd
,
MYSQL_AUDIT_GENERAL_CLASS
,
&
event
);
}
...
...
@@ -134,7 +134,7 @@ static void table_class_handler(THD *thd, uint event_subclass, va_list ap)
event
.
new_database_length
=
va_arg
(
ap
,
unsigned
int
);
event
.
new_table
=
va_arg
(
ap
,
const
char
*
);
event
.
new_table_length
=
va_arg
(
ap
,
unsigned
int
);
event
.
query_id
=
(
unsigned
long
long
)
thd
->
query_id
;
event
.
query_id
=
(
unsigned
long
long
)
(
thd
?
thd
->
query_id
:
0
)
;
event_class_dispatch
(
thd
,
MYSQL_AUDIT_TABLE_CLASS
,
&
event
);
}
...
...
sql/sql_audit.h
View file @
17278496
...
...
@@ -96,11 +96,13 @@ void mysql_audit_general_log(THD *thd, time_t time,
{
CHARSET_INFO
*
clientcs
=
thd
?
thd
->
variables
.
character_set_client
:
global_system_variables
.
character_set_client
;
const
char
*
db
=
thd
?
thd
->
db
:
""
;
size_t
db_length
=
thd
?
thd
->
db_length
:
0
;
mysql_audit_notify
(
thd
,
MYSQL_AUDIT_GENERAL_CLASS
,
MYSQL_AUDIT_GENERAL_LOG
,
0
,
time
,
user
,
userlen
,
cmd
,
cmdlen
,
query
,
querylen
,
clientcs
,
(
ha_rows
)
0
,
thd
->
db
,
thd
->
db_length
);
db
,
db_length
);
}
}
...
...
@@ -129,6 +131,8 @@ void mysql_audit_general(THD *thd, uint event_subtype,
char
user_buff
[
MAX_USER_HOST_SIZE
];
CSET_STRING
query
;
ha_rows
rows
;
const
char
*
db
;
size_t
db_length
;
if
(
thd
)
{
...
...
@@ -136,18 +140,22 @@ void mysql_audit_general(THD *thd, uint event_subtype,
user
=
user_buff
;
userlen
=
make_user_name
(
thd
,
user_buff
);
rows
=
thd
->
warning_info
->
current_row_for_warning
();
db
=
thd
->
db
;
db_length
=
thd
->
db_length
;
}
else
{
user
=
0
;
userlen
=
0
;
rows
=
0
;
db
=
""
;
db_length
=
0
;
}
mysql_audit_notify
(
thd
,
MYSQL_AUDIT_GENERAL_CLASS
,
event_subtype
,
error_code
,
time
,
user
,
userlen
,
msg
,
msglen
,
query
.
str
(),
query
.
length
(),
query
.
charset
(),
rows
,
thd
->
db
,
thd
->
db_length
);
db
,
db_length
);
}
}
...
...
storage/innobase/fil/fil0fil.c
View file @
17278496
...
...
@@ -4110,18 +4110,31 @@ fil_extend_space_to_desired_size(
#ifdef HAVE_POSIX_FALLOCATE
if
(
srv_use_posix_fallocate
)
{
offset_high
=
size_after_extend
*
page_size
/
(
4ULL
*
1024
*
1024
*
1024
);
offset_low
=
size_after_extend
*
page_size
%
(
4ULL
*
1024
*
1024
*
1024
);
ib_int64_t
start_offset
=
start_page_no
*
page_size
;
ib_int64_t
end_offset
=
(
size_after_extend
-
start_page_no
)
*
page_size
;
ib_int64_t
desired_size
=
size_after_extend
*
page_size
;
mutex_exit
(
&
fil_system
->
mutex
);
success
=
os_file_set_size
(
node
->
name
,
node
->
handle
,
offset_low
,
offset_high
);
if
(
posix_fallocate
(
node
->
handle
,
start_offset
,
end_offset
)
==
-
1
)
{
fprintf
(
stderr
,
"InnoDB: Error: preallocating file "
"space for file
\'
%s
\'
failed. Current size "
" %lld, len %lld, desired size %lld
\n
"
,
node
->
name
,
start_offset
,
end_offset
,
desired_size
);
success
=
FALSE
;
}
else
{
success
=
TRUE
;
}
mutex_enter
(
&
fil_system
->
mutex
);
if
(
success
)
{
node
->
size
+=
(
size_after_extend
-
start_page_no
);
space
->
size
+=
(
size_after_extend
-
start_page_no
);
os_has_said_disk_full
=
FALSE
;
}
fil_node_complete_io
(
node
,
fil_system
,
OS_FILE_READ
);
goto
complete_io
;
}
#endif
...
...
@@ -4178,12 +4191,10 @@ fil_extend_space_to_desired_size(
mem_free
(
buf2
);
#ifdef HAVE_POSIX_FALLOCATE
complete_io:
#endif
fil_node_complete_io
(
node
,
fil_system
,
OS_FILE_WRITE
);
complete_io:
*
actual_size
=
space
->
size
;
#ifndef UNIV_HOTBACKUP
...
...
storage/maria/ma_blockrec.c
View file @
17278496
...
...
@@ -3248,8 +3248,9 @@ static my_bool write_block_record(MARIA_HA *info,
blob_length
-=
(
blob_length
%
FULL_PAGE_SIZE
(
block_size
));
if
(
blob_length
)
{
memcpy
(
&
log_array_pos
->
str
,
record
+
tmp_column
->
offset
+
length
,
sizeof
(
uchar
*
));
memcpy
((
void
*
)
&
log_array_pos
->
str
,
record
+
tmp_column
->
offset
+
length
,
sizeof
(
uchar
*
));
log_array_pos
->
length
=
blob_length
;
log_entry_length
+=
blob_length
;
log_array_pos
++
;
...
...
@@ -5144,7 +5145,12 @@ my_bool _ma_cmp_block_unique(MARIA_HA *info, MARIA_UNIQUEDEF *def,
int
error
;
DBUG_ENTER
(
"_ma_cmp_block_unique"
);
if
(
!
(
old_record
=
my_alloca
(
info
->
s
->
base
.
reclength
)))
/*
Don't allocate more than 16K on the stack to ensure we don't get
stack overflow.
*/
if
(
!
(
old_record
=
my_safe_alloca
(
info
->
s
->
base
.
reclength
,
MARIA_MAX_RECORD_ON_STACK
)))
DBUG_RETURN
(
1
);
/* Don't let the compare destroy blobs that may be in use */
...
...
@@ -5166,7 +5172,8 @@ my_bool _ma_cmp_block_unique(MARIA_HA *info, MARIA_UNIQUEDEF *def,
info
->
rec_buff_size
=
org_rec_buff_size
;
}
DBUG_PRINT
(
"exit"
,
(
"result: %d"
,
error
));
my_afree
(
old_record
);
my_safe_afree
(
old_record
,
info
->
s
->
base
.
reclength
,
MARIA_MAX_RECORD_ON_STACK
);
DBUG_RETURN
(
error
!=
0
);
}
...
...
@@ -5338,6 +5345,7 @@ int _ma_scan_restore_block_record(MARIA_HA *info,
info Maria handler
record Store found here
record_pos Value stored in info->cur_row.next_pos after last call
This is offset inside the current pagebuff
skip_deleted
NOTES
...
...
@@ -5375,7 +5383,7 @@ restart_record_read:
/* Ensure that scan.dir and record_pos are in sync */
DBUG_ASSERT
(
info
->
scan
.
dir
==
dir_entry_pos
(
info
->
scan
.
page_buff
,
share
->
block_size
,
record_pos
));
(
uint
)
record_pos
));
/* Search for a valid directory entry (not 0) */
while
(
!
(
offset
=
uint2korr
(
info
->
scan
.
dir
)))
...
...
@@ -5971,12 +5979,12 @@ static size_t fill_update_undo_parts(MARIA_HA *info, const uchar *oldrec,
{
uint
size_length
=
column
->
length
-
portable_sizeof_char_ptr
;
old_column_length
=
_ma_calc_blob_length
(
size_length
,
old_column_pos
);
memcpy
(
&
old_column_pos
,
oldrec
+
column
->
offset
+
size_length
,
memcpy
(
(
void
*
)
&
old_column_pos
,
oldrec
+
column
->
offset
+
size_length
,
sizeof
(
old_column_pos
));
if
(
!
new_column_is_empty
)
{
new_column_length
=
_ma_calc_blob_length
(
size_length
,
new_column_pos
);
memcpy
(
&
new_column_pos
,
newrec
+
column
->
offset
+
size_length
,
memcpy
(
(
void
*
)
&
new_column_pos
,
newrec
+
column
->
offset
+
size_length
,
sizeof
(
old_column_pos
));
}
break
;
...
...
storage/maria/ma_dynrec.c
View file @
17278496
...
...
@@ -36,12 +36,6 @@ static my_bool delete_dynamic_record(MARIA_HA *info,MARIA_RECORD_POS filepos,
static
my_bool
_ma_cmp_buffer
(
File
file
,
const
uchar
*
buff
,
my_off_t
filepos
,
uint
length
);
/* Play it safe; We have a small stack when using threads */
#undef my_alloca
#undef my_afree
#define my_alloca(A) my_malloc((A),MYF(0))
#define my_afree(A) my_free((A))
/* Interface function from MARIA_HA */
#ifdef HAVE_MMAP
...
...
@@ -256,7 +250,8 @@ my_bool _ma_write_blob_record(MARIA_HA *info, const uchar *record)
MARIA_DYN_DELETE_BLOCK_HEADER
+
1
);
reclength
=
(
info
->
s
->
base
.
pack_reclength
+
_ma_calc_total_blob_length
(
info
,
record
)
+
extra
);
if
(
!
(
rec_buff
=
(
uchar
*
)
my_alloca
(
reclength
)))
if
(
!
(
rec_buff
=
(
uchar
*
)
my_safe_alloca
(
reclength
,
MARIA_MAX_RECORD_ON_STACK
)))
{
my_errno
=
HA_ERR_OUT_OF_MEM
;
/* purecov: inspected */
return
(
1
);
...
...
@@ -270,7 +265,7 @@ my_bool _ma_write_blob_record(MARIA_HA *info, const uchar *record)
error
=
write_dynamic_record
(
info
,
rec_buff
+
ALIGN_SIZE
(
MARIA_MAX_DYN_BLOCK_HEADER
),
reclength2
);
my_
afree
(
rec_buff
);
my_
safe_afree
(
rec_buff
,
reclength
,
MARIA_MAX_RECORD_ON_STACK
);
return
(
error
!=
0
);
}
...
...
@@ -294,7 +289,8 @@ my_bool _ma_update_blob_record(MARIA_HA *info, MARIA_RECORD_POS pos,
return
1
;
}
#endif
if
(
!
(
rec_buff
=
(
uchar
*
)
my_alloca
(
reclength
)))
if
(
!
(
rec_buff
=
(
uchar
*
)
my_safe_alloca
(
reclength
,
MARIA_MAX_RECORD_ON_STACK
)))
{
my_errno
=
HA_ERR_OUT_OF_MEM
;
/* purecov: inspected */
return
(
1
);
...
...
@@ -304,7 +300,7 @@ my_bool _ma_update_blob_record(MARIA_HA *info, MARIA_RECORD_POS pos,
error
=
update_dynamic_record
(
info
,
pos
,
rec_buff
+
ALIGN_SIZE
(
MARIA_MAX_DYN_BLOCK_HEADER
),
reclength
);
my_
afree
(
rec_buff
);
my_
safe_afree
(
rec_buff
,
reclength
,
MARIA_MAX_RECORD_ON_STACK
);
return
(
error
!=
0
);
}
...
...
@@ -1559,7 +1555,8 @@ my_bool _ma_cmp_dynamic_unique(MARIA_HA *info, MARIA_UNIQUEDEF *def,
my_bool
error
;
DBUG_ENTER
(
"_ma_cmp_dynamic_unique"
);
if
(
!
(
old_record
=
my_alloca
(
info
->
s
->
base
.
reclength
)))
if
(
!
(
old_record
=
my_safe_alloca
(
info
->
s
->
base
.
reclength
,
MARIA_MAX_RECORD_ON_STACK
)))
DBUG_RETURN
(
1
);
/* Don't let the compare destroy blobs that may be in use */
...
...
@@ -1580,7 +1577,8 @@ my_bool _ma_cmp_dynamic_unique(MARIA_HA *info, MARIA_UNIQUEDEF *def,
info
->
rec_buff
=
old_rec_buff
;
info
->
rec_buff_size
=
old_rec_buff_size
;
}
my_afree
(
old_record
);
my_safe_afree
(
old_record
,
info
->
s
->
base
.
reclength
,
MARIA_MAX_RECORD_ON_STACK
);
DBUG_RETURN
(
error
);
}
...
...
@@ -1595,7 +1593,9 @@ my_bool _ma_cmp_dynamic_record(register MARIA_HA *info,
uchar
*
buffer
;
MARIA_BLOCK_INFO
block_info
;
my_bool
error
=
1
;
size_t
buffer_length
;
DBUG_ENTER
(
"_ma_cmp_dynamic_record"
);
LINT_INIT
(
buffer_length
);
if
(
info
->
opt_flag
&
WRITE_CACHE_USED
)
{
...
...
@@ -1612,8 +1612,10 @@ my_bool _ma_cmp_dynamic_record(register MARIA_HA *info,
{
/* If check isn't disabled */
if
(
info
->
s
->
base
.
blobs
)
{
if
(
!
(
buffer
=
(
uchar
*
)
my_alloca
(
info
->
s
->
base
.
pack_reclength
+
_ma_calc_total_blob_length
(
info
,
record
))))
buffer_length
=
(
info
->
s
->
base
.
pack_reclength
+
_ma_calc_total_blob_length
(
info
,
record
));
if
(
!
(
buffer
=
(
uchar
*
)
my_safe_alloca
(
buffer_length
,
MARIA_MAX_RECORD_ON_STACK
)))
DBUG_RETURN
(
1
);
}
reclength
=
_ma_rec_pack
(
info
,
buffer
,
record
);
...
...
@@ -1665,7 +1667,7 @@ my_bool _ma_cmp_dynamic_record(register MARIA_HA *info,
error
=
0
;
err:
if
(
buffer
!=
info
->
rec_buff
)
my_
afree
(
buffer
);
my_
safe_afree
(
buffer
,
buffer_length
,
MARIA_MAX_RECORD_ON_STACK
);
DBUG_PRINT
(
"exit"
,
(
"result: %d"
,
error
));
DBUG_RETURN
(
error
);
}
...
...
storage/maria/ma_unique.c
View file @
17278496
...
...
@@ -135,7 +135,7 @@ ha_checksum _ma_unique_hash(MARIA_UNIQUEDEF *def, const uchar *record)
else
if
(
keyseg
->
flag
&
HA_BLOB_PART
)
{
uint
tmp_length
=
_ma_calc_blob_length
(
keyseg
->
bit_start
,
pos
);
memcpy
(
&
pos
,
pos
+
keyseg
->
bit_start
,
sizeof
(
char
*
));
memcpy
(
(
void
*
)
&
pos
,
pos
+
keyseg
->
bit_start
,
sizeof
(
char
*
));
if
(
!
length
||
length
>
tmp_length
)
length
=
tmp_length
;
/* The whole blob */
}
...
...
@@ -231,8 +231,8 @@ my_bool _ma_unique_comp(MARIA_UNIQUEDEF *def, const uchar *a, const uchar *b,
set_if_smaller
(
a_length
,
keyseg
->
length
);
set_if_smaller
(
b_length
,
keyseg
->
length
);
}
memcpy
(
&
pos_a
,
pos_a
+
keyseg
->
bit_start
,
sizeof
(
char
*
));
memcpy
(
&
pos_b
,
pos_b
+
keyseg
->
bit_start
,
sizeof
(
char
*
));
memcpy
(
(
void
*
)
&
pos_a
,
pos_a
+
keyseg
->
bit_start
,
sizeof
(
char
*
));
memcpy
(
(
void
*
)
&
pos_b
,
pos_b
+
keyseg
->
bit_start
,
sizeof
(
char
*
));
}
if
(
type
==
HA_KEYTYPE_TEXT
||
type
==
HA_KEYTYPE_VARTEXT1
||
type
==
HA_KEYTYPE_VARTEXT2
)
...
...
storage/maria/maria_def.h
View file @
17278496
...
...
@@ -42,6 +42,7 @@
#define MAX_NONMAPPED_INSERTS 1000
#define MARIA_MAX_TREE_LEVELS 32
#define MARIA_MAX_RECORD_ON_STACK 16384
/* maria_open() flag, specific for maria_pack */
#define HA_OPEN_IGNORE_MOVED_STATE (1U << 30)
...
...
storage/maria/maria_pack.c
View file @
17278496
...
...
@@ -861,7 +861,7 @@ static int get_statistic(PACK_MRG_INFO *mrg,HUFF_COUNTS *huff_counts)
reclength
=
mrg
->
file
[
0
]
->
s
->
base
.
reclength
;
null_bytes
=
mrg
->
file
[
0
]
->
s
->
base
.
null_bytes
;
record
=
(
uchar
*
)
my_
alloca
(
reclength
);
record
=
(
uchar
*
)
my_
safe_alloca
(
reclength
,
MARIA_MAX_RECORD_ON_STACK
);
end_count
=
huff_counts
+
mrg
->
file
[
0
]
->
s
->
base
.
fields
;
record_count
=
0
;
glob_crc
=
0
;
max_blob_length
=
0
;
...
...
@@ -1145,7 +1145,7 @@ static int get_statistic(PACK_MRG_INFO *mrg,HUFF_COUNTS *huff_counts)
mrg
->
records
=
record_count
;
mrg
->
max_blob_length
=
max_blob_length
;
my_
afree
(
record
);
my_
safe_afree
(
record
,
reclength
,
MARIA_MAX_RECORD_ON_STACK
);
DBUG_RETURN
(
error
!=
HA_ERR_END_OF_FILE
);
}
...
...
@@ -2415,7 +2415,8 @@ static int compress_maria_file(PACK_MRG_INFO *mrg, HUFF_COUNTS *huff_counts)
DBUG_ENTER
(
"compress_maria_file"
);
/* Allocate a buffer for the records (excluding blobs). */
if
(
!
(
record
=
(
uchar
*
)
my_alloca
(
isam_file
->
s
->
base
.
reclength
)))
if
(
!
(
record
=
(
uchar
*
)
my_safe_alloca
(
isam_file
->
s
->
base
.
reclength
,
MARIA_MAX_RECORD_ON_STACK
)))
return
-
1
;
end_count
=
huff_counts
+
isam_file
->
s
->
base
.
fields
;
...
...
@@ -2778,7 +2779,8 @@ static int compress_maria_file(PACK_MRG_INFO *mrg, HUFF_COUNTS *huff_counts)
if
(
verbose
>=
2
)
printf
(
"wrote %s records.
\n
"
,
llstr
((
longlong
)
record_count
,
llbuf
));
my_afree
(
record
);
my_safe_afree
(
record
,
isam_file
->
s
->
base
.
reclength
,
MARIA_MAX_RECORD_ON_STACK
);
mrg
->
ref_length
=
max_pack_length
;
mrg
->
min_pack_length
=
max_record_length
?
min_record_length
:
0
;
mrg
->
max_pack_length
=
max_record_length
;
...
...
storage/myisam/mi_check.c
View file @
17278496
...
...
@@ -1536,7 +1536,7 @@ int mi_repair(HA_CHECK *param, register MI_INFO *info,
if
(
!
param
->
using_global_keycache
)
(
void
)
init_key_cache
(
dflt_key_cache
,
param
->
key_cache_block_size
,
param
->
use_buffers
,
0
,
0
,
0
);
(
size_t
)
param
->
use_buffers
,
0
,
0
,
0
);
if
(
init_io_cache
(
&
param
->
read_cache
,
info
->
dfile
,
(
uint
)
param
->
read_buffer_length
,
...
...
storage/myisam/mi_checksum.c
View file @
17278496
...
...
@@ -40,7 +40,7 @@ ha_checksum mi_checksum(MI_INFO *info, const uchar *buf)
length
=
_mi_calc_blob_length
(
column
->
length
-
portable_sizeof_char_ptr
,
buf
);
memcpy
(
&
pos
,
buf
+
column
->
length
-
portable_sizeof_char_ptr
,
memcpy
(
(
void
*
)
&
pos
,
buf
+
column
->
length
-
portable_sizeof_char_ptr
,
sizeof
(
char
*
));
break
;
}
...
...
storage/xtradb/fil/fil0fil.c
View file @
17278496
...
...
@@ -4953,20 +4953,30 @@ fil_extend_space_to_desired_size(
#ifdef HAVE_POSIX_FALLOCATE
if
(
srv_use_posix_fallocate
)
{
offset_high
=
(
size_after_extend
-
file_start_page_no
)
*
page_size
/
(
4ULL
*
1024
*
1024
*
1024
);
offset_low
=
(
size_after_extend
-
file_start_page_no
)
*
page_size
%
(
4ULL
*
1024
*
1024
*
1024
);
ib_int64_t
start_offset
=
start_page_no
*
page_size
;
ib_int64_t
end_offset
=
(
size_after_extend
-
start_page_no
)
*
page_size
;
ib_int64_t
desired_size
=
size_after_extend
*
page_size
;
mutex_exit
(
&
fil_system
->
mutex
);
success
=
os_file_set_size
(
node
->
name
,
node
->
handle
,
offset_low
,
offset_high
);
if
(
posix_fallocate
(
node
->
handle
,
start_offset
,
end_offset
)
==
-
1
)
{
fprintf
(
stderr
,
"InnoDB: Error: preallocating file "
"space for file
\'
%s
\'
failed. Current size "
" %lld, len %lld, desired size %lld
\n
"
,
node
->
name
,
start_offset
,
end_offset
,
desired_size
);
success
=
FALSE
;
}
else
{
success
=
TRUE
;
}
mutex_enter
(
&
fil_system
->
mutex
);
if
(
success
)
{
node
->
size
+=
(
size_after_extend
-
start_page_no
);
space
->
size
+=
(
size_after_extend
-
start_page_no
);
os_has_said_disk_full
=
FALSE
;
}
fil_node_complete_io
(
node
,
fil_system
,
OS_FILE_READ
);
goto
complete_io
;
}
...
...
@@ -5028,21 +5038,9 @@ fil_extend_space_to_desired_size(
mem_free
(
buf2
);
#ifdef HAVE_POSIX_FALLOCATE
complete_io:
/* If posix_fallocate was used to extent the file space
we need to complete the io. Because no actual writes were
dispatched read operation is enough here. Without this
there will be assertion at shutdown indicating that
all IO is not completed. */
if
(
srv_use_posix_fallocate
)
{
fil_node_complete_io
(
node
,
fil_system
,
OS_FILE_READ
);
}
else
{
fil_node_complete_io
(
node
,
fil_system
,
OS_FILE_WRITE
);
}
#else
fil_node_complete_io
(
node
,
fil_system
,
OS_FILE_WRITE
);
#endif
complete_io:
*
actual_size
=
space
->
size
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment