Exemple #1
0
function load_ruleset($ruleset_file)
{
    require_once 'lib/ruleset.php';
    // cache settings
    $settings = new Cache_text('settings', array('depth' => 0));
    // get cached ruleset
    if (!($ruleset = $settings->fetch('ruleset'))) {
        $deps = array();
        $rdeps = array($ruleset_file);
        $deps['deps'] =& $rdeps;
        $validator = array('blacklist' => 'ip_ruleset', 'whitelist' => 'ip_ruleset', 'trustedproxy' => 'ip_ruleset', 'internalproxy' => 'ip_ruleset');
        $ruleset = parse_ruleset($ruleset_file, $validator, $deps);
        // somewhat bigger blacklist ?
        if (isset($ruleset['blacklist']) && count($ruleset['blacklist']) > 50) {
            require_once dirname(__FILE__) . '/lib/checkip.php';
            $ranges = make_ip_ranges($ruleset['blacklist']);
            // save blacklist separately
            $settings->update('blacklist', $ruleset['blacklist']);
            // unset blacklist array
            unset($ruleset['blacklist']);
            // set blacklist.ranges array
            $ruleset['blacklist.ranges'] = $ranges;
        }
        $settings->update('ruleset', $ruleset, 0, $deps);
    }
    return $ruleset;
}
Exemple #2
0
function get_temporary_blacklist($all = false)
{
    $dec_octet = '(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|[0-9])';
    $IPv4Address = "{$dec_octet}\\.{$dec_octet}\\.{$dec_octet}\\.{$dec_octet}";
    $retval = array();
    $ret = array('retval' => &$retval);
    $infos = array();
    if ($all) {
        $caches = array('abusefilter', 'ipblock');
    } else {
        $caches = array('ipblock');
    }
    foreach ($caches as $cache) {
        // ip block cache
        $ac = new Cache_Text($cache);
        $files = array();
        $ac->_caches($files, array('prefix' => 1));
        foreach ($files as $f) {
            // low level _fetch(), _remove()
            $info = $ac->_fetch($f, 0, $ret);
            if ($info === false) {
                $ac->_remove($f);
                continue;
            }
            // ignore some old cache format
            if (!isset($info['id'])) {
                continue;
            }
            // ignore internal purpose IP
            if ($info['id'] == '127.0.0.1') {
                continue;
            }
            if ($cache == 'abusefilter' && !preg_match("@^{$IPv4Address}(?:/\\d+)?\$@", $info['id'])) {
                continue;
            }
            $infos[$info['id']] = $info;
        }
    }
    $blocklist = array_keys($infos);
    $blocked = make_ip_ranges($blocklist);
    return $blocked;
}