summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/recount-bumps.php39
1 files changed, 39 insertions, 0 deletions
diff --git a/tools/recount-bumps.php b/tools/recount-bumps.php
new file mode 100644
index 00000000..633ce4da
--- /dev/null
+++ b/tools/recount-bumps.php
@@ -0,0 +1,39 @@
+<?php
+// A script to recount bumps to recover from a last-page-bump attack
+// or to be run after the KusabaX Migration.
+
+require dirname(__FILE__) . '/inc/cli.php';
+
+if(!is_writable($config['file_script'])) {
+ get_httpd_privileges();
+}
+
+if (!isset ($argv[1])) {
+ die("Usage: tools/recount-bumps.php board_uri\n");
+}
+$board = $argv[1];
+
+$q = query(sprintf("SELECT `id`, `bump`, `time` FROM ``posts_%s``
+ WHERE `thread` IS NULL", $board));
+while ($val = $q->fetch()) {
+ $lc = prepare(sprintf('SELECT MAX(`time`) AS `aq` FROM ``posts_%s``
+ WHERE ((`thread` = :thread and
+ `email` != "sage" ) OR `id` = :thread', $board));
+
+ $lc->bindValue(":thread", $val['id']);
+ $lc->execute();
+
+ $f = $lc->fetch();
+ if ($val['bump'] != $f['aq']) {
+ $query = prepare(sprintf("UPDATE ``posts_%s`` SET `bump`=$f[aq]
+ WHERE `id`=:id", $board));
+ $query->bindValue(":bump", $f['aq']);
+ $query->bindValue(":id", $val['id']);
+ echo("Thread $val[id] - to be $val[bump] -> $f[aq]\n");
+ }
+ else {
+ echo("Thread $val[id] ok\n");
+ }
+}
+
+echo("done\n");