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

index 295b6c83fc07c305870d19563b49816084157385..33b4e23ce7557b435c3821c1e291d32f60345466 100755 (executable)
--- a/quips.cgi
+++ b/quips.cgi
@@ -88,6 +88,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");
     
@@ -100,11 +105,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 e0db5991b4c99fa7a7643978c3160f5455537a49..565ec1b077279cadef21c0b35d1ef00b3dc3da8f 100644 (file)
       schedule
     [% ELSIF action == "use" %]
       use
+    [% ELSIF action == "approve" %]
+      approve
     [% END %]
 
     [% IF object == "administrative_pages" %]
index 14cecb26ee65e07c26f7a90dcf1d11de7aa11f08..d6000d5971010db252ee06576ab2e1a4b1ea4ce7 100644 (file)
               </a>
             </td>
             <td>
+              <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 %]>