function ParseDB_FILE($path, $uuid = null, $asmeta = false)
{
    $unix = new unix();
    if (!is_file($path)) {
        return;
    }
    echo "Open {$path}\n";
    $db_con = dba_open($path, "r", "db4");
    if (!$db_con) {
        if ($asmeta) {
            meta_admin_mysql(1, "DB open failed {$path}", null, __FILE__, __LINE__);
        }
        echo "DB open failed\n";
        die;
    }
    $mainkey = dba_firstkey($db_con);
    while ($mainkey != false) {
        $val = 0;
        $data = unserialize(dba_fetch($mainkey, $db_con));
        $mainkey = dba_nextkey($db_con);
        if (!is_array($data)) {
            continue;
        }
        $q = new mysql_squid_builder();
        $qCommon = new mysql_squid_builder();
        if ($uuid != null) {
            $q = new mysql_stats($uuid);
        }
        if ($asmeta) {
            $q = new mysql_meta();
        }
        if (!isset($data["HOURLY"])) {
            continue;
        }
        if (!isset($data["WWW"])) {
            continue;
        }
        $category = null;
        $ipaddr = mysql_escape_string2($data["IPADDR"]);
        if (isset($data["MAC"])) {
            $mac = mysql_escape_string2($data["MAC"]);
        }
        $uid = mysql_escape_string2($data["UID"]);
        $familysite = mysql_escape_string2($data["WWW"]);
        if (isset($data["category"])) {
            $category = mysql_escape_string2($data["category"]);
        }
        if ($uid == null) {
            $uid = $qCommon->UID_FROM_MAC($data["MAC"]);
        }
        if ($uid == null) {
            $uid = $qCommon->UID_FROM_IP($data["IPADDR"]);
        }
        $uid = mysql_escape_string2($uid);
        $length = strlen($ipaddr) + strlen($mac) + strlen($uid) + strlen($familysite);
        if ($length == 0) {
            continue;
        }
        while (list($day, $array) = each($data["HOURLY"])) {
            while (list($hour, $size) = each($array)) {
                $md5 = md5("'{$ipaddr}','{$mac}','{$uid}','{$familysite}','{$day}','{$hour}','{$size}','{$category}'");
                $wwwUH[] = "('{$md5}','{$ipaddr}','{$mac}','{$uid}','{$familysite}','{$day}','{$hour}','{$size}','{$category}')";
                if ($GLOBALS["VERBOSE"]) {
                    echo "('{$md5}','{$ipaddr}','{$mac}','{$uid}','{$familysite}','{$day}','{$hour}','{$size}','{$category}')\n";
                }
            }
        }
    }
    dba_close($db_con);
    $TABLE_WEEK_RTTH = "WEEK_RTTH";
    $ENGINE = "MEMORY";
    if ($asmeta) {
        $TABLE_WEEK_RTTH = "{$uuid}_WEEK_RTTH";
        $ENGINE = "MYISAM";
    }
    if ($asmeta) {
        xmeta_events("DROP TABLE `{$TABLE_WEEK_RTTH}`", __FUNCTION__, __FILE__, __LINE__);
    }
    $q->QUERY_SQL("DROP TABLE `{$TABLE_WEEK_RTTH}`");
    if ($asmeta) {
        xmeta_events("CREATE TABLE `{$TABLE_WEEK_RTTH}`", __FUNCTION__, __FILE__, __LINE__);
    }
    $q->QUERY_SQL("CREATE TABLE IF NOT EXISTS `{$TABLE_WEEK_RTTH}` (\n\t\t\t`zmd5` varchar(90) NOT NULL,\n\t\t\t`familysite` varchar(128) NOT NULL,\n\t\t\t`ipaddr` varchar(50) NOT NULL DEFAULT '',\n\t\t\t`day` smallint(2) NOT NULL,\n\t\t\t`hour` smallint(2) NOT NULL,\n\t\t\t`uid` varchar(128) NOT NULL,\n\t\t\t`MAC` varchar(20) NOT NULL,\n\t\t\t`size` BIGINT UNSIGNED NOT NULL,\n\t\t\t`category` varchar(90) NOT NULL,\n\t\t\tPRIMARY KEY `zmd5` (`zmd5`),\n\t\t\tKEY `familysite` (`familysite`),\n\t\t\tKEY `ipaddr` (`ipaddr`),\n\t\t\tKEY `uid` (`uid`),\n\t\t\tKEY `category` (`category`),\n\t\t\tKEY `hour` (`hour`),\n\t\t\tKEY `day` (`day`),\n\t\t\tKEY `MAC` (`MAC`)\n\t) ENGINE={$ENGINE};");
    if (!$q->ok) {
        if ($asmeta) {
            meta_admin_mysql(1, "MySQL error", $q->mysql_error, __FILE__, __LINE__);
        }
        echo $q->mysql_error;
        return;
    }
    $q->QUERY_SQL("INSERT IGNORE INTO `{$TABLE_WEEK_RTTH}` ( `zmd5`,`ipaddr`,`MAC`,`uid`,familysite,`day`,`hour`,`size`,`category`) VALUES " . @implode(",", $wwwUH));
    if (!$q->ok) {
        if ($asmeta) {
            meta_admin_mysql(1, "MySQL error", $q->mysql_error, __FILE__, __LINE__);
        }
        echo $q->mysql_error;
        return;
    }
    if ($asmeta) {
        xmeta_events("Success parsing {$path} adding " . count($wwwUH) . " elements", __FUNCTION__, __FILE__, __LINE__);
        return;
    }
    $sock = new sockets();
    $EnableArticaMetaClient = intval($sock->GET_INFO("EnableArticaMetaClient"));
    $EnableSquidRemoteMySQL = intval($sock->GET_INFO("EnableSquidRemoteMySQL"));
    if ($EnableSquidRemoteMySQL == 1) {
        return;
    }
    if ($EnableArticaMetaClient == 0) {
        return;
    }
    $DIR_TEMP = $unix->TEMP_DIR();
    if (!$unix->compress($path, "{$DIR_TEMP}/SQUID_QUOTASIZE.gz")) {
        meta_admin_mysql(1, "Unable to compress {$path}", null, __FILE__, __LINE__);
        @unlink("{$DIR_TEMP}/SQUID_QUOTASIZE.gz");
        return;
    }
    $artica_meta = new artica_meta();
    if (!$artica_meta->SendFile("{$DIR_TEMP}/SQUID_QUOTASIZE.gz", "SQUID_QUOTASIZE")) {
        meta_admin_mysql(1, "Unable to updload {$DIR_TEMP}/SQUID_QUOTASIZE.gz", null, __FILE__, __LINE__);
    }
    @unlink("{$DIR_TEMP}/SQUID_QUOTASIZE.gz");
}
Ejemplo n.º 2
0
function snapshot()
{
    $unix = new unix();
    $password = null;
    $mysqldump = $unix->find_program("mysqldump");
    $gzip = $unix->find_program("gzip");
    $sock = new sockets();
    $rm = $unix->find_program("rm");
    $BaseWorkDir = "/usr/share/artica-postfix/snapshots/" . time();
    $tar = $unix->find_program("tar");
    @mkdir($BaseWorkDir, 0755, true);
    $nice = $unix->EXEC_NICE();
    $q = new mysql();
    $LIST_TABLES_ARTICA_BACKUP = $q->LIST_TABLES_ARTICA_BACKUP();
    if ($q->mysql_password != null) {
        $password = "******" . $unix->shellEscapeChars($q->mysql_password);
    }
    $prefix = trim("{$nice} {$mysqldump} --add-drop-table --single-transaction --force --insert-ignore -S /var/run/mysqld/mysqld.sock -u {$q->mysql_admin}{$password} artica_backup");
    $ARRAY["artica_backup_blacklists"]["ipblocks_db"] = true;
    $ARRAY["artica_backup_blacklists"]["adgroups"] = true;
    $ARRAY["artica_backup_blacklists"]["adusers"] = true;
    $ARRAY["artica_backup_blacklists"]["drupal_queue_orders"] = true;
    $ARRAY["artica_backup_blacklists"]["haarp"] = true;
    $ARRAY["artica_backup_blacklists"]["icons_db"] = true;
    $ARRAY["artica_backup_blacklists"]["setup_center"] = true;
    $ARRAY["artica_backup_blacklists"]["clamavsig"] = true;
    $ARRAY["artica_backup_blacklists"]["kav4proxy_license"] = true;
    $ARRAY["artica_backup_blacklists"]["getent_groups"] = true;
    $ARRAY["artica_backup_blacklists"]["zarafa_orphaned"] = true;
    $c = 0;
    @mkdir("{$BaseWorkDir}/artica_backup", 0755, true);
    while (list($table_name, $val) = each($LIST_TABLES_ARTICA_BACKUP)) {
        $table_name = trim($table_name);
        if (isset($ARRAY["artica_backup_blacklists"][$table_name])) {
            continue;
        }
        if (preg_match("#^activedirectory#", $table_name)) {
            continue;
        }
        if (preg_match("#^amanda#", $table_name)) {
            continue;
        }
        if ($q->COUNT_ROWS($table_name, "artica_backup") == 0) {
            $GLOBALS["TRUNCATES"]["artica_backup"][$table_name] = true;
            continue;
        }
        progress(15, "{backup} {$table_name}");
        echo "{$BaseWorkDir}/artica_backup/{$table_name}.gz\n";
        $cmd = "{$prefix} {$table_name} | {$gzip} > {$BaseWorkDir}/artica_backup/{$table_name}.gz 2>&1";
        if ($GLOBALS["VERBOSE"]) {
            echo "{$cmd}\n";
        }
        exec($cmd, $results);
        if ($unix->MYSQL_BIN_PARSE_ERROR($results)) {
            echo "Failed to create snapshot\n " . @implode("\n", $results);
            system_admin_events("Failed to create snapshot " . @implode("\n", $results), __FUNCTION__, __FILE__, __LINE__);
            shell_exec("{$rm} -rf {$BaseWorkDir}");
            return;
        }
        $GLOBALS["ARRAY_CONTENT"]["artica_backup/{$table_name}.gz"] = @filesize("{$BaseWorkDir}/artica_backup/{$table_name}.gz");
        $c++;
    }
    $squidbin = $unix->LOCATE_SQUID_BIN();
    if (is_file($squidbin)) {
        if ($unix->is_socket("/var/run/mysqld/squid-db.sock")) {
            $q = new mysql_squid_builder();
            $LIST_TABLES_ARTICA_SQUIDLOGS = $q->LIST_TABLES_ARTICA_SQUIDLOGS();
            if ($q->mysql_password != null) {
                $password = "******" . $unix->shellEscapeChars($q->mysql_password);
            }
            $prefix = trim("{$nice} {$mysqldump} --add-drop-table --single-transaction --force --insert-ignore -S /var/run/mysqld/squid-db.sock -u root squidlogs");
            @mkdir("{$BaseWorkDir}/squidlogs", 0755, true);
            $BLACKLIST["tables_day"] = true;
            $BLACKLIST["quotachecked"] = true;
            $BLACKLIST["cached_total"] = true;
            $BLACKLIST["MySQLStats"] = true;
            $BLACKLIST["phraselists_weigthed"] = true;
            $BLACKLIST["squid_reports"] = true;
            $BLACKLIST["stats_appliance_events"] = true;
            $BLACKLIST["webfilter_catprivslogs"] = true;
            $BLACKLIST["webfilters_backupeddbs"] = true;
            $BLACKLIST["webfilters_bigcatzlogs"] = true;
            $BLACKLIST["FamilyCondensed"] = true;
            $BLACKLIST["catztemp"] = true;
            $BLACKLIST["hotspot_sessions"] = true;
            $BLACKLIST["instant_updates"] = true;
            $BLACKLIST["macscan"] = true;
            $BLACKLIST["members_uid"] = true;
            $BLACKLIST["members_macip"] = true;
            $BLACKLIST["members_mac"] = true;
            $BLACKLIST["webfilters_categories_caches"] = true;
            $BLACKLIST["webfilters_thumbnails"] = true;
            $BLACKLIST["wpad_events"] = true;
            while (list($table_name, $val) = each($LIST_TABLES_ARTICA_SQUIDLOGS)) {
                if (isset($BLACKLIST[$table_name])) {
                    continue;
                }
                if (preg_match("#[0-9]+#", $table_name)) {
                    continue;
                }
                if (preg_match("#[0-9]+#", $table_name)) {
                    continue;
                }
                if (preg_match("#updateev\$#", $table_name)) {
                    continue;
                }
                if (preg_match("#^traffic#", $table_name)) {
                    continue;
                }
                if (preg_match("#^www_#", $table_name)) {
                    continue;
                }
                if (preg_match("#^visited_#", $table_name)) {
                    continue;
                }
                if (preg_match("#^youtube_#", $table_name)) {
                    continue;
                }
                if (preg_match("#^UserAgents#", $table_name)) {
                    continue;
                }
                if (preg_match("#^UserAutDB#", $table_name)) {
                    continue;
                }
                if (preg_match("#^UserAuthDays#", $table_name)) {
                    continue;
                }
                if (preg_match("#^UserAuthDaysGrouped#", $table_name)) {
                    continue;
                }
                if (preg_match("#^UserSizeRTT#", $table_name)) {
                    continue;
                }
                if (preg_match("#^UsersAgentsDB#", $table_name)) {
                    continue;
                }
                if (preg_match("#^UsersTMP#", $table_name)) {
                    continue;
                }
                if (preg_match("#^UsersToTal#", $table_name)) {
                    continue;
                }
                if (preg_match("#^allsizes#", $table_name)) {
                    continue;
                }
                if (preg_match("#^alluid#", $table_name)) {
                    continue;
                }
                if (preg_match("#^categorize#", $table_name)) {
                    continue;
                }
                if (preg_match("#^blocked_#", $table_name)) {
                    continue;
                }
                if (preg_match("#^sites\$#", $table_name)) {
                    continue;
                }
                if (preg_match("#^users\$#", $table_name)) {
                    continue;
                }
                if (preg_match("#^ufdbunlock\$#", $table_name)) {
                    continue;
                }
                if (preg_match("#^updateblks_events\$#", $table_name)) {
                    continue;
                }
                if (preg_match("#^main_websites#", $table_name)) {
                    continue;
                }
                if (preg_match("#^notcategorized#", $table_name)) {
                    continue;
                }
                if ($q->COUNT_ROWS($table_name, "squidlogs") == 0) {
                    $GLOBALS["TRUNCATES"]["squidlogs"][$table_name] = true;
                    continue;
                }
                progress(30, "{backup} {$table_name}");
                echo "{$BaseWorkDir}/squidlogs/{$table_name}.gz\n";
                $cmd = "{$prefix} {$table_name} | {$gzip} > {$BaseWorkDir}/squidlogs/{$table_name}.gz 2>&1";
                if ($GLOBALS["VERBOSE"]) {
                    echo "{$cmd}\n";
                }
                exec($cmd, $results);
                if ($unix->MYSQL_BIN_PARSE_ERROR($results)) {
                    echo "Failed to create snapshot\n " . @implode("\n", $results);
                    shell_exec("{$rm} -rf {$BaseWorkDir}");
                    system_admin_events("Failed to create snapshot " . @implode("\n", $results), __FUNCTION__, __FILE__, __LINE__);
                    return;
                }
                $GLOBALS["ARRAY_CONTENT"]["squidlogs/{$table_name}.gz"] = @filesize("{$BaseWorkDir}/squidlogs/{$table_name}.gz");
                $c++;
            }
        }
    }
    progress(35, "{backup} OpenDLAP server");
    backup_ldap($BaseWorkDir);
    progress(40, "{backup} Reverse Proxy");
    backup_nginx($BaseWorkDir);
    progress(45, "{backup} PowerDNS");
    backup_mysql_powerdns($BaseWorkDir);
    progress(50, "{backup} Artica settings");
    backup_artica_settings($BaseWorkDir);
    @file_put_contents("{$BaseWorkDir}/TRUNCATE_TABLES", serialize($GLOBALS["TRUNCATES"]));
    $temp = $unix->FILE_TEMP() . ".tar.gz";
    $tempdir = $unix->TEMP_DIR();
    chdir($BaseWorkDir);
    progress(60, "{compressing}");
    system("{$tar} -czf {$temp} *");
    shell_exec("{$rm} -rf {$BaseWorkDir}");
    echo "{$temp}\n";
    $q = new mysql();
    $q->CREATE_DATABASE("artica_snapshots");
    $sql = "CREATE TABLE IF NOT EXISTS `snapshots` (\n\t`ID` int(11) NOT NULL AUTO_INCREMENT,\n\t`zmd5` VARCHAR(90) NOT NULL,\n\t`size` INT UNSIGNED NOT NULL,\n\t`zDate` DATETIME NOT NULL,\n\t`snap` LONGBLOB NOT NULL,\n\t `content` TEXT NOT NULL,\n\t PRIMARY KEY (`ID`),\n\t UNIQUE KEY `zmd5` (`zmd5`),\n\t KEY `zDate` (`zDate`)\n\t) ENGINE=MyISAM";
    $q->QUERY_SQL($sql, 'artica_snapshots');
    progress(70, "{saving}");
    if ($GLOBALS["SEND_META"]) {
        $articameta = new artica_meta();
        $filemeta = $tempdir . "/snapshot.tar.gz";
        if (@copy($temp, $filemeta)) {
            if (!$articameta->SendFile($filemeta, "SNAPSHOT")) {
                $articameta->events("{$temp} unable to upload", __FUNCTION__, __FILE__, __LINE__);
            }
        } else {
            $articameta->events("{$temp} unable to copy {$temp} to {$filemeta}", __FUNCTION__, __FILE__, __LINE__);
        }
        @unlink($filemeta);
    }
    $zmd5 = md5_file($temp);
    $data = mysql_escape_string2(@file_get_contents($temp));
    $size = @filesize($temp);
    $final_array = mysql_escape_string2(serialize($GLOBALS["ARRAY_CONTENT"]));
    $q->QUERY_SQL("INSERT IGNORE INTO `snapshots` (zDate,snap,size,content,zmd5) \n\t\t\tVALUES (NOW(),'{$data}','{$size}','{$final_array}','{$zmd5}')", "artica_snapshots");
    if (!$q->ok) {
        echo "{$q->mysql_error}\n";
        progress(70, "{failed}");
    }
    @unlink($temp);
    shell_exec("{$rm} -rf /usr/share/artica-postfix/snapshots");
    progress(100, "{success}");
}
Ejemplo n.º 3
0
function smtp_to_meta()
{
    $unix = new unix();
    if (!isset($GLOBALS["ARTICALOGDIR"])) {
        $GLOBALS["ARTICALOGDIR"] = @file_get_contents("/etc/artica-postfix/settings/Daemons/ArticaLogDir");
        if ($GLOBALS["ARTICALOGDIR"] == null) {
            $GLOBALS["ARTICALOGDIR"] = "/var/log/artica-postfix";
        }
    }
    $dirToScan = "{$GLOBALS["ARTICALOGDIR"]}/meta_smtp_notifs";
    if (!is_dir($dirToScan)) {
        return;
    }
    $filescan = $unix->DirFiles($dirToScan);
    while (list($num, $filename) = each($filescan)) {
        $filepath = "{$dirToScan}/{$filename}";
        if (!is_file($filepath)) {
            continue;
        }
        $TimeFile = $unix->file_time_min($filepath);
        if ($TimeFile > 240) {
            @unlink($filepath);
            continue;
        }
        $artica = new artica_meta();
        events("Push notification {$filepath}");
        if (!$artica->SendFile($filepath, "SMTP_NOTIF")) {
            continue;
        }
        @unlink($filepath);
    }
}