| <?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include("_projectCommon.php"); # All on the same line to unclutter the user's desktop' | |
| /******************************************************************************* | |
| * Copyright (c) 2010-2015 Eclipse Foundation and others. | |
| * All rights reserved. This program and the accompanying materials | |
| * are made available under the terms of the Eclipse Public License v1.0 | |
| * which accompanies this distribution, and is available at | |
| * http://www.eclipse.org/legal/epl-v10.html | |
| * | |
| * Contributors: | |
| * Denis Roy (Eclipse Foundation) - initial API and implementation | |
| *******************************************************************************/ | |
| header("Cache-control: no-cache"); | |
| require_once "/home/data/httpd/eclipse-php8-classes/system/dbconnection.class.php"; | |
| require_once "/home/data/httpd/eclipse-php8-classes/system/dbconnection_rw.class.php"; | |
| $_type = $App->getHTTPParameter("type"); | |
| $_debug = $App->getHTTPParameter("debug"); | |
| $_file = $App->getHTTPParameter("file"); | |
| $cache_hit_status = "CACHE_HIT"; | |
| if($_debug == 1) { | |
| error_reporting(E_ALL); | |
| ini_set("display_errors", true); | |
| } | |
| # make sure some incoming params are sane | |
| if($_type != "md5" && $_type != "sha1" && $_type != "sha512") { | |
| $_type = "sha512"; | |
| } | |
| # strip potentially bad characters from file | |
| $_file = str_replace("\%", "", $_file); | |
| $_file = str_replace("../", "", $_file); | |
| $_file = str_replace("'", "", $_file); | |
| $update_ts = true; | |
| $filename_fileonly = substr($_file, strrpos($_file, "/") + 1); # filename portion only | |
| # Connect to databases | |
| # dbc is a read-only database (good for slave servers) | |
| $dbc = new DBConnection(); | |
| $dbh = $dbc->connect(); | |
| $app = new App(); | |
| header("Content-type: text/plain"); | |
| if($_file != "") { | |
| # locate file on download.eclipse.org to ensure it's valid | |
| $file_absolute_path = $App->getDownloadBasePath() . $_file; | |
| if(!file_exists($file_absolute_path)) { | |
| # check the archives | |
| $file_absolute_path = "/home/data2/httpd/archive.eclipse.org" . $_file; | |
| if(file_exists($file_absolute_path)) { | |
| # don't update the timestamp if the file is in the archives. | |
| # that will cause problems for download.php | |
| $update_ts = false; | |
| } | |
| else { | |
| echo "Unable to retrieve or compute sums for " . $_file; | |
| exit; | |
| } | |
| } | |
| # now we know the file exists | |
| $file_id = 0; | |
| $filetime = 0; | |
| $filetime_disk = @filemtime($file_absolute_path); | |
| $md5sum = 0; | |
| $sha1sum = 0; | |
| $sha512sum = 0; | |
| # q1: get file info from slave | |
| $sql = "SELECT IDX.file_id, IDX.timestamp_disk, IF(IDX.md5sum = '0', '', IDX.md5sum) AS md5sum, IF(IDX.sha1sum = '0', '', IDX.sha1sum) AS sha1sum, IF(IDX.sha512sum = '0', '', IDX.sha512sum) AS sha512sum FROM download_file_index AS IDX WHERE IDX.file_name = '$_file'"; | |
| if($_debug == 1) { | |
| echo $sql . "<br />"; | |
| } | |
| # Get the file_id from the slave, but if the file_id is 0, then re-check the master just in case | |
| $rs = mysqli_query($dbh, $sql); | |
| if($myrow = mysqli_fetch_assoc($rs)) { | |
| $file_id = $myrow['file_id']; | |
| $filetime = $myrow['timestamp_disk']; | |
| $md5sum = $myrow['md5sum']; | |
| $sha1sum = $myrow['sha1sum']; | |
| $sha512sum = $myrow['sha512sum']; | |
| # Bug 460490: Recalculate if our cached timestamp is older than timestamp of file on disk | |
| if( ($filetime_disk > $filetime || $md5sum == "" || $sha1sum == "" || $sha512sum == "" || $md5sum == "nofile" || $sha1sum == "nofile" || $sha512sum == "nofile") && $file_id > 0) { | |
| # compute immediately | |
| $cache_hit_status = "CACHE_MISS"; | |
| $dbc_RW = new DBConnectionRW(); | |
| $dbh_RW = $dbc_RW->connect(); | |
| # lock table so no one else thinks the sums are out of whack for this file | |
| $sql = "LOCK TABLES download_file_index WRITE"; | |
| mysqli_query($dbh_RW, $sql); | |
| $md5sum = md5_file($file_absolute_path); | |
| $sha1sum = sha1_file($file_absolute_path); | |
| $sha512sum = hash_file('sha512', $file_absolute_path); | |
| if($md5sum && $sha1sum && $sha512sum) { | |
| $str = ""; | |
| if($update_ts) { | |
| $str = "timestamp_disk = '$filetime_disk', "; | |
| } | |
| $sql = "UPDATE download_file_index SET $str md5sum = '$md5sum', sha1sum = '$sha1sum', sha512sum = '$sha512sum' WHERE file_id = " . $file_id; | |
| mysqli_query($dbh_RW, $sql); | |
| if($_debug == 1) { | |
| echo $sql . "<br />"; | |
| } | |
| } | |
| else { | |
| echo "Unable to calculate sums for this file (3122)."; | |
| } | |
| mysqli_query($dbh_RW, "UNLOCK TABLES"); | |
| } | |
| header("X-Cache-Status: " . $cache_hit_status); | |
| if($_type == "md5") { | |
| echo $md5sum . " " . $filename_fileonly; | |
| } | |
| if($_type == "sha1") { | |
| echo $sha1sum . " " . $filename_fileonly; | |
| } | |
| if($_type == "sha512") { | |
| echo $sha512sum . " " . $filename_fileonly; | |
| } | |
| } | |
| elseif ( $update_ts === false ) { | |
| #file is on archive so generate from there, but only the sum type being requested. | |
| $hash = "(3119) Couldn't compute hash value for"; | |
| if($_type == "md5") { | |
| $hash = md5_file($file_absolute_path); | |
| } | |
| if($_type == "sha1") { | |
| $hash = sha1_file($file_absolute_path); | |
| } | |
| if($_type == "sha512") { | |
| $hash = hash_file('sha512', $file_absolute_path); | |
| } | |
| echo $hash . " " . $filename_fileonly; | |
| } | |
| else { | |
| echo "Unable to locate sums for this file (3120)."; | |
| } | |
| } | |
| $dbc->disconnect(); # disconnects all pending DB connections | |
| $rs = null; | |
| $dbh_RW = null; | |
| $dbc_RW = null; | |
| $dbh = null; | |
| $dbc = null; | |
| ?> |