]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 449931: [SECURITY] Unprivileged users can approve/unapprove all the quips (includ...
authorlpsolit%gmail.com <>
Thu, 6 Nov 2008 00:52:42 +0000 (00:52 +0000)
committerlpsolit%gmail.com <>
Thu, 6 Nov 2008 00:52:42 +0000 (00:52 +0000)
quips.cgi
template/en/default/global/user-error.html.tmpl
template/en/default/list/quips.html.tmpl

index b2fd482bcc72bd0f533dcc8faa5e60f769fa65c2..5d84c25bb17951954484052e0b6b275b9bf2f3fd 100755 (executable)
--- a/quips.cgi
+++ b/quips.cgi
@@ -86,6 +86,11 @@ if ($action eq "add") {
 }
 
 if ($action eq 'approve') {
+    $user->in_group('admin')
+      || ThrowUserError("auth_failure", {group  => "admin",
+                                         action => "approve",
+                                         object => "quips"});
     # Read in the entire quip list
     my $quipsref = $dbh->selectall_arrayref("SELECT quipid, approved FROM quips");
     
@@ -98,11 +103,18 @@ if ($action eq 'approve') {
     my @approved;
     my @unapproved;
     foreach my $quipid (keys %quips) {
-       my $form = $cgi->param('quipid_'.$quipid) ? 1 : 0;
-       if($quips{$quipid} ne $form) {
-           if($form) { push(@approved, $quipid); }
-           else { push(@unapproved, $quipid); }
-       }
+        # Must check for each quipid being defined for concurrency and
+        # automated usage where only one quipid might be defined.
+        my $quip = $cgi->param("quipid_$quipid") ? 1 : 0;
+        if(defined($cgi->param("defined_quipid_$quipid"))) {
+            if($quips{$quipid} != $quip) {
+                if($quip) { 
+                    push(@approved, $quipid); 
+                } else { 
+                    push(@unapproved, $quipid); 
+                }
+            }
+        }
     }
     $dbh->do("UPDATE quips SET approved = 1 WHERE quipid IN (" .
             join(",", @approved) . ")") if($#approved > -1);
index 7323c6a4b9222eec75eeb714467d65a3a1027114..a756773d816a4a127e5ea54d96824dd54fb44eb5 100644 (file)
       schedule
     [% ELSIF action == "use" %]
       use
+    [% ELSIF action == "approve" %]
+      approve
     [% END %]
 
     [% IF object == "attachment" %]
index 92570777ed37b7a4bd5a53ad9590e6e5326b396c..fa09171b2b9074287e024564332eb4345af8d7b1 100644 (file)
               </a>
             </td>
             <td>
-              <input type="checkbox" name="quipid_[% quipid FILTER uri%]"
-                     id="quipid_[% quipid FILTER uri%]"
+              <input type="hidden" name="defined_quipid_[% quipid FILTER html %]"
+                     id="defined_quipid_[% quipid FILTER html %]"
+                     value="1">
+              <input type="checkbox" name="quipid_[% quipid FILTER html %]"
+                     id="quipid_[% quipid FILTER html %]"
                      [%- ' checked="checked"' IF quips.$quipid.approved %]>
             </td>
           </tr>