function build() { $unix = new unix(); $pidfile = "/etc/artica-postfix/pids/" . basename(__FILE__) . ".pid"; $timefile = "/etc/artica-postfix/pids/" . basename(__FILE__) . ".time"; $pid = $unix->get_pid_from_file($pidfile); if ($unix->process_exists($pid, __FILE__)) { echo "Already PID running {$pid} (" . basename(__FILE__) . ")\n"; die; } $time = $unix->file_time_min($timefile); if (!$GLOBALS["FORCE"]) { if ($time < 5) { if ($GLOBALS["VERBOSE"]) { echo "{$time}mn < 5mn\n"; } die; } } @mkdir(dirname($pidfile), 0755, true); @file_put_contents($pidfile, getmypid()); @unlink($timefile); @file_put_contents($timefile, time()); $php = $unix->LOCATE_PHP5_BIN(); $MD5_SRC = @md5_file("/etc/squid3/usersMacs.db"); @unlink("/etc/squid3/usersMacs.db"); @unlink("/usr/share/artica-postfix/ressources/databases/usersMacs.db"); $sock = new sockets(); $EnableWebProxyStatsAppliance = $sock->GET_INFO("EnableWebProxyStatsAppliance"); $EnableRemoteStatisticsAppliance = $sock->GET_INFO("EnableRemoteStatisticsAppliance"); if (!is_numeric($EnableWebProxyStatsAppliance)) { $EnableWebProxyStatsAppliance = 0; } if (!is_numeric($EnableRemoteStatisticsAppliance)) { $EnableRemoteStatisticsAppliance = 0; } if ($EnableRemoteStatisticsAppliance == 1) { download_mydb(); return; } if (!function_exists("IsPhysicalAddress")) { include_once dirname(__FILE__) . "/ressources/class.templates.inc"; } if (!class_exists("mysql_squid_builder")) { include_once dirname(__FILE__) . "/ressources/class.mysql.squid.builder.php"; } build_progress("{starting}", 10); $unix = new unix(); $arpd = $unix->find_program("arpd"); $chmod = $unix->find_program("chmod"); if (is_file($arpd)) { exec("{$arpd} -l 2>&1", $results); while (list($num, $line) = each($results)) { if (preg_match("#([0-9]+)\\s+([0-9\\.]+)\\s+([0-9a-z\\:]+)#", $line, $re)) { build_progress("{$re[3]} = {$re[2]}", 15); $MACS["MACS"][$re[3]]["IP"] = $re[2]; $MACS["IPS"][$re[2]] = $re[3]; } } } $q = new mysql_squid_builder(); $sql = "SELECT * FROM webfilters_nodes WHERE LENGTH(uid)>1"; $results = $q->QUERY_SQL($sql, "artica_backup"); while ($ligne = mysql_fetch_assoc($results)) { if ($ligne["MAC"] == "00:00:00:00:00:00") { continue; } if (!IsPhysicalAddress($ligne["MAC"])) { continue; } if ($GLOBALS["VERBOSE"]) { echo "{$ligne["MAC"]} = {$ligne["uid"]}\n"; } $MACS["MACS"][$ligne["MAC"]]["UID"] = $ligne["uid"]; $MACS["MACS"][$ligne["MAC"]]["GROUP"] = $ligne["group"]; build_progress($ligne["MAC"], 20); UPDATE_HOURS_MAC($ligne["MAC"], $ligne["uid"]); if ($ligne["hostname"] != null) { $MACS["MACS"][$ligne["MAC"]]["HOST"] = $ligne["hostname"]; } } $q = new mysql(); $sql = "SELECT * FROM hostsusers"; $results = $q->QUERY_SQL($sql, "artica_backup"); while ($ligne = mysql_fetch_assoc($results)) { if ($ligne["MacAddress"] == "00:00:00:00:00:00") { continue; } if (!IsPhysicalAddress($ligne["MacAddress"])) { continue; } if ($GLOBALS["VERBOSE"]) { echo "{$ligne["MacAddress"]} = {$ligne["uid"]}\n"; } if (preg_match("#group:@(.+?):([0-9]+)#", $ligne["uid"], $re)) { build_progress($ligne["MacAddress"], 30); $MACS["MACS"][$ligne["MacAddress"]]["UID"] = $re[1]; UPDATE_HOURS_MAC($ligne["MacAddress"], $re[1]); continue; } UPDATE_HOURS_MAC($ligne["MacAddress"], $ligne["uid"], 30); $MACS["MACS"][$ligne["MacAddress"]]["UID"] = $ligne["uid"]; } $q = new mysql_squid_builder(); $sql = "SELECT * FROM webfilters_ipaddr WHERE LENGTH(uid)>1"; $results = $q->QUERY_SQL($sql, "artica_backup"); while ($ligne = mysql_fetch_assoc($results)) { build_progress($ligne["ipaddr"], 40); $MACS["MACS"][$ligne["ipaddr"]]["UID"] = $ligne["uid"]; $MACS["MACS"][$ligne["ipaddr"]]["GROUP"] = $ligne["group"]; UPDATE_HOURS_IP($ligne["ipaddr"], $ligne["uid"], 40); if ($ligne["hostname"] != null) { $MACS["MACS"][$ligne["ipaddr"]]["HOST"] = $ligne["hostname"]; } } $q = new mysql_squid_builder(); $sql = "SELECT uid,MAC,ipaddr FROM hotspot_sessions WHERE LENGTH(uid)>1"; $results = $q->QUERY_SQL($sql); while ($ligne = mysql_fetch_assoc($results)) { $MACS["MACS"][$ligne["MAC"]]["UID"] = $ligne["uid"]; $MACS["MACS"][$ligne["MAC"]]["GROUP"] = "hotspot"; $MACS["MACS"][$ligne["ipaddr"]]["UID"] = $ligne["uid"]; $MACS["MACS"][$ligne["ipaddr"]]["GROUP"] = "hotspot"; } $CountDeMac = count($MACS["MACS"]); $CountDeIP = count($MACS["IPS"]); build_progress("{saving}...", 50); @file_put_contents("/etc/squid3/usersMacs.db", serialize($MACS)); $MD5_DEST = @md5_file("/etc/squid3/usersMacs.db"); @file_put_contents("/usr/share/artica-postfix/ressources/databases/usersMacs.db", serialize($MACS)); shell_exec("{$chmod} 755 /etc/squid3/usersMacs.db"); shell_exec("{$chmod} 755 /usr/share/artica-postfix/ressources/databases/usersMacs.db"); if ($CountDeMac == 0) { if ($CountDeIP == 0) { @unlink("/etc/squid3/usersMacs.db"); if (IfInSquidConf()) { build_progress("{reconfigure_proxy_service}...", 80); shell_exec("{$php} /usr/share/artica-postfix/exec.squid.php --build --force"); } build_progress("{done} no item...", 100); return; } } if ($MD5_DEST == $MD5_SRC) { build_progress("{done}...", 100); return; } build_progress("{$CountDeMac} MACs, {$CountDeIP} Ips", 70); squid_admin_mysql(2, "Translation members database updated {$CountDeMac} MACs, {$CountDeIP} Ips", null, __FILE__, __LINE__); $unix = new unix(); $php5 = $unix->LOCATE_PHP5_BIN(); $nohup = $unix->find_program("nohup"); if (!IfInSquidConf()) { build_progress("{reconfigure_proxy_service}...", 80); shell_exec("{$php} /usr/share/artica-postfix/exec.squid.php --build --force"); build_progress("{done}...", 100); return; } build_progress("{reloading}...", 80); ReloadMacHelpers(); build_progress("{done}...", 100); }
ini_set('error_reporting', E_ALL); } } if (posix_getuid() != 0) { die("Cannot be used in web server mode\n\n"); } include_once dirname(__FILE__) . '/ressources/class.mysql.inc'; include_once dirname(__FILE__) . '/ressources/class.mysql.squid.builder.php'; include_once dirname(__FILE__) . '/ressources/class.ldap.inc'; include_once dirname(__FILE__) . '/framework/class.unix.inc'; include_once dirname(__FILE__) . '/framework/frame.class.inc'; include_once dirname(__FILE__) . "/ressources/class.ccurl.inc"; include_once dirname(__FILE__) . "/ressources/class.groups.inc"; $GLOBALS["UPDATE"] = false; $GLOBALS["FORCE"] = false; ReloadMacHelpers(); function ReloadMacHelpers($output = false) { @mkdir("/var/log/squid/reload", 0755, true); $unix = new unix(); $pgrep = $unix->find_program("pgrep"); $rm = $unix->find_program("rm"); shell_exec("{$rm} /var/log/squid/reload/*.ufdbgclient.php"); if (is_file("/var/log/squid/UfdbguardCache.db")) { @unlink("/var/log/squid/UfdbguardCache.db"); } exec("{$pgrep} -l -f \"ufdbgclient.php\" 2>&1", $results); while (list($index, $ligne) = each($results)) { if (preg_match("#pgrep#", $ligne)) { continue; }