From 4b060796419ff0beb29ea512c76ceb0612680c48 Mon Sep 17 00:00:00 2001 From: "lpsolit%gmail.com" <> Date: Fri, 5 Jan 2007 07:34:42 +0000 Subject: [PATCH] =?utf8?q?Bug=20362066:=20strict=5Fisolation:=20cannot=20r?= =?utf8?q?emove=20users=20from=20the=20bug=20if=20their=20privs=20changed?= =?utf8?q?=20so=20that=20they=20can=20no=20longer=20edit=20bugs=20in=20the?= =?utf8?q?=20product=20-=20Patch=20by=20Fr=C3=83=C2=A9d=C3=83=C2=A9ric=20B?= =?utf8?q?uclin=20=20r=3Dmkanat=20a=3Dmyk?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- process_bug.cgi | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/process_bug.cgi b/process_bug.cgi index c7ba981ff2..1bb9bbcb82 100755 --- a/process_bug.cgi +++ b/process_bug.cgi @@ -830,7 +830,7 @@ foreach my $field (Bugzilla->get_fields({custom => 1, obsolete => 0})) { } my $product; -my $prod_changed; +my $prod_changed = 0; my @newprod_ids; if ($cgi->param('product') ne $cgi->param('dontchange')) { $product = Bugzilla::Product::check_product(scalar $cgi->param('product')); @@ -839,7 +839,14 @@ if ($cgi->param('product') ne $cgi->param('dontchange')) { $::query .= "product_id = ?"; push(@values, $product->id); @newprod_ids = ($product->id); - $prod_changed = 1; + # If the bug remains in the same product, leave $prod_changed set to 0. + # Even with 'strict_isolation' turned on, we ignore users who already + # play a role for the bug; else you would never be able to edit it. + # If you want to move the bug to another product, then you first have to + # remove these users from the bug. + unless (defined $cgi->param('id') && $bug->product_id == $product->id) { + $prod_changed = 1; + } } else { @newprod_ids = @{$dbh->selectcol_arrayref("SELECT DISTINCT product_id FROM bugs @@ -1006,7 +1013,10 @@ if (defined $cgi->param('qa_contact') # The QA contact cannot be deleted from show_bug.cgi for a single bug! if ($name ne $cgi->param('dontchange')) { $qacontact = login_to_id($name, THROW_ERROR) if ($name ne ""); - if ($qacontact && Bugzilla->params->{"strict_isolation"}) { + if ($qacontact && Bugzilla->params->{"strict_isolation"} + && !(defined $cgi->param('id') && $bug->qa_contact + && $qacontact == $bug->qa_contact->id)) + { $usercache{$qacontact} ||= Bugzilla::User->new($qacontact); my $qa_user = $usercache{$qacontact}; foreach my $product_id (@newprod_ids) { -- 2.47.2