Issue Details (XML | Word | Printable)

Key: DNET-851
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Minor Minor
Assignee: Jiri Cincura
Reporter: Kjell Rilbe
Votes: 0
Watchers: 2

If you were logged in you would be able to see more operations.
.NET Data provider

Can't connect with mixed case user name

Created: 15/Sep/18 06:08 AM   Updated: 08/Oct/18 07:25 AM
Component/s: ADO.NET Provider
Affects Version/s:
Fix Version/s:

Environment: Firebird 3.0.3 64 bit, Windows Server 2016 64 bit, .NET Framework 4.7.1, Visual Studio 2017 Community, C# console application.

 Description  « Hide
I created a user and database in isql connected to security3.db:

create user "KorningarDev" password '***';
create database 'KorningarDev' user "KorningarDev" password '***' page_size 4096 set names 'UTF8' default character set UTF8 collation UNICODE;

I can use this database from FlameRobin, specifying the user name with quotes "KorningarDev". But I can't connect to it from the FirebirdClient. I've tried several different variations of connection string, but nothing works.

With a uppercase user, this connection string works:;Port=3050;Database=KorningarDev;Charset=UTF8;User=DEV;Password=***

With the mixed case user name, none of these semm to work:;Port=3050;Database=KorningarDev;Charset=UTF8;User=KorningarDev;Password=***;Port=3050;Database=KorningarDev;Charset=UTF8;User="KorningarDev";Password=***;Port=3050;Database=KorningarDev;Charset=UTF8;User='KorningarDev';Password=***

I would assume that the FirebirdClient, along the way, loses the quotes on the user name, causing the login request to attemt login with an uppercased username KORNINGARDEV.

 All   Comments   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Kjell Rilbe added a comment - 17/Sep/18 04:42 AM
After additional debugging into the FirebirdClient code I can deduce that both mixed case and double or single quotes from the connection string are still present in the encoded DatabaseParameterBlock. Connection strings' values can be quoted using "'...'" (causing a single quoted value) or vice versa '"..."' (causing a double quoted value). This seems to work as expected.

According to Mark Rotteveel in the Firebird-devel mailing list, there is a problem "down the line". He indicated that the SRP implementation always uppercases the user name, which would be incorrect. A quoted user name should not be tampered with in any way (except transliteration if required).

Kjell Rilbe added a comment - 17/Sep/18 12:16 PM
I have now also tried to change SrpClient. I replaced all three ToUpper() calls with a function that returns uppercase value only if the value is unquoted. A quoted value is returned as is.

I tried two variations: 1) preserve the double quotes, and 2) strip away the double quotes.

I still get the same error. Something else has to be wrong.

Maybe take a look at FlameRobin code? If the user name is registered with double quotes, FlameRobin is able to connect, and everything works fine. So FlameRobin apparently does this right.

Mark Rotteveel added a comment - 18/Sep/18 02:41 PM