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

index bb0e5afffc29828e866616b59a64c92cb735483c..fdf7ed89a774d81f8f0acadb8ae0af7076d43848 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 4808e44a23dd7e45ddb790979d3688ebb1ae1475..1ded51102159f79b28b3d37d37158c24c1f1720a 100644 (file)
       schedule
     [% ELSIF action == "use" %]
       use
+    [% ELSIF action == "approve" %]
+      approve
     [% END %]
 
     [% IF object == "attachment" %]
index df3346a933cacd08e14074278c226d96c265bed1..ad0a88569c80d035f502e15e99064aa20014a095 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 %]>