function DBBkpDelete($number, $site, $contest, $user, $adm = '') { $c = DBConnect(); DBExec($c, "begin work", "DBBkpDelete(transaction)"); $sql = "select r.bkpdata as oid from bkptable as r where r.contestnumber={$contest} and " . "r.sitenumber={$site} and r.bkpnumber={$number} and r.usernumber={$user}"; $r = DBExec($c, $sql . " for update", "DBBkpDelete(get bkp for update)"); $n = DBnlines($r); if ($n != 1) { DBExec($c, "rollback work", "DBBkpDelete(rollback)"); LogLevel("Unable to delete a bkp. " . "(bkp={$number}, site={$site}, contest={$contest}, user={$user})", 1); return false; } $temp = DBRow($r, 0); if (DB_lo_unlink($c, $temp['oid']) === false) { DBExec($c, "rollback work", "DBBkpDelete(rollback-import)"); LOGError("Unable to delete a large object (user={$user}, contest={$contest}, site={$site}, number={$number})."); MSGError("problem deleting bkp from database. Contact an admin."); exit; } if (strlen($adm) > 0) { $str = "deleted by " . $adm; } else { $str = "deleted"; } DBExec($c, "update bkptable set bkpstatus='{$str}', updatetime=" . time() . " where contestnumber={$contest} and bkpnumber={$number} and sitenumber={$site}", "DBBkpDelete(update bkp)"); DBExec($c, "commit work", "DBBkpDelete(commit)"); LOGLevel("Bkp deleted (bkp={$number}, site={$site}, contest={$contest}, user={$user}).", 3); return true; }
function DBGiveUpRunAutojudging($contest, $site, $number, $ip = "", $ans = "") { $c = DBConnect(); DBExec($c, "begin work", "DBGiveUpRunAutojudging(transaction)"); $sql = "select * from runtable as r " . "where r.contestnumber={$contest} and r.runnumber={$number} and r.runsitenumber={$site}"; $r = DBExec($c, $sql . " for update", "DBGiveUpRunAutoJudging(get run for update)"); $n = DBnlines($r); if ($n != 1) { DBExec($c, "rollback work", "DBGiveUpRunAutoJudging(rollback)"); LogLevel("Unable to giveup a run from autojudging (run={$number}, site={$site}, contest={$contest})", 1); return false; } $a = DBRow($r, 0); $t = time(); if ($ip == "") { DBExec($c, "update runtable set autoenddate=null, autoanswer=null, autostdout=null, autostderr=null, " . "updatetime={$t}, autobegindate=null, autoip='' " . "where contestnumber={$contest} and runnumber={$number} and runsitenumber={$site}", "DBGiveUpRunAutojudging(update run)"); } else { DBExec($c, "update runtable set autoenddate={$t}, autoanswer='{$ans}', autostdout=null, " . "autostderr=null, updatetime={$t}, autoip='{$ip}' " . "where contestnumber={$contest} and runnumber={$number} and runsitenumber={$site}", "DBGiveUpRunAutojudging(update run-withip)"); } DBExec($c, "commit work", "DBGiveUpRunAutojudging(commit)"); LOGLevel("Run gaveup from Autojudging (run={$number}, site={$site}, contest={$contest})", 3); return true; }
echo "==> ERROR reading output file " . $dir . $ds . 'output' . $ds . $file . " - skipping it!\n"; } } } */ } if ($retval >= 7 && $retval <= 9) { $ans = file("allout"); $anstmp = trim(escape_string($ans[count($ans) - 1])); unset($ans); $answer = "(probably runtime error - unusual code: {$retval}) " . $anstmp; // runtime error $retval = 3; } if ($retval == 0 || $retval > 9) { $ans = file("allout"); $anstmp = trim(escape_string($ans[count($ans) - 1])); unset($ans); LogLevel("Autojudging: Script returned unusual code: {$retval} ({$anstmp})" . "(run={$number}, site={$site}, contest={$contest})", 1); echo "Autojudging script returned unusual code {$retval} ({$anstmp})" . "(contest={$contest}, site={$site}, run={$number})\n"; $answer = "(check output files - unusual code: {$retval}) " . $anstmp; // contact staff $retval = 7; } echo "Sending results to server...\n"; //echo "out==> "; system("tail -n1 ". $dir.$ds.'allout'); //echo "err==> "; system("tail -n1 ". $dir.$ds.'allerr'); DBUpdateRunAutojudging($contest, $site, $number, $ip, $answer, $dir . $ds . 'allout', $dir . $ds . 'allerr', $retval); LogLevel("Autojudging: answered '{$answer}' (run={$number}, site={$site}, contest={$contest})", 3); echo "Autojudging answered '{$answer}' (contest={$contest}, site={$site}, run={$number})\n"; }
LogLevel("Connection try by IP " . getIP() . ", username="******"password"]; $usertable = DBLogIn($name, $password, false); if (!$usertable) { ob_end_flush(); echo "<!-- <ERROR1> " . session_id() . " " . session_id() . " -->\n"; exit; } if (!isset($getx['check'])) { ob_end_flush(); echo "<!-- <ERROR2> " . session_id() . " " . session_id() . " -->\n"; exit; } } else { ob_end_flush(); LogLevel("Init connection by IP " . getIP(), 2); echo "<!-- <SESSION1> " . session_id() . " " . session_id() . " -->\n"; exit; } } if (!ValidSession()) { ob_end_flush(); InvalidSession("site/index.php"); ForceLoad("../index.php"); exit; } if (isset($getx['check']) && isset($getx["password"]) && $getx['check'] != myhash($getx["password"] . $_SESSION['usertable']['userpassword'])) { ob_end_flush(); echo "<!-- <SESSION2> " . session_id() . " " . $_SESSION['usertable']['usersessionextra'] . " -->\n"; exit; }
function DBGetClarToAnswerC($number, $site, $contest, $chief) { $c = DBConnect(); DBExec($c, "begin work", "DBGetClarToAnswerC(transaction)"); $sql = "select c.contestnumber as contestnumber, c.clarsitenumber as sitenumber, c.claranswer as answer, " . "c.clarnumber as number, c.clardatediff as timestamp, c.clarstatus as status, " . "p.problemname as problemname, p.problemnumber as problemnumber, c.clardata as question " . "from clartable as c, problemtable as p " . "where c.contestnumber={$contest} and p.contestnumber=c.contestnumber and " . "c.clarproblem=p.problemnumber and c.clarsitenumber={$site} and " . "c.clarnumber={$number}"; if ($chief != 1) { $sql .= " and (c.clarstatus='openclar' or (c.clarstatus='answering' and " . "c.clarjudge=" . $_SESSION["usertable"]["usernumber"] . " and " . "c.clarjudgesite=" . $_SESSION["usertable"]["usersitenumber"] . "))"; $tx = "Chief is answering"; } else { $tx = "Judge is answering"; } $r = DBExec($c, $sql . " for update", "DBGetClarToAnswerC(get clar/prob for update)"); $n = DBnlines($r); if ($n != 1) { DBExec($c, "rollback work", "DBGetClarToAnswerC(rollback)"); LogLevel("Unable to get a clar (maybe other judge got it first). (clar={$number}, site={$site}, " . "contest={$contest})", 2); return false; } $a = DBRow($r, 0); if ($a["status"] == "answering") { $st = "DNA"; } else { $st = "started"; } if ($chief != 1) { DBExec($c, "update clartable set clarjudge=" . $_SESSION["usertable"]["usernumber"] . ", clarstatus='answering', updatetime=" . time() . ", " . "clarjudgesite=" . $_SESSION["usertable"]["usersitenumber"] . " " . "where contestnumber={$contest} and clarnumber={$number} and clarsitenumber={$site}", "DBGetClarToAnswerC(update clar)"); } DBExec($c, "commit work", "DBGetClarToAnswerC(commit)"); LOGLevel("User got a clarification (clar={$number}, site={$site}, contest={$contest}, status={$st}, " . "user="******"usertable"]["usernumber"] . "(site=" . $_SESSION["usertable"]["usersitenumber"] . ")).", 3); return $a; }
function DBGetTaskToAnswerC($number, $site, $contest, $chief) { $c = DBConnect(); DBExec($c, "begin work", "DBGetTaskToAnswerC(transaction)"); $sql = "select t.contestnumber as contestnumber, t.sitenumber as sitenumber, " . "t.tasknumber as number " . "from tasktable as t " . "where t.contestnumber={$contest} and t.sitenumber={$site} and " . "t.tasknumber={$number}"; if ($chief != 1) { $sql .= " and t.taskstatus='opentask'"; $tx = "Staff"; } else { $tx = "Chief"; } $r = DBExec($c, $sql . " for update", "DBGetTaskToAnswerC(get task for update)"); $n = DBnlines($r); if ($n != 1) { DBExec($c, "rollback work", "DBGetTaskToAnswerC(rollback)"); LogLevel("Unable to get a task (maybe other staff got it first). " . "(task={$number}, site={$site}, contest={$contest})", 2); return false; } $a = DBRow($r, 0); if ($chief != 1) { DBExec($c, "update tasktable set taskstaffnumber=" . $_SESSION["usertable"]["usernumber"] . ", " . "taskstaffsite=" . $_SESSION["usertable"]["usersitenumber"] . ", taskstatus='processing', updatetime=" . time() . " " . "where contestnumber={$contest} and tasknumber={$number} and " . "sitenumber={$site}", "DBGetTaskToAnswerC(update task)"); } DBExec($c, "commit work", "DBGetTaskToAnswerC(commit)"); LOGLevel("User got a task (task={$number}, site={$site}, contest={$contest}, user="******"usertable"]["usernumber"] . "(" . $_SESSION["usertable"]["usersitenumber"] . ")).", 3); return $a; }