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; }
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; }