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