From cb90cbf4eb42e2ac63363a113cb5eb7f33459ac0 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 11 May 2021 14:27:21 +0200 Subject: [PATCH] Bug 28317: Use the default CGI::Session serializer MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit We remove YAML::Syck on bug 22824 and YAML on 27673, to use YAML::XS. However we need one of them for CGI::Session::Serialize::yaml It's preferable to change the serializer and use the default one instead of writing one based on YAML::XS (or patch the existing ::yaml that does not seem maintained). There was an encoding bug reported on the default serializer (see commit a858e8a8b895640f2) but we fail to recreate it. Test plan: Create 3 libraries with branchcode=branchname: "CPL", "ÄÄÄ~ÄãÃ" and "✔️ ❤️ ★" Use the 3 options of SessionStorage and switch from one logged in library to another. Confirm that everything is working correctly (ie. no ending issue in the library name at the top-right corner) Signed-off-by: Kyle M Hall Signed-off-by: Julian Maurice Signed-off-by: Jonathan Druart --- C4/Auth.pm | 8 ++++---- C4/Context.pm | 10 +++++++--- C4/InstallAuth.pm | 4 ++-- cpanfile | 1 - 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/C4/Auth.pm b/C4/Auth.pm index 1d79561533..f281def2ce 100644 --- a/C4/Auth.pm +++ b/C4/Auth.pm @@ -1850,21 +1850,21 @@ sub _get_session_params { my $storage_method = C4::Context->preference('SessionStorage'); if ( $storage_method eq 'mysql' ) { my $dbh = C4::Context->dbh; - return { dsn => "driver:MySQL;serializer:yaml;id:md5", dsn_args => { Handle => $dbh } }; + return { dsn => "driver:MySQL;id:md5", dsn_args => { Handle => $dbh } }; } elsif ( $storage_method eq 'Pg' ) { my $dbh = C4::Context->dbh; - return { dsn => "driver:PostgreSQL;serializer:yaml;id:md5", dsn_args => { Handle => $dbh } }; + return { dsn => "driver:PostgreSQL;id:md5", dsn_args => { Handle => $dbh } }; } elsif ( $storage_method eq 'memcached' && Koha::Caches->get_instance->memcached_cache ) { my $memcached = Koha::Caches->get_instance()->memcached_cache; - return { dsn => "driver:memcached;serializer:yaml;id:md5", dsn_args => { Memcached => $memcached } }; + return { dsn => "driver:memcached;id:md5", dsn_args => { Memcached => $memcached } }; } else { # catch all defaults to tmp should work on all systems my $dir = C4::Context::temporary_directory; my $instance = C4::Context->config( 'database' ); #actually for packages not exactly the instance name, but generally safer to leave it as it is - return { dsn => "driver:File;serializer:yaml;id:md5", dsn_args => { Directory => "$dir/cgisess_$instance" } }; + return { dsn => "driver:File;id:md5", dsn_args => { Directory => "$dir/cgisess_$instance" } }; } } diff --git a/C4/Context.pm b/C4/Context.pm index 53d1a8c052..e766d838cf 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -745,9 +745,13 @@ set_userenv is called in Auth.pm #' sub set_userenv { shift @_; - my ($usernum, $userid, $usercnum, $userfirstname, $usersurname, $userbranch, $branchname, $userflags, $emailaddress, $shibboleth, $desk_id, $desk_name, $register_id, $register_name)= - map { Encode::is_utf8( $_ ) ? $_ : Encode::decode('UTF-8', $_) } # CGI::Session doesn't handle utf-8, so we decode it here - @_; + my ( + $usernum, $userid, $usercnum, $userfirstname, + $usersurname, $userbranch, $branchname, $userflags, + $emailaddress, $shibboleth, $desk_id, $desk_name, + $register_id, $register_name + ) = @_; + my $var=$context->{"activeuser"} || ''; my $cell = { "number" => $usernum, diff --git a/C4/InstallAuth.pm b/C4/InstallAuth.pm index 7ed980b467..c3f5adcaa1 100644 --- a/C4/InstallAuth.pm +++ b/C4/InstallAuth.pm @@ -243,7 +243,7 @@ sub checkauth { if ( $sessionID = $query->cookie("CGISESSID") ) { C4::Context->_new_userenv($sessionID); my $session = - CGI::Session->new( "driver:File;serializer:yaml", $sessionID, + CGI::Session->new( "driver:File", $sessionID, { Directory => $sessdir } ); if ( $session->param('cardnumber') ) { C4::Context->set_userenv( @@ -283,7 +283,7 @@ sub checkauth { } unless ($userid) { my $session = - CGI::Session->new( "driver:File;serializer:yaml", undef, { Directory => $sessdir } ); + CGI::Session->new( "driver:File", undef, { Directory => $sessdir } ); $sessionID = $session->id; $userid = $query->param('userid'); C4::Context->_new_userenv($sessionID); diff --git a/cpanfile b/cpanfile index 2ef039431b..6e13f04932 100644 --- a/cpanfile +++ b/cpanfile @@ -10,7 +10,6 @@ requires 'CGI::Carp', '1.29'; requires 'CGI::Compile', '>= 0.17, != 0.24'; requires 'CGI::Emulate::PSGI', '0.20'; requires 'CGI::Session', '4.2'; -requires 'CGI::Session::Serialize::yaml', '4.2'; requires 'CPAN::Meta', '2.150006'; requires 'Cache::Memcached', '1.30'; requires 'Cache::Memcached::Fast::Safe', '0.06'; -- 2.39.5