Ejemplo n.º 1
0
                    break;
                }
            }
        }
    }
    if ($pfb['update_cron']) {
        sync_package_pfblockerng("cron");
    } else {
        sync_package_pfblockerng("noupdates");
        $log = "\n  No Updates required.\n CRON  PROCESS  ENDED\n UPDATE PROCESS ENDED\n";
        pfb_logger("{$log}", "1");
    }
    // Call Log Mgmt Function
    // If Update GUI 'Manual view' is selected. Last output will be missed. So sleep for 5 secs.
    sleep(5);
    pfb_log_mgmt();
}
// Function to process the downloaded Maxmind Database and format into Continent txt files.
function pfblockerng_uc_countries()
{
    global $g, $pfb;
    $maxmind_cont = "{$pfb['dbdir']}/country_continent.csv";
    $maxmind_cc4 = "{$pfb['dbdir']}/GeoIPCountryWhois.csv";
    $maxmind_cc6 = "{$pfb['dbdir']}/GeoIPv6.csv";
    // Create Folders if not Exist
    $folder_array = array("{$pfb['dbdir']}", "{$pfb['logdir']}", "{$pfb['ccdir']}");
    foreach ($folder_array as $folder) {
        safe_mkdir("{$folder}", 0755);
    }
    $now = date("m/d/y G:i:s", time());
    $log = "Country Code Update Start - [ NOW ]\n\n";
Ejemplo n.º 2
0
function pfblockerng_sync_cron()
{
    global $config, $pfb, $pfbarr;
    // Call base hour converter
    $pfb_sch = pfb_cron_base_hour();
    $hour = date('G');
    $dow = date('N');
    $pfb['update_cron'] = FALSE;
    $log = " CRON  PROCESS  START [ NOW ]\n";
    pfb_logger("{$log}", 1);
    $list_type = array('pfblockernglistsv4' => '_v4', 'pfblockernglistsv6' => '_v6', 'pfblockerngdnsbl' => '_v4', 'pfblockerngdnsbleasylist' => '_v4');
    foreach ($list_type as $ip_type => $vtype) {
        if (!empty($config['installedpackages'][$ip_type]['config'])) {
            foreach ($config['installedpackages'][$ip_type]['config'] as $list) {
                if (isset($list['row']) && $list['action'] != 'Disabled' && $list['cron'] != 'Never') {
                    foreach ($list['row'] as $row) {
                        if (!empty($row['url']) && $row['state'] != 'Disabled') {
                            if ($vtype == '_v4') {
                                $header = "{$row['header']}";
                            } else {
                                $header = "{$row['header']}_v6";
                            }
                            // Determine folder location for alias (return array $pfbarr)
                            pfb_determine_list_detail($list['action'], '', '', '');
                            $pfbfolder = $pfbarr['folder'];
                            $pfborig = $pfbarr['orig'];
                            // Bypass update if state is defined as 'Hold' and list file exists
                            if ($row['state'] == 'Hold' && file_exists("{$pfbfolder}/{$header}.txt")) {
                                continue;
                            }
                            // Allow cURL SSL downgrade if user configured.
                            $pflex = FALSE;
                            if ($row['state'] == 'Flex') {
                                $pflex = TRUE;
                            }
                            switch ($list['cron']) {
                                case 'EveryDay':
                                    if ($hour == $pfb['24hour']) {
                                        pfb_update_check($header, $row['url'], $pfbfolder, $pfborig, $pflex, $row['format']);
                                    }
                                    break;
                                case 'Weekly':
                                    if ($hour == $pfb['24hour'] && $dow == $list['dow']) {
                                        pfb_update_check($header, $row['url'], $pfbfolder, $pfborig, $pflex, $row['format']);
                                    }
                                    break;
                                default:
                                    if ($pfb['interval'] == '1' || in_array($hour, $pfb_sch)) {
                                        pfb_update_check($header, $row['url'], $pfbfolder, $pfborig, $pflex, $row['format']);
                                    }
                                    break;
                            }
                        }
                    }
                }
            }
        }
    }
    // If no lists require updates, check if Continents are configured and update accordingly.
    if (!$pfb['update_cron']) {
        foreach ($pfb['continents'] as $continent => $pfb_alias) {
            if (isset($config['installedpackages']['pfblockerng' . strtolower(str_replace(' ', '', $continent))]['config'])) {
                $continent_config = $config['installedpackages']['pfblockerng' . strtolower(str_replace(' ', '', $continent))]['config'][0];
                if ($continent_config['action'] != 'Disabled') {
                    $pfb['update_cron'] = TRUE;
                    break;
                }
            }
        }
    }
    if ($pfb['update_cron']) {
        sync_package_pfblockerng('cron');
        $pfb['update_cron'] = FALSE;
    } else {
        sync_package_pfblockerng('noupdates');
        $log = "\n  No Updates required.\n CRON  PROCESS  ENDED\n UPDATE PROCESS ENDED\n";
        pfb_logger("{$log}", 1);
    }
    // Call log mgmt function
    // If Update GUI 'Manual view' is selected. Last output will be missed. So sleep for 5 secs.
    sleep(5);
    pfb_log_mgmt();
}
function pfb_cron_update($type)
{
    global $pfb;
    // Query for any Active pfBlockerNG CRON Jobs
    $result_cron = array();
    $cron_event = exec("/bin/ps -wx", $result_cron);
    if (preg_grep("/pfblockerng[.]php\\s+cron/", $result_cron) || preg_grep("/pfblockerng[.]php\\s+update/", $result_cron)) {
        pfbupdate_status(gettext("Force {$type} Terminated - Failed due to Active Running Task"));
        exit;
    }
    if (!file_exists("{$pfb['log']}")) {
        touch("{$pfb['log']}");
    }
    // Update Status Window with correct Task
    if ($type == "update") {
        pfbupdate_status(gettext("Running Force Update Task"));
    } elseif ($type == "reload") {
        pfbupdate_status(gettext("Running Force Reload Task"));
        $type = "update";
    } else {
        pfbupdate_status(gettext("Running Force CRON Task"));
    }
    // Remove any existing pfBlockerNG CRON Jobs
    install_cron_job("pfblockerng.php cron", false);
    // Execute PHP Process in the Background
    mwexec_bg("/usr/local/bin/php /usr/local/www/pfblockerng/pfblockerng.php {$type} >> {$pfb['log']} 2>&1");
    // Start at EOF
    $lastpos_old = "";
    $len = filesize("{$pfb['log']}");
    $lastpos = $len;
    while (true) {
        usleep(300000);
        //0.3s
        clearstatcache(false, $pfb['log']);
        $len = filesize("{$pfb['log']}");
        if ($len < $lastpos) {
            //file deleted or reset
            $lastpos = $len;
        } else {
            $f = fopen($pfb['log'], "rb");
            if ($f === false) {
                die;
            }
            fseek($f, $lastpos);
            while (!feof($f)) {
                $pfb_buffer = fread($f, 2048);
                $pfb_output .= str_replace(array("\r", "\")"), "", $pfb_buffer);
                // Refresh on new lines only. This allows Scrolling.
                if ($lastpos != $lastpos_old) {
                    pfbupdate_output($pfb_output);
                }
                $lastpos_old = $lastpos;
                ob_flush();
                flush();
            }
            $lastpos = ftell($f);
            fclose($f);
        }
        // Capture Remaining Output before closing File
        if (preg_match("/(UPDATE PROCESS ENDED)/", $pfb_output)) {
            $f = fopen($pfb['log'], "rb");
            fseek($f, $lastpos);
            $pfb_buffer = fread($f, 2048);
            $pfb_output .= str_replace("\r", "", $pfb_buffer);
            pfbupdate_output($pfb_output);
            clearstatcache(false, $pfb['log']);
            ob_flush();
            flush();
            fclose($f);
            // Call Log Mgmt Function
            pfb_log_mgmt();
            die;
        }
    }
}