From d8b63171e3e34fdc31e4947a173bd1c9981eb3d6 Mon Sep 17 00:00:00 2001 From: Maciej Dobrzanski Date: Fri, 22 Apr 2016 12:10:56 +0200 Subject: [PATCH 1/2] Respect DatabaseExtraDSN --- lib/RT/Authen/ExternalAuth/DBI.pm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/RT/Authen/ExternalAuth/DBI.pm b/lib/RT/Authen/ExternalAuth/DBI.pm index 3fe6cda..b26ed23 100644 --- a/lib/RT/Authen/ExternalAuth/DBI.pm +++ b/lib/RT/Authen/ExternalAuth/DBI.pm @@ -615,6 +615,12 @@ sub _GetBoundDBIObj { $dsn = "dbi:$dbi_driver:database=$db_database;host=$db_server;port=$db_port"; } + if (RT->Config->Get('DatabaseExtraDSN')) { + my %extra = RT->Config->Get('DatabaseExtraDSN'); + $dsn .= ";$_=$extra{$_}" + for sort keys %extra; + } + # Now let's get connected my $dbh = DBI->connect($dsn, $db_user, $db_pass,{RaiseError => 1, AutoCommit => 0 }) or die $DBI::errstr; From 6d725395c1efd607924e415700087dfd3b7fd026 Mon Sep 17 00:00:00 2001 From: Maciej Dobrzanski Date: Fri, 22 Apr 2016 12:26:09 +0200 Subject: [PATCH 2/2] RT::Handle implicitly sets UTF8, so we should also request data from the external database in UTF8 --- lib/RT/Authen/ExternalAuth/DBI.pm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/RT/Authen/ExternalAuth/DBI.pm b/lib/RT/Authen/ExternalAuth/DBI.pm index b26ed23..fa57e60 100644 --- a/lib/RT/Authen/ExternalAuth/DBI.pm +++ b/lib/RT/Authen/ExternalAuth/DBI.pm @@ -621,10 +621,24 @@ sub _GetBoundDBIObj { for sort keys %extra; } + my $db_type = RT->Config->Get('DatabaseType'); + if ( $db_type eq 'Oracle' ) { + $ENV{'NLS_LANG'} = "AMERICAN_AMERICA.AL32UTF8"; + $ENV{'NLS_NCHAR'} = "AL32UTF8"; + } + # Now let's get connected my $dbh = DBI->connect($dsn, $db_user, $db_pass,{RaiseError => 1, AutoCommit => 0 }) or die $DBI::errstr; + if ( $db_type eq 'mysql' ) { + $dbh->do("SET NAMES 'utf8'"); + } + + if ( $db_type eq 'Pg' ) { + $dbh->do("SET bytea_output = 'escape'"); + } + # If we didn't die, return the DBI object handle # and hope it's treated sensibly and correctly # destroyed by the calling code