Пример #1
0
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);
}
Пример #2
0
        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;
        }