diff options
| author | Cassio de Campos <cassiopc@gmail.com> | 2017-10-21 17:12:01 +0000 |
|---|---|---|
| committer | Cassio de Campos <cassiopc@gmail.com> | 2017-10-21 17:12:01 +0000 |
| commit | aea57cb508ccd1f7b543922eb3222f737c73e5ad (patch) | |
| tree | 5f49efa543c34deb5821311a6b83b5cc9859ee41 /src | |
| parent | 866d66f1d479e1fae4a0e22b09b231ff83cce08b (diff) | |
| download | boca-aea57cb508ccd1f7b543922eb3222f737c73e5ad.tar.gz boca-aea57cb508ccd1f7b543922eb3222f737c73e5ad.zip | |
update of boca
Diffstat (limited to 'src')
| -rw-r--r-- | src/admin/misc.php | 44 | ||||
| -rwxr-xr-x | src/globals.php | 87 |
2 files changed, 108 insertions, 23 deletions
diff --git a/src/admin/misc.php b/src/admin/misc.php index 3e4a4d8..8000841 100644 --- a/src/admin/misc.php +++ b/src/admin/misc.php @@ -39,7 +39,9 @@ require 'header.php'; <input type="submit" name="Submit1" value="Transfer" onClick="conf()"> <input type="submit" name="Submit2" value="Transfer all" onClick="conf()"> <input type="submit" name="Submit3" value="Transfer scores"> - <input type="submit" name="Submit4" value="Update BOCA" onClick="conf2()"> + <input type="submit" name="Submit4" value="Clear cache" onClick="conf()"> + <input type="submit" name="Submit5" value="Full clear" onClick="conf2()"> + <input type="submit" name="Submit6" value="Update BOCA" onClick="conf2()"> </center> </form> <?php @@ -60,8 +62,44 @@ if (isset($_POST["Submit2"]) && $_POST["Submit2"] == "Transfer all") { if (isset($_POST["Submit3"]) && $_POST["Submit3"] == "Transfer scores") { $doscore=true; } -if (isset($_POST["Submit4"]) && $_POST["Submit4"] == "Update BOCA") { - echo "<pre>Not implemented</pre>\n"; +if (isset($_POST["Submit4"]) && $_POST["Submit4"] == "Clear cache") { + if(fixbocadir(dirname(__DIR__))) + echo "<pre>Done</pre>\n"; + else echo "<pre>Error (likely permission/ownership issues)</pre>\n"; +} +if (isset($_POST["Submit4"]) && $_POST["Submit5"] == "Full clear") { + if(fixbocadir(dirname(__DIR__),true)) + echo "<pre>Done</pre>\n"; + else echo "<pre>Error (likely permission/ownership issues)</pre>\n"; +} +if (isset($_POST["Submit4"]) && $_POST["Submit6"] == "Update BOCA") { + require('..' . $ds . 'versionnum.php'); + $curv = split('.',$BOCAVERSION); + $dir = dirname(__DIR__); + fixbocadir($dir); + $tmpfname = tempnam(sys_get_temp_dir()); + if(($str = @file_get_contents('http://www.bombonera.org/updateboca.zip')) !== false) { + @file_put_contents($tmpfname, $str); + $t = mytime(); + $zip = new ZipArchive; + if ($zip->open($tmpfname) === true) { + $zip->extractTo($dir . $ds . "private" . $ds . "newboca." . $t); + $zip->close(); + require($dir . $ds . "private" . $ds . "newboca." . $t . $ds . 'versionnum.php'); + $newv = split('.',$BOCAVERSION); + if($curv[0] != $newv[0] || $curv[1] != $newv[1]) + echo "<pre>Cannot updated because of major version difference</pre>"; + else { + if(updatebocafile($dir, $dir . $ds . "private" . $ds . "newboca." . $t, $t) === false) + echo "<pre>Error updating BOCA</pre>\n"; + else { + echo "<pre>Updated to " . $BOCAVERSION . "\n</pre>\n"; + } + } + } else { + echo "<pre>Downloaded file corrupted</pre>"; + } + } else echo "<pre>Download error</pre>"; } $privatedir = $_SESSION['locr'] . $ds . "private"; $remotedir = $_SESSION['locr'] . $ds . "private" . $ds . "remotescores"; diff --git a/src/globals.php b/src/globals.php index 4c387fc..851b135 100755 --- a/src/globals.php +++ b/src/globals.php @@ -40,8 +40,69 @@ function filedownload($oid,$fname,$msg='') { if($msg != '') $str .= "&msg=" . rawurlencode($msg); return $str; } +function dirrec($dir, $func, $dirPermissions, $filePermissions, $avoid=array()) { + $ds = DIRECTORY_SEPARATOR; + if($ds=="") $ds = "/"; + $dp = opendir($dir); + while($file = readdir($dp)) { + if (($file == ".") || ($file == "..") || $file in_array($avoid)) + continue; + $fullPath = $dir . $ds . $file; + if(is_dir($fullPath)) { + $func($fullPath, $dirPermissions); + dirrec($fullPath, $func, $dirPermissions, $filePermissions); + } else { + $func($fullPath, $filePermissions); + } + } + closedir($dp); +} -function cleardir($dir,$cddir=true,$secure=false) { +function fixbocadir($dir,$full=false) { + if(is_dir($dir)) { + $ds = DIRECTORY_SEPARATOR; + if($ds=="") $ds = "/"; + $u = posix_getpwuid(fileowner($dir)); + $un = $u['name']; + $ug = $u['gid']; + if(@file_put_contents($dir . $ds . 'private' . $ds . '.htaccess', "Deny from all\n") === false) return false; + if(@touch($dir . $ds . 'private' . $ds . 'remotescores' . $ds . 'otherservers') === false) return false; + if($full) + $d = array('problemtmp','runtmp','scoretmp','remotescores','remotescoresfull','comp','logexternal','runslog'); + else + $d = array('problemtmp','runtmp','scoretmp'); + foreach($d as $a) cleardir($a,true,true,false); + dirrec($dir, chown, $un, $un); + dirrec($dir, chgrp, $ug, $ug); + dirrec($dir, chmod, "0755", "0644", array('private')); + dirrec($dir . $ds . 'private', chmod, "0750", "0640"); + return true; + } else { + return false; + } +} +function updatebocafile($dirboca, $dirz, $t) { + $ok = true; + if(is_dir($dirz)) { + $ds = DIRECTORY_SEPARATOR; + if($ds=="") $ds = "/"; + $d = @opendir($dirz); + while (($file = @readdir($d)) !== false) { + if($file != '.' && $file != '..') + if(updatebocafile($dirboca . $ds . $file, $dirz . $ds . $file, $t) === false) $ok=false; + } + @closedir($d); + @cleardir($dirz); + } else { + if(is_file($dirboca)) { + copy($dirboca, $dirboca . '.' . $t . '.old'); + chmod($dirboca . '.' . $t . '.old', "0400"); + } + if(rename($dirz, $dirboca) === false) $ok=false; + } + return $ok; +} +function cleardir($dir,$cddir=true,$secure=true,$removedir=true) { if(is_dir($dir)) { $ds = DIRECTORY_SEPARATOR; if($ds=="") $ds = "/"; @@ -51,26 +112,12 @@ function cleardir($dir,$cddir=true,$secure=false) { } $d = @opendir($dir); while (($file = @readdir($d)) !== false) { - if(!is_dir($dir . $ds . $file)) { - if($secure) - file_put_contents($dir . $ds . $file,str_repeat('XXXXXXXXXX',10000)); - @unlink($dir . $ds . $file); - } - else { - if($file != '.' && $file != '..') { - $cdir1 = $dir . $ds . $file; - $d1 = @opendir($cdir1); - while (($file1 = @readdir($d1)) !== false) - if(!is_dir($cdir1 . $ds . $file1)) { - if($secure) - file_put_contents($cdir1 . $ds . $file1,str_repeat('XXXXXXXXXX',10000)); - @unlink($cdir1 . $ds . $file1); - } - @rmdir($cdir1); - } - } + if($file != '.' && $file != '..') + cleardir($dir . $ds . $file, false, $secure, true); } - @rmdir($dir); + @closedir($d); + if($removedir) + @rmdir($dir); } else { if($secure) file_put_contents($dir,str_repeat('XXXXXXXXXX',10000)); |