예제 #1
0
function HyperCacheScanDBFile($dbfile, $ID)
{
    $TT = time();
    $unix = new unix();
    $Cache = unserialize(@file_get_contents("/usr/share/squid3/lastScan.array"));
    if (isset($Cache[$ID][$dbfile])) {
        $filemm = filemtime($dbfile);
        if ($filemm == $Cache[$ID][$dbfile]) {
            if ($GLOBALS["HYPER_CACHE_VERBOSE"]) {
                echo "HyperCacheScanDBFile {$filemm} == {$Cache[$ID][$dbfile]} [" . __LINE__ . "]\n";
            }
            return;
        }
    }
    $filesize = FormatBytes(@filesize($dbfile) / 1024);
    if ($GLOBALS["HYPER_CACHE_VERBOSE"]) {
        echo "HyperCacheScanDBFile ---> {$dbfile} [" . __LINE__ . "]\n";
    }
    $db_con = dba_open($dbfile, "r", "db4");
    if (!$db_con) {
        events("{failed}: DB open" . basename($dbfile), $ID, 0, __LINE__);
        return false;
    }
    $HyperCacheRules = HyperCacheRulesLoad();
    if (!isset($HyperCacheRules[$ID])) {
        if ($GLOBALS["HYPER_CACHE_VERBOSE"]) {
            events("No rule for ID {$ID}!", 0, 2, __LINE__);
        }
        return;
    }
    $FileTypesArray = unserialize($HyperCacheRules[$ID]["FileTypes"]);
    if (count($FileTypesArray) == 0) {
        events("No Files type defined, aborting", $ID, 0, __LINE__);
        return;
    }
    $urikey = dba_firstkey($db_con);
    $ARRAY_SAVE = array();
    $c = 0;
    while ($urikey != false) {
        $FileType = dba_fetch($urikey, $db_con);
        $GLOBALS["MAINDB"][$urikey] = $FileType;
        $urikey = dba_nextkey($db_con);
    }
    @dba_close($db_con);
    $GLOBAL["BLACKLISTED"] = array();
    if (!class_exists("HyperCache")) {
        include_once dirname(__FILE__) . "/ressources/class.HyperCache.inc";
    }
    $HyPerCacheClass = new HyperCache();
    if (!function_exists("HyperCacheRulesBlacklist")) {
        include_once dirname(__FILE__) . "/ressources/class.hyperCache-central.inc";
    }
    while (list($urikey, $FileType) = each($GLOBALS["MAINDB"])) {
        if (HyperCacheRulesBlacklist($urikey)) {
            if ($GLOBALS["HYPER_CACHE_VERBOSE"]) {
                echo "HyperCacheScanDBFile:: {$urikey} Blacklisted";
            }
            $GLOBAL["BLACKLISTED"][$urikey] = true;
            continue;
        }
        $SCANNED_URL = ifTracker($urikey);
        $H = parse_url($SCANNED_URL);
        $path = $H["path"];
        $filename = basename($path);
        $extention = $unix->file_extension($filename);
        $GetMimeFromExtension = GetMimeFromExtension($extention);
        if ($GetMimeFromExtension != null) {
            if ($FileType != $GetMimeFromExtension) {
                $FileType = $GetMimeFromExtension;
                $ARRAY_SAVE[$urikey] = $FileType;
            }
        } else {
            if ($GLOBALS["HYPER_CACHE_VERBOSE"]) {
                echo "HyperCacheScanDBFile:: {$SCANNED_URL} {$filename}/{$FileType} - {$extention} no MIME ??\n";
            }
        }
        if ($FileType == "NONE") {
            $FileType = HyperCacheGetMimeType($urikey, $ID);
            if ($FileType == null) {
                $GLOBAL["BLACKLISTED"][$urikey] = true;
                continue;
            }
            $ARRAY_SAVE[$urikey] = $FileType;
        }
        if (!isset($FileTypesArray[$FileType])) {
            if (!$HyPerCacheClass->ChecksOtherRules($urikey, $FileType, $ID)) {
                $GLOBAL["BLACKLISTED"][$urikey] = true;
                if ($GLOBALS["HYPER_CACHE_VERBOSE"]) {
                    events("{$urikey} {$FileType} No match...", $ID, 3, __LINE__);
                }
                continue;
            }
        }
        $TargetFile = HyperCacheScanBuildLocalPath($urikey, $ID);
        $FullTargetFile = $GLOBALS["HyperCacheStoragePath"] . "/" . $TargetFile;
        if (is_file($FullTargetFile)) {
            continue;
        }
        events("Downloading {$urikey} [{$FileType}]", $ID, 2, __LINE__);
        HyperCacheScanDownload($urikey, $TargetFile, $ID, $FileType);
    }
    if (count($GLOBAL["BLACKLISTED"]) > 0) {
        HyperCacheScanDBFile_removebulk($dbfile, $GLOBAL["BLACKLISTED"]);
    }
    HyperCacheScanDBFile_setbulk($dbfile, $ARRAY_SAVE);
    $filemm = filemtime($dbfile);
    $Cache[$ID][$dbfile] = $filemm;
    @file_put_contents("/usr/share/squid3/lastScan.array", serialize($Cache));
}
예제 #2
0
function HyperCacheRules($PROTO, $ToUfdb, $URI, $IP, $userid, $DEBUGHOSTNAME)
{
    if ($GLOBALS["SquidEnforceRules"] == 0) {
        return;
    }
    if (preg_match("#([0-9\\.]+)\\/(.*)#", $IP, $re)) {
        $IP = $re[1];
        $USER = $re[2];
    }
    if ($IP == "127.0.0.1") {
        return;
    }
    if ($PROTO != "GET") {
        if ($GLOBALS["HyperCacheDebug"]) {
            events("HyperCacheRules:{$PROTO}/{$IP} <> GET ABORT");
        }
        return false;
    }
    if ($GLOBALS["SquidEnforceRules"] == 0) {
        if ($GLOBALS["HyperCacheDebug"]) {
            events("HyperCacheRules:{$IP} Not enabled <> GET ABORT");
        }
        return;
    }
    if (HyperCacheRulesBlacklist($DEBUGHOSTNAME)) {
        return;
    }
    $URI = HyperCacheCleanUri($URI);
    if ($GLOBALS["HyperCacheOK"][md5($URI)]) {
        Output_results($GLOBALS["HyperCacheOK"][md5($URI)], __FUNCTION__, __LINE__);
        if ($GLOBALS["HyperCacheDebug"]) {
            events("HyperCacheRules:`{$URI}` -> REDIRECT MEM");
        }
        return true;
    }
    include_once dirname(__FILE__) . "/ressources/class.HyperCache.inc";
    include_once dirname(__FILE__) . "/ressources/class.hyperCache-central.inc";
    $HyperCache = new HyperCache();
    if ($HyperCache->HyperCacheRulesMatchPattern($GLOBALS["HyperCacheListenAddr"], $URI)) {
        return false;
    }
    if (HyperCacheRuleMirror($URI)) {
        return true;
    }
    if (HyperCacheWhiteUri($URI)) {
        return false;
    }
    $ID = $HyperCache->HyperCacheRulesMatches($URI);
    if ($ID == 0) {
        if ($GLOBALS["HyperCacheDebug"]) {
            events("HyperCacheRules: ID == {$ID} FALSE [" . __LINE__ . "]");
        }
        return false;
    }
    if (HyperCacheRulesSave($URI, $ID)) {
        return true;
    }
    if ($GLOBALS["HyperCacheDebug"]) {
        events("HyperCacheRules:`{$URI}` no match");
    }
}
예제 #3
0
function HyperCacheRules($PROTO,$ToUfdb,$URI,$IP,$userid,$DEBUGHOSTNAME){
	
	
	if(preg_match("#([0-9\.]+)\/(.*)#", $IP,$re)){
		$IP=$re[1];
		$USER=$re[2];
	}
	if($IP=="127.0.0.1"){return;}
	
	
	
	
	if($PROTO<>"GET"){
		if($GLOBALS["HyperCacheDebug"]){events("HyperCacheRules:$PROTO/$IP <> GET ABORT");}
		return false;
	}
	if($GLOBALS["SquidEnforceRules"]==0){
		if($GLOBALS["HyperCacheDebug"]){events("HyperCacheRules:$IP Not enabled <> GET ABORT");}
		return;
	}
	
	if(HyperCacheRulesBlacklist($DEBUGHOSTNAME)){return;}
	
	$URI=HyperCacheCleanUri($URI);
	
	if($GLOBALS["HyperCacheOK"][md5($URI)]){
		Output_results($GLOBALS["HyperCacheOK"][md5($URI)]);
		if($GLOBALS["HyperCacheDebug"]){events("HyperCacheRules:`$URI` -> REDIRECT MEM");}
		return true;
		
	}
	
	$HyperCache=new HyperCache();
	if($HyperCache->HyperCacheRulesMatchPattern($GLOBALS["HyperCacheListenAddr"], $URI)){return false;}
	
	if(HyperCacheRuleMirror($URI)){return true;}
	if(HyperCacheWhiteUri($URI)){return false;}
	
	
	$ID=$HyperCache->HyperCacheRulesMatches($URI);
	if($ID==0){return false;}
	
	if(HyperCacheRulesSave($URI,$ID)){return true;}
	
	if($GLOBALS["HyperCacheDebug"]){events("HyperCacheRules:`$URI` no match");}
}