]> 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:58:04 +0000 (00:58 +0000)
committerlpsolit%gmail.com <>
Thu, 6 Nov 2008 00:58:04 +0000 (00:58 +0000)
quips.cgi
template/en/default/global/user-error.html.tmpl
template/en/default/list/quips.html.tmpl

index d811ee5fe45d05ec8dad0c7c3b2e45fb761229d3..398bae4c5a14f579e931fa01b898a84475f9c4e3 100755 (executable)
--- a/quips.cgi
+++ b/quips.cgi
@@ -87,6 +87,11 @@ if ($action eq "add") {
 }
 
 if ($action eq 'approve') {
+    Bugzilla->user->in_group('admin')
+      || ThrowUserError("auth_failure", {group  => "admin",
+                                         action => "approve",
+                                         object => "quips"});
     # Read in the entire quip list
     SendSQL("SELECT quipid, approved FROM quips");
  
@@ -99,11 +104,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); 
+                }
+            }
+        }
     }
     SendSQL("UPDATE quips SET approved = 1 WHERE quipid IN (" .
             join(",", @approved) . ")") if($#approved > -1);
index cf7dd2cd53ef9b2eea2c4c694a336885f3c6b9c7..08c1b3eae2e870a9f511fd2ac59ec132a122982e 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>