function ufdbguard_schedule() { $sock = new sockets(); $unix = new unix(); $UfdbGuardSchedule = unserialize(base64_decode($sock->GET_INFO("UfdbGuardSchedule"))); $cronfile = "/etc/cron.d/artica-ufdb-dbs"; if (!is_numeric($UfdbGuardSchedule["EnableSchedule"])) { $UfdbGuardSchedule["EnableSchedule"] = 0; } if ($UfdbGuardSchedule["EnableSchedule"] == 0) { @unlink($cronfile); echo "Starting......: ufdbGuard recompile all databases is not scheduled\n"; return; } $f[] = "MAILTO=\"\""; $f[] = "{$UfdbGuardSchedule["H"]} {$UfdbGuardSchedule["M"]} * * * root " . $unix->LOCATE_PHP5_BIN() . " " . __FILE__ . " --ufdbguard-recompile-dbs >/dev/null 2>&1"; @file_put_contents($cronfile, @implode("\n", $f)); echo "Starting......: ufdbGuard recompile all databases each day at {$UfdbGuardSchedule["H"]}:{$UfdbGuardSchedule["M"]}\n"; events_ufdb_tail("ufdbGuard recompile all databases each day at {$UfdbGuardSchedule["H"]}:{$UfdbGuardSchedule["M"]}", __LINE__); }
function UFDBGUARD_COMPILE_SINGLE_DB($path) { $timeStart = time(); $OriginalDirename = dirname($path); $unix = new unix(); $path = str_replace(".ufdb", "", $path); $pidpath = "/etc/artica-postfix/pids/" . basename(__FILE__) . "." . __FUNCTION__ . md5($path) . ".pid"; $pid = @file_get_contents($pidpath); if ($unix->process_exists($pid)) { events_ufdb_tail("Check \"{$path}\"... Already process PID \"{$pid}\" running task has been aborted"); return; } $category = null; $ufdbGenTable = $unix->find_program("ufdbGenTable"); if (!is_file($ufdbGenTable)) { writelogs("ufdbGenTable no such binary", __FUNCTION__, __FILE__, __LINE__); return; } events_ufdb_tail("Check \"{$path}\"...", __LINE__); if (preg_match("#\\/var\\/lib\\/squidguard\\/(.+?)\\/(.+?)/(.+?)\$#", $path, $re)) { $category = $re[2]; $domain_path = "/var/lib/squidguard/{$re[1]}/{$re[2]}/domains"; } if ($category == null) { if (preg_match("#\\/var\\/lib\\/squidguard\\/(.+?)\\/domains#", $path, $re)) { $category = $re[1]; $domain_path = "/var/lib/squidguard/{$re[1]}/domains"; } } if (preg_match("#web-filter-plus\\/BL\\/(.+?)\\/domains#", $path, $re)) { $category = $re[1]; $domain_path = "/var/lib/squidguard/web-filter-plus/BL/{$category}/domains"; } if (preg_match("#blacklist-artica\\/(.+?)\\/(.+?)\\/domains#", $path, $re)) { events_ufdb_tail("find double category \"{$re[1]}-{$re[2]}\"...", __LINE__); $category = "{$re[1]}-{$re[2]}"; $domain_path = "/var/lib/squidguard/blacklist-artica/{$re[1]}/{$re[2]}/domains"; } if (preg_match("#blacklist-artica\\/sex\\/(.+?)\\/domains#", $path, $re)) { $category = $re[1]; $domain_path = "/var/lib/squidguard/blacklist-artica/sex/{$category}/domains"; } if ($category == null) { events_ufdb_tail("exec.squidguard.php:: \"{$path}\" cannot understand..."); } events_ufdb_tail("exec.squidguard.php:: Found category \"{$category}\"", __LINE__); if (!is_file($path)) { events_ufdb_tail("exec.squidguard.php:{$category}: \"{$path}\" no such file, build it", __LINE__); @file_put_contents($domain_path, " "); } $category_compile = substr($category, 0, 15); if (strlen($category_compile) > 15) { $category_compile = str_replace("recreation_", "recre_", $category_compile); $category_compile = str_replace("automobile_", "auto_", $category_compile); $category_compile = str_replace("finance_", "fin_", $category_compile); if (strlen($category_compile) > 15) { $category_compile = str_replace("_", "", $category_compile); if (strlen($category_compile) > 15) { $category_compile = substr($category_compile, strlen($category_compile) - 15, 15); } } } events_ufdb_tail("exec.squidguard.php:: category \"{$category}\" retranslated to \"{$category_compile}\"", __LINE__); if (is_file("{$domain_path}.ufdb")) { events_ufdb_tail("exec.squidguard.php:: removing \"{$domain_path}.ufdb\" ..."); @unlink("{$domain_path}.ufdb"); } if (!is_file($domain_path)) { events_ufdb_tail("exec.squidguard.php:: {$domain_path} no such file, create an empty one", __LINE__); @mkdir(dirname($domain_path), 0755, true); @file_put_contents($domain_path, "#"); } $urlcmd = null; $d = " -d {$domain_path}"; if (is_file("{$OriginalDirename}/urls")) { $urlssize = @filesize("{$OriginalDirename}/urls"); events_ufdb_tail("exec.squidguard.php:: {$OriginalDirename}/urls {$urlssize} bytes...", __LINE__); if ($urlssize > 50) { $urlcmd = " -u {$OriginalDirename}/urls"; } } $NICE = EXEC_NICE(); $cmd = "{$NICE}{$ufdbGenTable} -n -D -W -t {$category_compile}{$d}{$urlcmd} 2>&1"; events_ufdb_tail("exec.squidguard.php:{$category}:{$cmd}"); $time = time(); exec($cmd, $results); exec($cmd, $results); while (list($a, $b) = each($results)) { if (strpos($b, "is not added because it was already matched")) { continue; } if (strpos($b, "has optimised subdomains")) { continue; } events_ufdb_tail("exec.squidguard.php:{$category}:{$b}"); } $tookrecompile = $unix->distanceOfTimeInWords($time, time()); events_ufdb_tail("exec.squidguard.php:{$category_compile}: execution {$tookrecompile}", __LINE__); events_ufdb_tail("exec.squidguard.php:{$category}:done.."); $user = GetSquidUser(); $chown = $unix->find_program("chown"); if (is_file($chown)) { events_ufdb_tail("exec.squidguard.php:{$category}:{$chown} -R {$user} {$OriginalDirename}"); shell_exec("{$chown} -R {$user} {$OriginalDirename}/*"); shell_exec("{$chown} -R {$user} /var/log/squid/*"); } $sock = new sockets(); $took = $unix->distanceOfTimeInWords($timeStart, time()); $sock->TOP_NOTIFY("{$OriginalDirename} webfiltering database ({$category}) was recompiled took {$took} hard compilation took: {$tookrecompile}", "info"); }