summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <bar@mysql.com>2006-05-04 11:55:09 +0500
committerunknown <bar@mysql.com>2006-05-04 11:55:09 +0500
commitaf2f9b90fa7e90468eadfbb24256b0be87dd5184 (patch)
tree99b034d10717c94a9a3958ad7c85015c0cdee0f4
parent38b1f7c7c3790a6ee59dd213eab16fe9c6fd97f4 (diff)
downloadmariadb-git-af2f9b90fa7e90468eadfbb24256b0be87dd5184.tar.gz
Bugs#17647: Trouble with "create database"
Problem: if a user was granted privileges on database "d1", it also was able to act on "D1" (i.e. in upper case), even on Unix with case sensitive file system. Fix: Initialize grant hash to use binary comparison if lower_case_file_system is not set (on most unixes), and case insensitive comparison otherwise (Windows, MacOSX). sql/sql_acl.cc: Initialize hash to use binary comparison with case sensitive FS. mysql-test/include/have_case_sensitive_file_system.inc: New BitKeeper file ``mysql-test/include/have_case_sensitive_file_system.inc'' Backporting from 5.1 mysql-test/r/case_sensitive_file_system.require: New BitKeeper file ``mysql-test/r/case_sensitive_file_system.require'' Backporting from 5.1 mysql-test/r/lowercase_fs_off.result: Adding test case mysql-test/t/lowercase_fs_off.test: Adding test case
-rw-r--r--mysql-test/include/have_case_sensitive_file_system.inc4
-rw-r--r--mysql-test/r/case_sensitive_file_system.require2
-rw-r--r--mysql-test/r/lowercase_fs_off.result11
-rw-r--r--mysql-test/t/lowercase_fs_off.test27
-rw-r--r--sql/sql_acl.cc4
5 files changed, 47 insertions, 1 deletions
diff --git a/mysql-test/include/have_case_sensitive_file_system.inc b/mysql-test/include/have_case_sensitive_file_system.inc
new file mode 100644
index 00000000000..730af975497
--- /dev/null
+++ b/mysql-test/include/have_case_sensitive_file_system.inc
@@ -0,0 +1,4 @@
+--require r/case_sensitive_file_system.require
+--disable_query_log
+show variables like "lower_case_file_system";
+--enable_query_log
diff --git a/mysql-test/r/case_sensitive_file_system.require b/mysql-test/r/case_sensitive_file_system.require
new file mode 100644
index 00000000000..d0bdc6bf4ce
--- /dev/null
+++ b/mysql-test/r/case_sensitive_file_system.require
@@ -0,0 +1,2 @@
+Variable_name Value
+lower_case_file_system OFF
diff --git a/mysql-test/r/lowercase_fs_off.result b/mysql-test/r/lowercase_fs_off.result
new file mode 100644
index 00000000000..f610b959a47
--- /dev/null
+++ b/mysql-test/r/lowercase_fs_off.result
@@ -0,0 +1,11 @@
+create database d1;
+grant all on d1.* to 'sample'@'localhost' identified by 'password';
+flush privileges;
+select database();
+database()
+d1
+create database d2;
+ERROR 42000: Access denied for user 'sample'@'localhost' to database 'd2'
+create database D1;
+ERROR 42000: Access denied for user 'sample'@'localhost' to database 'D1'
+drop database if exists d1;
diff --git a/mysql-test/t/lowercase_fs_off.test b/mysql-test/t/lowercase_fs_off.test
new file mode 100644
index 00000000000..7f7b573e7ee
--- /dev/null
+++ b/mysql-test/t/lowercase_fs_off.test
@@ -0,0 +1,27 @@
+#
+# Specific tests for case sensitive file systems
+# i.e. lower_case_filesystem=OFF
+#
+-- source include/have_case_sensitive_file_system.inc
+
+connect (master,localhost,root,,);
+connection master;
+create database d1;
+grant all on d1.* to 'sample'@'localhost' identified by 'password';
+flush privileges;
+
+connect (sample,localhost,sample,password,d1);
+connection sample;
+select database();
+--error 1044
+create database d2;
+--error 1044
+create database D1;
+disconnect sample;
+
+connection master;
+drop database if exists d1;
+disconnect master;
+connection default;
+
+# End of 4.1 tests
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 4626e5892a4..d1cd001e306 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -146,7 +146,9 @@ my_bool acl_init(bool dont_read_acl_tables)
acl_cache= new hash_filo(ACL_CACHE_SIZE, 0, 0,
(hash_get_key) acl_entry_get_key,
- (hash_free_key) free, system_charset_info);
+ (hash_free_key) free,
+ lower_case_file_system ?
+ system_charset_info : &my_charset_bin);
if (dont_read_acl_tables)
{
DBUG_RETURN(0); /* purecov: tested */