From d5ae9772c1427dbbcf1cb7582106dd1d542bc26e Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Tue, 06 Sep 2011 13:18:12 -0400
Subject: [PATCH] - Fix username case-insensitivity issue in MySQL (#1488021)
---
CHANGELOG | 1 +
program/include/rcube_user.php | 5 +----
SQL/mysql.update.sql | 3 +++
SQL/mysql.initial.sql | 4 ++--
4 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/CHANGELOG b/CHANGELOG
index 4d6b3e8..8e8eae4 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
+- Fix username case-insensitivity issue in MySQL (#1488021)
- Addressbook Saved Searches
- Added spellchecker exceptions dictionary (shared or per-user)
- Added possibility to ignore words containing caps, numbers, symbols (spellcheck_ignore_* options)
diff --git a/SQL/mysql.initial.sql b/SQL/mysql.initial.sql
index 6c26690..a50e28c 100644
--- a/SQL/mysql.initial.sql
+++ b/SQL/mysql.initial.sql
@@ -20,9 +20,9 @@
CREATE TABLE `users` (
`user_id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
- `username` varchar(128) NOT NULL,
+ `username` varchar(128) BINARY NOT NULL,
`mail_host` varchar(128) NOT NULL,
- `alias` varchar(128) NOT NULL,
+ `alias` varchar(128) BINARY NOT NULL,
`created` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
`last_login` datetime DEFAULT NULL,
`language` varchar(5),
diff --git a/SQL/mysql.update.sql b/SQL/mysql.update.sql
index afeb3a5..7f8ce61 100644
--- a/SQL/mysql.update.sql
+++ b/SQL/mysql.update.sql
@@ -147,6 +147,9 @@
-- Updates from version 0.6-stable
+ALTER TABLE `users` CHANGE `alias` `alias` varchar(128) BINARY NOT NULL;
+ALTER TABLE `users` CHANGE `username` `username` varchar(128) BINARY NOT NULL;
+
CREATE TABLE `dictionary` (
`user_id` int(10) UNSIGNED DEFAULT NULL,
`language` varchar(5) NOT NULL,
diff --git a/program/include/rcube_user.php b/program/include/rcube_user.php
index 90edad6..500b922 100644
--- a/program/include/rcube_user.php
+++ b/program/include/rcube_user.php
@@ -399,11 +399,8 @@
{
$dbh = rcmail::get_instance()->get_dbh();
- // use BINARY (case-sensitive) comparison on MySQL, other engines are case-sensitive
- $mod = preg_match('/^mysql/', $dbh->db_provider) ? 'BINARY' : '';
-
// query for matching user name
- $query = "SELECT * FROM ".get_table_name('users')." WHERE mail_host = ? AND %s = $mod ?";
+ $query = "SELECT * FROM ".get_table_name('users')." WHERE mail_host = ? AND %s = ?";
$sql_result = $dbh->query(sprintf($query, 'username'), $host, $user);
// query for matching alias
--
Gitblit v1.9.1