Bug 13431 - Shared FastMmap file causes issues
Koha::Cache package does not take into account that, when using fastmmap caching variant, mmaped cache file created in /tmp (typically: /tmp/sharefile-koha-koha), would only be further accessible to the one given OS user - the one which created it. In many Koha setups, in the circumstances when various system scripts are executed by 2+ users with diffrent UIDs (like multi-tenant servers, for example) this may cause many kinds of issues. Observable symptom is usually the appearance of the below error when searching, or looking at MARC Framework pages and a few other places: Open of share file /tmp/sharefile-koha-koha failed: Permission denied at /usr/lib/perl5/Cache/FastMmap.pm line 640. This patch: - disables initialisation of fastmmap caching subsystem unless it is explicitly requested by the user (CACHING_SYSTEM=fastmmap) - disables fastmmap cache usage for command line scripts (i.e. when GATEWAY_INTERFACE environment variable is not defined) - adds the database name, host name and an ID of the OS user to the mmaped file name created in /tmp, to prevent various kinds of unintentional conflicts and/or permission problems from happening To test: 1) remove the /tmp/sharefile-koha-* file[s] (if any) 2) do something which would lead to its re-creation (e.g., performing any search in OPAC should be sufficient to cause that) 3) observe that /tmp/sharefile-koha-koha got created 4) remove it 5) apply patch 6) redo step 2) 7) observe that aforementioned file is no longer created in /tmp 8) set CACHING_SYSTEM environment variable to 'fastmmap' 9) redo step 2), observe that /tmp/sharefile-koha-* file got created and that it's name now contains hostname, database name and UID 10) ensure that everything still works like it should and that there are no regressions of any kinds anywhere in the system ;) Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com> Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
This commit is contained in:
parent
155ce56ad8
commit
9e701294dd
1 changed files with 10 additions and 4 deletions
|
@ -40,6 +40,7 @@ use warnings;
|
|||
use Carp;
|
||||
use Module::Load::Conditional qw(can_load);
|
||||
use Koha::Cache::Object;
|
||||
use C4::Context;
|
||||
|
||||
use base qw(Class::Accessor);
|
||||
|
||||
|
@ -90,10 +91,11 @@ sub new {
|
|||
}
|
||||
}
|
||||
|
||||
if ( can_load( modules => { 'Cache::FastMmap' => undef } ) ) {
|
||||
_initialize_fastmmap($self);
|
||||
if ( $self->{'default_type'} eq 'fastmmap'
|
||||
&& defined( $self->{'fastmmap_cache'} ) )
|
||||
&& defined( $ENV{GATEWAY_INTERFACE} )
|
||||
&& can_load( modules => { 'Cache::FastMmap' => undef } ) ) {
|
||||
_initialize_fastmmap($self);
|
||||
if ( defined( $self->{'fastmmap_cache'} ) )
|
||||
{
|
||||
$self->{'cache'} = $self->{'fastmmap_cache'};
|
||||
}
|
||||
|
@ -159,9 +161,13 @@ sub _initialize_memcached {
|
|||
|
||||
sub _initialize_fastmmap {
|
||||
my ($self) = @_;
|
||||
my $share_file = join( '-',
|
||||
"/tmp/sharefile-koha", $self->{'namespace'},
|
||||
C4::Context->config('hostname'), C4::Context->config('database'),
|
||||
"" . getpwuid($>) );
|
||||
|
||||
$self->{'fastmmap_cache'} = Cache::FastMmap->new(
|
||||
'share_file' => "/tmp/sharefile-koha-$self->{'namespace'}",
|
||||
'share_file' => $share_file,
|
||||
'expire_time' => $self->{'timeout'},
|
||||
'unlink_on_exit' => 0,
|
||||
);
|
||||
|
|
Loading…
Reference in a new issue