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