Bugzilla – Attachment 176153 Details for
Bug 38810
SIP account level system preference overrides not properly cleared between requests
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 38810 - SIP account level system preference overrides not properly cleared between requests
Bug-38810---SIP-account-level-system-preference-ov.patch (text/plain), 2.96 KB, created by
Jake Deery
on 2025-01-06 15:26:58 UTC
(
hide
)
Description:
Bug 38810 - SIP account level system preference overrides not properly cleared between requests
Filename:
MIME Type:
Creator:
Jake Deery
Created:
2025-01-06 15:26:58 UTC
Size:
2.96 KB
patch
obsolete
>From e7903208c9b0676ede6e95f0bf82a7e6d4fd02ab Mon Sep 17 00:00:00 2001 >From: Kyle M Hall <kyle@bywatersolutions.com> >Date: Thu, 2 Jan 2025 09:34:24 -0500 >Subject: [PATCH] Bug 38810 - SIP account level system preference overrides not > properly cleared between requests > >Account level syspref overrides in SIP will "leak" between SIP requests. > >Basically an account level system preference override will may be set by a given request, but those overrides will never be cleared for the life of that SIP process thus "contaminating" that process until it reaches end of life". > >This is because the code > # Clear overrides from previous message handling first > foreach my $key ( keys %ENV ) { > delete $ENV{$key} if index($key, 'OVERRIDE_SYSPREF_') > 0; > } >is checking if the env key contains the substring OVERRIDE_SYSPREF_ at an index greater than 0. The problem is that for all overrides the subtring *starts at 0* since it's always the first part of the string. If the substring is not part of the string index will return -1. TLDR we have an "off by one" error. We need to check that the return value is zero instead of any positive value. > >1) Set your SIP server params so that only one SIP process should run, > <server-params > min_servers='1' > min_spare_servers='0' > max_spare_servers='0' > max_servers='0' > custom_tcp_keepalive='0' > custom_tcp_keepalive_time='7200' > custom_tcp_keepalive_intvl='75' > /> >2) Set noissuescharge to $5 >3) Create two SIP accounts >4) Set an account level override for noissuescharge to $500 >5) Create a patron that owes $10 in fines >6) Run a patron information request on the "normal" SIP account for the > patron, the patron flags should show the patron being not able to > check out items >7) Run a patron information request of the "overridden" SIp account for > the patron, the patron flags should show the patron being allowed to > check out items >8) Run a second patron information request on the "normal" SIP account > for the patron, the patron flags should show the patron being able to > check out even though they should not be able to check out >9) Apply this patch >10) Restart all the things! >11) Repeast steps 6-8 >12) The flags should be correct! > >Signed-off-by: Jake Deery <jake.deery@ptfs-europe.com> >--- > C4/SIP/Sip/MsgType.pm | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > >diff --git a/C4/SIP/Sip/MsgType.pm b/C4/SIP/Sip/MsgType.pm >index f8583ff8ac..d5a024298a 100644 >--- a/C4/SIP/Sip/MsgType.pm >+++ b/C4/SIP/Sip/MsgType.pm >@@ -339,7 +339,7 @@ sub handle { > # Set system preference overrides, first global, then account level > # Clear overrides from previous message handling first > foreach my $key ( keys %ENV ) { >- delete $ENV{$key} if index($key, 'OVERRIDE_SYSPREF_') > 0; >+ delete $ENV{$key} if index($key, 'OVERRIDE_SYSPREF_') == 0; > } > foreach my $key ( keys %{ $config->{'syspref_overrides'} } ) { > $ENV{"OVERRIDE_SYSPREF_$key"} = $config->{'syspref_overrides'}->{$key}; >-- >2.43.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 38810
:
176056
|
176096
|
176153
|
176198