function save()
{
    $databasename = $_GET["databasename"];
    $databasename = format_mysql_table($databasename);
    $ou = base64_decode($_GET["ou"]);
    $q = new mysql();
    $tpl = new templates();
    //CheckTableEmailingContacts
    while (list($key, $line) = each($_GET)) {
        if (preg_match("#DB_ADD_[0-9]+#", $key)) {
            $tables[] = "emailing_{$line}";
        }
    }
    if (count($tables) == 0) {
        echo $tpl->javascript_parse_text("{NODB_SELECTED}");
        return;
    }
    $q->CheckTableEmailingContacts("emailing_{$databasename}", $tables);
    if (!$q->ok) {
        echo $q->mysql_error;
        return;
    }
    $sql = "INSERT INTO emailing_db_paths (databasename,progress,finish,ou,zDate,merged)\n\tVALUES('{$databasename}','100','1','{$ou}',NOW(),'1');";
    $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        echo $q->mysql_error;
        return;
    }
}
function save()
{
    $ou = base64_decode($_GET["ou"]);
    if ($_GET["database"] == null) {
        $_GET["database"] = basename($_GET["filepath"]);
    }
    $_GET["database"] = format_mysql_table($_GET["database"]);
    $sql = "INSERT INTO emailing_db_paths (filepath,databasename,ou,zDate) VALUES('{$_GET["filepath"]}','{$_GET["database"]}','{$ou}',NOW());";
    $q = new mysql();
    $q->check_emailing_tables();
    $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        echo $q->mysql_error;
        return;
    }
    $sock = new sockets();
    $sock->getFrameWork("cmd.php?emailing-import-contacts=yes");
}
예제 #3
0
function popup_add_contact_save()
{
    $db = $_GET["database"];
    $ID = $_GET["ID"];
    $_GET["ou"] = base64_decode($_GET["ou"]);
    if (trim($_GET["db_add"]) != null) {
        $db = $_GET["db_add"];
    }
    $db = format_mysql_table($db);
    $email = $_GET["email"];
    if (preg_match("#.+?@(.+)#", $email, $re)) {
        $domain = $re[1];
    }
    $sql_add = "INSERT INTO emailing_{$db} (gender,firstname,lastname,email,domain,phone,city,cp,postaladdress)\n\tVALUES('{$_GET["gender"]}','{$_GET["firstname"]}','{$_GET["lastname"]}','{$_GET["email"]}','{$domain}',\n\t'{$_GET["phone"]}','{$_GET["city"]}','{$_GET["cp"]}','{$_GET["postaladdress"]}');\n\t";
    $sql_edit = "UPDATE emailing_{$db} SET \n\tgender='{$_GET["gender"]}',\n\tlastname='{$_GET["lastname"]}',\n\temail='{$_GET["email"]}',\n\tdomain='{$domain}',\n\tphone='{$_GET["phone"]}',\n\tcity='{$_GET["city"]}',\n\tcp='{$_GET["cp"]}',\n\tpostaladdress='{$_GET["postaladdress"]}'\n\tWHERE ID={$ID}\n\t";
    if ($ID > 0) {
        $sql = $sql_edit;
    } else {
        $sql = $sql_add;
    }
    $q = new mysql();
    writelogs("Checking emailing_{$db}", __FUNCTION__, __FILE__, __LINE__);
    if (!$q->TABLE_EXISTS("emailing_{$db}", "artica_backup")) {
        writelogs("Create emailing_{$db}", __FUNCTION__, __FILE__, __LINE__);
        $q->CheckTableEmailingContacts("emailing_{$db}");
        $sql_table = "INSERT INTO emailing_db_paths(databasename,ou,zDate,finish,progress)\n\t\tVALUES ('{$db}','{$_GET["ou"]}',NOW(),1,100);\n\t\t";
        $z = new mysql();
        $z->QUERY_SQL($sql_table, "artica_backup");
        writelogs("{$z->mysql_error}", __FUNCTION__, __FILE__, __LINE__);
        if (!$z->ok) {
            echo "\n{$z->mysql_error}\n{$sql_table}\n\n";
        }
    }
    $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        echo "\n{$q->mysql_error}\n{$sql}\n\n";
    }
}
예제 #4
0
function SAVE_FREEWEB_MYSQL()
{
    $servername = trim(strtolower($_POST["servername"]));
    if (substr($servername, 0, 1) == '.') {
        echo $servername . " FAILED\n";
        return;
    }
    $users = new usersMenus();
    $sock = new sockets();
    $FreewebsStorageDirectory = $sock->GET_INFO("FreewebsStorageDirectory");
    if (!$users->AsWebMaster) {
        return "FALSE";
    }
    $uid = $_POST["uid"];
    $mysql_database = format_mysql_table($_POST["mysql_database"]);
    $mysql_password = $_POST["mysql_password"];
    $mysql_username = $_POST["mysql_username"];
    $lvm_vg = $_POST["lvm_vg"];
    $vg_size = $_POST["vg_size"];
    $ServerIP = $_POST["ServerIP"];
    $ServerPort = 0;
    if (preg_match("#(.+?):([0-9]+)#", $ServerIP, $re)) {
        $ServerIP = $re[1];
        $ServerPort = $re[2];
    }
    if (!is_numeric($vg_size)) {
        $vg_size = 5000;
    }
    $ftpuser = $_POST["ftpuser"];
    $ftppassword = $_POST["ftppassword"];
    $useSSL = $_POST["useSSL"];
    if (!$users->PUREFTP_INSTALLED) {
        $_POST["useFTP"] = 0;
        $ftpuser = null;
        $ftppassword = null;
    }
    if ($_POST["useFTP"] == 1) {
        if ($ftpuser == null) {
            $_POST["useFTP"] = 0;
            $ftpuser = null;
            $ftppassword = null;
        }
    }
    $sql = "SELECT servername FROM freeweb WHERE servername='{$_POST["servername"]}'";
    $q = new mysql();
    $ligne = @mysql_fetch_array($q->QUERY_SQL($sql, 'artica_backup'));
    if ($ligne["servername"] != null) {
        if ($uid != null) {
            $u = new user($uid);
            $ou = $u->ou;
        }
        if (!$users->AsSystemAdministrator) {
            $ou = $_SESSION["ou"];
        }
        $sql = "UPDATE freeweb SET \n\t\t\tmysql_password='******',\n\t\t\tmysql_username='******',\n\t\t\tmysql_database='{$mysql_database}',\n\t\t\tmysql_instance_id='{$_POST["mysql_instance_id"]}',\n\t\t\tftpuser='******',\n\t\t\tftppassword='******',\n\t\t\tuseMysql='{$_POST["useMysql"]}',\n\t\t\tuseFTP='{$_POST["useFTP"]}'\n\t\t\tWHERE servername='{$servername}'\n\t\t";
    }
    writelogs("{$sql}", __FUNCTION__, __FILE__, __LINE__);
    $q = new mysql();
    $q->BuildTables();
    $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        if (preg_match("#Unknown column#i", $q->mysql_error)) {
            $q->BuildTables();
            $q->QUERY_SQL($sql, "artica_backup");
        }
    }
    if (!$q->ok) {
        echo $q->mysql_error;
        return;
    }
    $sock = new sockets();
    if ($_POST["useFTP"] == 1) {
        if ($users->PUREFTP_INSTALLED) {
            if (trim($ftpuser) != null) {
                if (trim($ftppassword) != null) {
                    $pure = new pureftpd_user();
                    if (!$pure->CreateUser($ftpuser, $ftppassword, $servername)) {
                        echo "FTP: Failed\n";
                        return;
                    }
                    $sock->getFrameWork("services.php?reload-pure-ftpd=yes");
                }
            }
        }
    }
    if ($_POST["useMysql"] == 1) {
        if (!$q->DATABASE_EXISTS($mysql_database)) {
            $q->CREATE_DATABASE("{$mysql_database}");
        }
        if (!$q->PRIVILEGES($mysql_username, $mysql_password, $mysql_database)) {
            echo "GRANT {$mysql_database} FAILED FOR {$mysql_username}\n{$q->mysql_error}";
        }
    }
    if (isset($_POST["ADD_DNS_ENTRY"])) {
        $dnsDOM = explode(".", $_POST["servername"]);
        $netbiosname = $dnsDOM[0];
        unset($dnsDOM[0]);
        $domainname = implode(".", $dnsDOM);
        include_once dirname(__FILE__) . "/ressources/class.pdns.inc";
        $pdns = new pdns($domainname);
        $pdns->EditIPName($netbiosname, $_POST["ADD_DNS_ENTRY"], "A");
    }
    if ($ligne["servername"] == null) {
        if ($_POST["force-groupware"] != null) {
            $sql = "INSERT INTO drupal_queue_orders(`ORDER`,`servername`) VALUES('INSTALL_GROUPWARE','{$servername}')";
            $q = new mysql();
            $q->QUERY_SQL($sql, "artica_backup");
            $sock->getFrameWork("freeweb.php?rebuild-vhost=yes&servername={$servername}");
        }
    }
    $sock->getFrameWork("services.php?freeweb-start=yes");
    sleep(2);
    $sock->getFrameWork("cmd.php?freeweb-restart=yes");
}
예제 #5
0
function parse_db($id)
{
    $unix = new unix();
    $pidfile = "/etc/artica-postfix/" . basename(__FILE__) . ".{$id}.pid";
    $pid = trim(@file_get_contents($pidfile));
    if ($unix->process_exists($pid)) {
        $pid = getmypid();
        echo "[{$pid}]:: Process {$pid} already running...\n";
        die;
    }
    $pid = getmypid();
    file_put_contents($pidfile, $pid);
    $sql = "SELECT * FROM emailing_db_paths WHERE ID={$id}";
    $q = new mysql();
    $ligne = mysql_fetch_array($q->QUERY_SQL($sql, "artica_backup"));
    $unzipbin = $unix->find_program("unzip");
    if ($unzipbin == null) {
        echo "[{$pid}]:: unzip tool no such file or directory...\n";
        update_status($id, "110", 1, "unzip tool no such file or directory");
        die;
    }
    $zip_path = $ligne["filepath"];
    if (!is_file($zip_path)) {
        echo "[{$pid}]:: {$zip_path} no such file or directory\n";
        update_status($id, "110", 1, "zip db no such file or directory");
        die;
    }
    $tmp_path = "/tmp/emailing-import/{$id}";
    writeevent("using {$tmp_path}", $id);
    @mkdir($tmp_path, 666, true);
    writeevent("Uncompress {$zip_path}", $id);
    echo "{$unzipbin} -o {$zip_path} -d {$tmp_path}\n";
    shell_exec("{$unzipbin} -o {$zip_path} -d {$tmp_path}");
    $files = $unix->DirFiles($tmp_path);
    if (!is_array($files)) {
        update_status($id, "110", 1, "{$zip_path} corrupted or no files stored");
        die;
    }
    while (list($filename, $file_name) = each($files)) {
        writeevent("parsing {$file_name}", $pid);
        $max = $unix->COUNT_LINES_OF_FILE("{$tmp_path}/{$file_name}");
        writeevent("parsing {$file_name} {$max} entries", $pid);
        $handle = @fopen("{$tmp_path}/{$file_name}", "r");
        $ligne["databasename"] = format_mysql_table($ligne["databasename"]);
        $q = new mysql();
        $q->CheckTableEmailingContacts("emailing_{$ligne["databasename"]}");
        $sql = "INSERT INTO emailing_{$ligne["databasename"]} (`gender`,`firstname`, `lastname`,`email`,`phone`,`city`,`cp`,`postaladdress`,`domain`) VALUES";
        if ($handle) {
            while (!feof($handle)) {
                $tw = $tw + 1;
                $count = $count + 1;
                unset($re);
                $buffer = fgets($handle, 4096);
                if (trim($buffer) == null) {
                    continue;
                }
                $buffer = str_replace('"', "", $buffer);
                $buffer = str_replace(';', ",", $buffer);
                $lines = explode(",", addslashes($buffer));
                if (!is_array($lines)) {
                    if (preg_match("#.+?@.+#", $buffer)) {
                        for ($i = 0; $i < 8; $i++) {
                            $lines[$i] = "";
                        }
                        $lines[3] = trim($buffer);
                    }
                }
                if (count($lines) < 2) {
                    if (preg_match("#.+?@.+#", $buffer)) {
                        for ($i = 0; $i < 8; $i++) {
                            $lines[$i] = "";
                        }
                        $lines[3] = trim($buffer);
                    }
                }
                $lines[3] = str_replace(";", ".", $lines[3]);
                $lines[3] = str_replace("?", ".", $lines[3]);
                $lines[3] = str_replace("@.", "@", $lines[3]);
                $lines[3] = str_replace('^', '@', $lines[3]);
                $lines[3] = str_replace(',', '.', $lines[3]);
                if (trim($lines[3]) == null) {
                    writeevent("failed 3:[{$buffer}] [" . __LINE__ . "]", $pid);
                    $GLOBALS["FAILED_CONTACTS"] = $GLOBALS["FAILED_CONTACTS"] + 1;
                    unset($lines);
                    continue;
                }
                if (!preg_match("#(.+?)@(.+?)\\.(.+)#", $lines[3], $re)) {
                    writeevent("failed 3:{$lines[3]} bad email address [" . __LINE__ . "]", $pid);
                    $GLOBALS["FAILED_CONTACTS"] = $GLOBALS["FAILED_CONTACTS"] + 1;
                    unset($lines);
                    continue;
                }
                $domain = $re[2];
                if (substr($domain, strlen($domain) - 1, 1) == '.') {
                    $domain = substr($domain, 0, strlen($domain) - 1);
                }
                if (preg_match("#^\\..+#", $domain)) {
                    writeevent("failed 3:{$lines[3]} bad domain {$domain} [" . __LINE__ . "]", $pid);
                    $GLOBALS["FAILED_CONTACTS"] = $GLOBALS["FAILED_CONTACTS"] + 1;
                    unset($lines);
                    continue;
                }
                if ($GLOBALS["EMAILS"][$lines[3]]) {
                    writeevent("failed 3:{$lines[3]} already exists [" . __LINE__ . "]", $pid);
                    $GLOBALS["FAILED_CONTACTS"] = $GLOBALS["FAILED_CONTACTS"] + 1;
                    continue;
                }
                if (isBlockedMail($lines[3])) {
                    writeevent("failed 3:{$lines[3]} is blacklisted [" . __LINE__ . "]", $pid);
                    $GLOBALS["FAILED_CONTACTS"] = $GLOBALS["FAILED_CONTACTS"] + 1;
                    continue;
                }
                $sqla[] = "('{$lines[0]}',\n\t\t\t\t'{$lines[1]}',\n\t\t\t\t'{$lines[2]}',\n\t\t\t\t'{$lines[3]}',\n\t\t\t\t'{$lines[4]}',\n\t\t\t\t'{$lines[5]}',\n\t\t\t\t'{$lines[6]}',\n\t\t\t\t'{$lines[7]}','{$domain}')";
                $GLOBALS["SUCCESS_CONTACTS"] = $GLOBALS["SUCCESS_CONTACTS"] + 1;
                $GLOBALS["EMAILS"][$lines[3]] = true;
                if (count($GLOBALS["EMAILS"]) > 10000) {
                    $GLOBALS["EMAILS"] = array();
                }
                unset($lines);
                if ($tw > 100) {
                    $fullsql = $sql . "\n" . @implode(",", $sqla);
                    $q = new mysql();
                    $q->QUERY_SQL($fullsql, "artica_backup");
                    if (!$q->ok) {
                        writeevent($id, "{$q->mysql_error}\n{$fullsql}");
                    }
                    unset($sqla);
                    $purc = $count / $max;
                    $purc = $purc * 100;
                    $purc = round($purc, 0);
                    update_status($id, $purc, 0);
                    $tw = 0;
                }
            }
            fclose($handle);
            if (is_array($sqla)) {
                $fullsql = $sql . "\n" . @implode(",", $sqla);
                $q->QUERY_SQL($fullsql, "artica_backup");
                if (!$q->ok) {
                    writeevent($id, "{$q->mysql_error}\n{$fullsql}");
                }
            }
        }
    }
    if ($GLOBALS["SUCCESS_CONTACTS"] > 0) {
        writeevent("Failed.:{$GLOBALS["FAILED_CONTACTS"]}", $id);
        writeevent("Success:{$GLOBALS["SUCCESS_CONTACTS"]}", $id);
        update_status($id, 100, 1, null);
    } else {
        update_status($id, 110, 0, null);
    }
}
예제 #6
0
function Save()
{
    $servername = trim(strtolower($_GET["servername"]));
    if (substr($servername, 0, 1) == '.') {
        echo $servername . " FAILED\n";
        return;
    }
    $users = new usersMenus();
    $sock = new sockets();
    $tpl = new templates();
    $FreewebsStorageDirectory = $sock->GET_INFO("FreewebsStorageDirectory");
    if (!$users->AsWebMaster) {
        return "FALSE";
    }
    $uid = $_GET["uid"];
    $mysql_database = format_mysql_table($_GET["mysql_database"]);
    $mysql_password = $_GET["mysql_password"];
    $mysql_username = $_GET["mysql_username"];
    $lvm_vg = $_GET["lvm_vg"];
    $vg_size = $_GET["vg_size"];
    $ServerIP = $_GET["ServerIP"];
    $ServerPort = 0;
    if (preg_match("#(.+?):([0-9]+)#", $ServerIP, $re)) {
        $ServerIP = $re[1];
        $ServerPort = $re[2];
    }
    if (!is_numeric($vg_size)) {
        $vg_size = 5000;
    }
    $ftpuser = $_GET["ftpuser"];
    $ftppassword = $_GET["ftppassword"];
    $useSSL = $_GET["useSSL"];
    if (!$users->PUREFTP_INSTALLED) {
        $_GET["useFTP"] = 0;
        $ftpuser = null;
        $ftppassword = null;
    }
    $sql = "SELECT servername FROM freeweb WHERE servername='{$_GET["servername"]}'";
    $q = new mysql();
    $ligne = @mysql_fetch_array($q->QUERY_SQL($sql, 'artica_backup'));
    if ($ligne["servername"] != null) {
        if ($uid != null) {
            $u = new user($uid);
            $ou = $u->ou;
        }
        if (!$users->AsSystemAdministrator) {
            $ou = $_SESSION["ou"];
        }
        $sql = "UPDATE freeweb SET \n\t\t\tmysql_password='******',\n\t\t\tmysql_username='******',\n\t\t\tmysql_database='{$mysql_database}',\n\t\t\tmysql_instance_id='{$_GET["mysql_instance_id"]}',\n\t\t\tftpuser='******',\n\t\t\tftppassword='******',\n\t\t\tuid='{$uid}',\n\t\t\tgpid='{$_GET["gpid"]}',\n\t\t\tuseMysql='{$_GET["useMysql"]}',\n\t\t\tuseFTP='{$_GET["useFTP"]}',\n\t\t\tlvm_vg='{$_GET["lvm_vg"]}',\n\t\t\tlvm_size='{$_GET["vg_size"]}',\n\t\t\tUseLoopDisk='{$_GET["UseLoopDisk"]}',\n\t\t\tLoopMounts='{$_GET["LoopMounts"]}',\n\t\t\twww_dir='{$_GET["www_dir"]}',\n\t\t\tUseReverseProxy='{$_GET["UseReverseProxy"]}',\n\t\t\tProxyPass='******',\n\t\t\tuseSSL='{$useSSL}',\n\t\t\tServerPort='{$ServerPort}',\n\t\t\tou='{$ou}',\n\t\t\tForwarder='{$_GET["Forwarder"]}',\n\t\t\tForwardTo='{$_GET["ForwardTo"]}',\n\t\t\tServerIP='{$ServerIP}'\n\t\t\tWHERE servername='{$servername}'\n\t\t";
    } else {
        $ApacheServerName = $sock->GET_INFO("ApacheServerName");
        if ($ApacheServerName == null) {
            $ApacheServerName = $users->fqdn;
        }
        if ($uid != null) {
            $u = new user($uid);
            $ou = $u->ou;
        }
        if ($ou != null) {
            if ($FreewebsStorageDirectory != null) {
                $www_dir = "{$FreewebsStorageDirectory}/{$servername}";
            }
        }
        $sock = new sockets();
        $servername = str_replace('..', '.', $servername);
        $servername = str_replace('/', '.', $servername);
        $servername = str_replace('\\', '.', $servername);
        $servername = str_replace(' ', '.', $servername);
        $servername = str_replace('$', '.', $servername);
        $servername = str_replace('#', '.', $servername);
        $servername = str_replace('%', '.', $servername);
        $servername = str_replace('*', '.', $servername);
        if (substr($servername, strlen($servername) - 1, 1) == '.') {
            $servername = substr($servername, 0, strlen($servername) - 1);
        }
        if (substr($servername, 0, 1) == '.') {
            $servername = substr($servername, 1, strlen($servername));
        }
        if ($servername == $ApacheServerName) {
            echo $tpl->javascript_parse_text("{virtual_hostname_cannot_same_main_hostname}", 1);
            return;
        }
        if ($_GET["force-groupware"] != null) {
            $groupware_field = ",groupware";
            $groupware_value = ",'{$_GET["force-groupware"]}'";
        }
        if ($_GET["www_dir"] != null) {
            $www_dir_field = ",www_dir";
            $www_dir_value = ",'{$_GET["www_dir"]}'";
        }
        $sock->getFrameWork("freeweb.php?force-resolv=yes");
        $sql = "INSERT INTO freeweb (mysql_password,mysql_username,ftpuser,ftppassword,useSSL,servername,mysql_database,\n\t\tuid,gpid,useMysql,useFTP,lvm_vg,lvm_size,UseLoopDisk,LoopMounts,ou,domainname,www_dir,ServerPort,UseReverseProxy,\n\t\tProxyPass,Forwarder,ForwardTo,ForceInstanceZarafaID,mysql_instance_id,ServerIP{$groupware_field}{$www_dir_field})\n\t\tVALUES('{$mysql_password}','{$mysql_username}','{$ftpuser}','{$ftppassword}','{$useSSL}','{$servername}','{$mysql_database}',\n\t\t'{$uid}','{$_GET["gpid"]}','{$_GET["useMysql"]}',\n\t\t'{$_GET["useFTP"]}','{$_GET["lvm_vg"]}','{$_GET["vg_size"]}','{$_GET["UseLoopDisk"]}','{$_GET["LoopMounts"]}','{$ou}',\n\t\t'{$_GET["domainname"]}','{$FreewebsStorageDirectory}','{$ServerPort}','{$_GET["UseReverseProxy"]}','{$_GET["ProxyPass"]}',\n\t\t'{$_GET["Forwarder"]}','{$_GET["ForwardTo"]}','{$_GET["ForceInstanceZarafaID"]}','{$_GET["mysql_instance_id"]}','{$ServerIP}'{$groupware_value}{$www_dir_value}\n\t\t)";
    }
    writelogs("{$sql}", __FUNCTION__, __FILE__, __LINE__);
    $q = new mysql();
    $q->BuildTables();
    $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        echo $q->mysql_error;
        return;
    }
    $sock = new sockets();
    $sock->getFrameWork("system.php?dns-linker=yes");
    if ($_GET["useFTP"] == 1) {
        if ($users->PUREFTP_INSTALLED) {
            if (trim($ftpuser) != null) {
                if (trim($ftppassword) != null) {
                    $pure = new pureftpd_user();
                    if (!$pure->CreateUser($ftpuser, $ftppassword, $servername)) {
                        echo "FTP: Failed\n";
                        return;
                    }
                    $sock->getFrameWork("services.php?reload-pure-ftpd=yes");
                }
            }
        }
    }
    if ($_GET["useMysql"] == 1) {
        if (!$q->DATABASE_EXISTS($mysql_database)) {
            $q->CREATE_DATABASE("{$mysql_database}");
        }
        if (!$q->PRIVILEGES($mysql_username, $mysql_password, $mysql_database)) {
            echo "GRANT {$mysql_database} FAILED FOR {$mysql_username}\n{$q->mysql_error}";
        }
    }
    if (isset($_GET["ADD_DNS_ENTRY"])) {
        $dnsDOM = explode(".", $_GET["servername"]);
        $netbiosname = $dnsDOM[0];
        unset($dnsDOM[0]);
        $domainname = implode(".", $dnsDOM);
        include_once dirname(__FILE__) . "/ressources/class.pdns.inc";
        $pdns = new pdns($domainname);
        $pdns->EditIPName($netbiosname, $_GET["ADD_DNS_ENTRY"], "A");
    }
    if ($ligne["servername"] == null) {
        if ($_GET["force-groupware"] != null) {
            $sql = "INSERT INTO drupal_queue_orders(`ORDER`,`servername`) VALUES('INSTALL_GROUPWARE','{$servername}')";
            $q = new mysql();
            $q->QUERY_SQL($sql, "artica_backup");
            $sock->getFrameWork("freeweb.php?rebuild-vhost=yes&servername={$servername}");
        }
    }
    $sock->getFrameWork("services.php?freeweb-start=yes");
    sleep(2);
    $sock->getFrameWork("cmd.php?freeweb-restart=yes");
}
예제 #7
0
function Save()
{
    $servername = trim(strtolower($_GET["servername"]));
    if (substr($servername, 0, 1) == '.') {
        echo $servername . " FAILED\n";
        return;
    }
    $users = new usersMenus();
    $sock = new sockets();
    $FreewebsStorageDirectory = $sock->GET_INFO("FreewebsStorageDirectory");
    if (!$users->AsWebMaster) {
        return "FALSE";
    }
    $uid = $_GET["uid"];
    $mysql_database = format_mysql_table($_GET["mysql_database"]);
    $mysql_password = $_GET["mysql_password"];
    $mysql_username = $_GET["mysql_username"];
    $lvm_vg = $_GET["lvm_vg"];
    $vg_size = $_GET["vg_size"];
    $ServerPort = $_GET["ServerPort"];
    if (!is_numeric($ServerPort)) {
        $ServerPort = 0;
    }
    if ($_GET["UseDefaultPort"] == 1) {
        $ServerPort = 0;
    }
    if (!is_numeric($vg_size)) {
        $vg_size = 5000;
    }
    $ftpuser = $_GET["ftpuser"];
    $ftppassword = $_GET["ftppassword"];
    $useSSL = $_GET["useSSL"];
    if (!$users->PUREFTP_INSTALLED) {
        $_GET["useFTP"] = 0;
        $ftpuser = null;
        $ftppassword = null;
    }
    $sql = "SELECT servername FROM freeweb WHERE servername='{$_GET["servername"]}'";
    $q = new mysql();
    $ligne = @mysql_fetch_array($q->QUERY_SQL($sql, 'artica_backup'));
    if ($ligne["servername"] != null) {
        if ($uid != null) {
            $u = new user($uid);
            $ou = $u->ou;
        }
        if (!$users->AsSystemAdministrator) {
            $ou = $_SESSION["ou"];
        }
        $sql = "UPDATE freeweb SET \n\t\t\tmysql_password='******',\n\t\t\tmysql_username='******',\n\t\t\tmysql_database='{$mysql_database}',\n\t\t\tftpuser='******',\n\t\t\tftppassword='******',\n\t\t\tuid='{$uid}',\n\t\t\tuseMysql='{$_GET["useMysql"]}',\n\t\t\tuseFTP='{$_GET["useFTP"]}',\n\t\t\tlvm_vg='{$_GET["lvm_vg"]}',\n\t\t\tlvm_size='{$_GET["vg_size"]}',\n\t\t\tUseLoopDisk='{$_GET["UseLoopDisk"]}',\n\t\t\tLoopMounts='{$_GET["LoopMounts"]}',\n\t\t\tUseReverseProxy='{$_GET["UseReverseProxy"]}',\n\t\t\tProxyPass='******',\n\t\t\tuseSSL='{$useSSL}',\n\t\t\tServerPort='{$ServerPort}',\n\t\t\tou='{$ou}',\n\t\t\tForwarder='{$_GET["Forwarder"]}',\n\t\t\tForwardTo='{$_GET["ForwardTo"]}'\n\t\t\t\n\t\t\tWHERE servername='{$servername}'\n\t\t";
    } else {
        if ($uid != null) {
            $u = new user($uid);
            $ou = $u->ou;
        }
        if ($ou != null) {
            if ($FreewebsStorageDirectory != null) {
                $www_dir = "{$FreewebsStorageDirectory}/{$servername}";
            }
        }
        $sock = new sockets();
        $servername = str_replace('..', '.', $servername);
        $servername = str_replace('/', '.', $servername);
        $servername = str_replace('\\', '.', $servername);
        $servername = str_replace(' ', '.', $servername);
        $servername = str_replace('$', '.', $servername);
        $servername = str_replace('#', '.', $servername);
        $servername = str_replace('%', '.', $servername);
        $servername = str_replace('*', '.', $servername);
        if (substr($servername, strlen($servername) - 1, 1) == '.') {
            $servername = substr($servername, 0, strlen($servername) - 1);
        }
        if (substr($servername, 0, 1) == '.') {
            $servername = substr($servername, 1, strlen($servername));
        }
        $sock->getFrameWork("freeweb.php?force-resolv=yes");
        $sql = "INSERT INTO freeweb (mysql_password,mysql_username,ftpuser,ftppassword,useSSL,servername,mysql_database,\n\t\tuid,useMysql,useFTP,lvm_vg,lvm_size,UseLoopDisk,LoopMounts,ou,domainname,www_dir,ServerPort,UseReverseProxy,ProxyPass,Forwarder,ForwardTo)\n\t\tVALUES('{$mysql_password}','{$mysql_username}','{$ftpuser}','{$ftppassword}','{$useSSL}','{$servername}','{$mysql_database}',\n\t\t'{$uid}','{$_GET["useMysql"]}',\n\t\t'{$_GET["useFTP"]}','{$_GET["lvm_vg"]}','{$_GET["vg_size"]}','{$_GET["UseLoopDisk"]}','{$_GET["LoopMounts"]}','{$ou}',\n\t\t'{$_GET["domainname"]}','{$FreewebsStorageDirectory}','{$ServerPort}','{$_GET["UseReverseProxy"]}','{$_GET["ProxyPass"]}',\n\t\t'{$_GET["Forwarder"]}','{$_GET["ForwardTo"]}'\n\t\t)";
    }
    writelogs("{$sql}", __FUNCTION__, __FILE__, __LINE__);
    $q = new mysql();
    $q->BuildTables();
    $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        echo $q->mysql_error;
        return;
    }
    $sock = new sockets();
    if ($_GET["useFTP"] == 1) {
        if ($users->PUREFTP_INSTALLED) {
            if (trim($ftpuser) != null) {
                if (trim($ftppassword) != null) {
                    $pure = new pureftpd_user();
                    if (!$pure->CreateUser($ftpuser, $ftppassword, $servername)) {
                        echo "FTP: Failed\n";
                        return;
                    }
                    $sock->getFrameWork("services.php?reload-pure-ftpd=yes");
                }
            }
        }
    }
    if ($_GET["useMysql"] == 1) {
        if (!$q->DATABASE_EXISTS($mysql_database)) {
            $q->CREATE_DATABASE("{$mysql_database}");
        }
        if (!$q->PRIVILEGES($mysql_username, $mysql_password, $mysql_database)) {
            echo "GRANT {$mysql_database} FAILED FOR {$mysql_username}\n{$q->mysql_error}";
        }
    }
    if (isset($_GET["ADD_DNS_ENTRY"])) {
        $dnsDOM = explode(".", $_GET["servername"]);
        $netbiosname = $dnsDOM[0];
        unset($dnsDOM[0]);
        $domainname = implode(".", $dnsDOM);
        include_once dirname(__FILE__) . "/ressources/class.pdns.inc";
        $pdns = new pdns($domainname);
        $pdns->EditIPName($netbiosname, $_GET["ADD_DNS_ENTRY"], "A");
    }
    $sock->getFrameWork("cmd.php?freeweb-restart=yes");
}
예제 #8
0
function construct_queue($ID, $ou)
{
    $q = new mysql();
    $GLOBALS["campain_linker_id"] = $ID;
    $q->QUERY_SQL("UPDATE `emailing_campain_linker` SET `queue_builder_pourc`=0 `locked`=1 WHERE `ID`={$GLOBALS["campain_linker_id"]}", "artica_backup");
    $sql = "SELECT * FROM emailing_campain_linker WHERE ID='{$ID}'";
    $ligne = mysql_fetch_array($q->QUERY_SQL($sql, "artica_backup"));
    $unix = new unix();
    $email_relay_submit = $unix->find_program("emailrelay-submit");
    $GLOBALS["SartON"] = time();
    if ($email_relay_submit == null) {
        event(__FUNCTION__, __LINE__, "Unable to stat {$email_relay_submit}");
        mass_mailing_finish(0);
        return;
    }
    $parameters = unserialize(base64_decode($ligne["parameters"]));
    $template_id = $ligne["template_id"];
    $database_id = $ligne["database_id"];
    $GLOBALS["template_id"] = $template_id;
    $GLOBALS["database_id"] = $database_id;
    $simulation = $parameters["simulation"];
    $GLOBALS["start_date_task"] = date('Y-m-d H:i:s');
    $simulation_recipipent = $parameters["recipient"];
    $database_name = emailing_get_database_name($database_id);
    event(__FUNCTION__, __LINE__, "database name={$database_name}");
    $database_name = format_mysql_table($database_name);
    $template_name = emailing_get_template_name($template_id);
    $template_parameters = emailing_get_template_parameters($template_id);
    event(__FUNCTION__, __LINE__, "Opening {$ID} {$ligne["name"]} campaign template {$template_name} N.{$template_id}, database {$database_name} N.{$database_id}");
    event(__FUNCTION__, __LINE__, "simulation={$simulation} =>{$simulation_recipipent}");
    @mkdir("/tmp/emailing/{$ID}", 0666, true);
    if (is_array($template_parameters["ATTACHS"])) {
        while (list($filename, $attch_ID) = each($template_parameters["ATTACHS"])) {
            event(__FUNCTION__, __LINE__, "saving /tmp/emailing/{$ID}/{$filename}");
            emailing_save_attachment($attch_ID, "/tmp/emailing/{$ID}/{$filename}");
        }
        reset($template_parameters["ATTACHS"]);
    }
    $advanced_options = unserialize(base64_decode($template_parameters["advopts"]));
    if ($advanced_options["From_name"] == null) {
        $advanced_options["From_name"] = $advanced_options["From"];
    }
    if ($advanced_options["From"] == null) {
        event(__FUNCTION__, __LINE__, "From field is null, aborting");
        mass_mailing_finish(0);
        return false;
    }
    $sql = "SELECT ID,smtpserver,parameters FROM emailing_mailers WHERE ou='{$ou}'";
    $results = $q->QUERY_SQL($sql, "artica_backup");
    while ($ligne = @mysql_fetch_array($results, MYSQL_ASSOC)) {
        $datas = unserialize(base64_decode($ligne["parameters"]));
        $smtp_servs[] = $ligne["ID"];
    }
    if (!is_array($smtp_servs)) {
        event(__FUNCTION__, __LINE__, "Unable to define SMTP servers");
        mass_mailing_finish(0);
        return false;
    }
    $sql = "SELECT * FROM emailing_{$database_name}";
    $results = $q->QUERY_SQL($sql, "artica_backup");
    $t = 0;
    $max = mysql_num_rows($results);
    event(__FUNCTION__, __LINE__, "{$max} contacts in emailing_{$database_name} table");
    $smtp_servs_count = 0;
    $smtp_servs_max = count($smtp_servs) - 1;
    $messages_number = 0;
    event(__FUNCTION__, __LINE__, $smtp_servs_max + 1 . " SMTP servers");
    while ($ligne = @mysql_fetch_array($results, MYSQL_ASSOC)) {
        $final_count = $final_count + 1;
        $contact_id = $ligne["ID"];
        $gender = $ligne["gender"];
        $firstname = $ligne["firstname"];
        $lastname = $ligne["lastname"];
        $email = $ligne["email"];
        if (isBlockedMail($email)) {
            continue;
        }
        $phone = $ligne["phone"];
        $city = $ligne["city"];
        $cp = $ligne["cp"];
        $postaladdress = $ligne["postaladdress"];
        if ($simulation == 1) {
            $email = $simulation_recipipent;
        }
        $unikey = md5("{$template_id}{$database_id}{$contact_id}");
        $htmldatas = $template_parameters["template_datas"];
        $htmldatas = str_replace("%gender%", $gender, $htmldatas);
        $htmldatas = str_replace("%lastname%", $lastname, $htmldatas);
        $htmldatas = str_replace("%firstname%", $firstname, $htmldatas);
        $htmldatas = str_replace("%email%", $email, $htmldatas);
        $htmldatas = str_replace("%phone%", $phone, $htmldatas);
        $htmldatas = str_replace("%city%", $city, $htmldatas);
        $htmldatas = str_replace("%cp%", $cp, $htmldatas);
        $htmldatas = str_replace("%postaladdress%", $postaladdress, $htmldatas);
        $mailer = new PHPMailer();
        $mailer->AddAddress($email, "{$firstname} {$lastname}");
        $mailer->From = $advanced_options["From"];
        $mailer->FromName = $advanced_options["From_name"];
        $mailer->Subject = $template_parameters["subject"];
        $mailer->Body = $htmldatas;
        $mailer->IsHTML(true);
        $mailer->Mailer = 'smtp';
        if ($advanced_options["Reply-to"] != null) {
            $mailer->AddReplyTo($advanced_options["Reply-to"]);
        }
        if ($advanced_options["Disposition-Notification-To"] != null) {
            $mailer->AddCustomHeader("Disposition-Notification-To: {$advanced_options["Disposition-Notification-To"]}");
        }
        if ($advanced_options["Return-Path"] != null) {
            $mailer->AddCustomHeader("Return-Path: {$advanced_options["Return-Path"]}");
        }
        if ($advanced_options["X-Mailer"] != null) {
            $mailer->AddCustomHeader("X-Mailer: {$advanced_options["X-Mailer"]}");
        }
        if (is_array($template_parameters["ATTACHS"])) {
            while (list($filename, $attch_ID) = each($template_parameters["ATTACHS"])) {
                $mailer->AddAttachment("/tmp/emailing/{$ID}/{$filename}", $filename);
            }
            reset($template_parameters["ATTACHS"]);
        }
        $queue_ID = "/var/spool/artica-emailing/queues/{$smtp_servs[$smtp_servs_count]}";
        $smtp_servs_count = $smtp_servs_count + 1;
        if ($smtp_servs_count > $smtp_servs_max) {
            $smtp_servs_count = 0;
        }
        $maildata = $mailer->Send(true);
        // send mail into queue
        $mail_from = "{$advanced_options["From"]}";
        $recipient = $email;
        $filetemp = $unix->FILE_TEMP() . "{$contact_id}.msg";
        @file_put_contents($filetemp, $maildata);
        $GLOBALS["massmailing_size"] = $GLOBALS["massmailing_size"] + filesize($filetemp);
        $cmd = "{$email_relay_submit} --spool-dir={$queue_ID} --from={$mail_from} {$recipient} < {$filetemp}";
        if ($GLOBALS["VERBOSE"]) {
            event(__FUNCTION__, __LINE__, "{$cmd}");
        }
        shell_exec("{$email_relay_submit} --spool-dir={$queue_ID} --from={$mail_from} {$recipient} < {$filetemp}");
        if ($GLOBALS["VERBOSE"]) {
            event(__FUNCTION__, __LINE__, @implode("\n", $results));
        }
        @unlink($filetemp);
        $maildata = null;
        $mailer = nil;
        $GLOBALS["messages_number"] = $GLOBALS["messages_number"] + 1;
        $t = $t + 1;
        if ($t > 200) {
            $pourcentage = round($final_count / $max * 100, 0);
            echo "{$pourcentage}% {$final_count}/{$max}\n";
            $q = new mysql();
            event(__FUNCTION__, __LINE__, "{$pourcentage}%");
            $q->QUERY_SQL("UPDATE emailing_campain_linker SET queue_builder_pourc={$pourcentage} WHERE ID={$ID}", "artica_backup");
            $t = 0;
        }
    }
    mass_mailing_finish(1);
}
예제 #9
0
function Save(){
	
	$servername=trim(strtolower($_GET["servername"]));
	if(substr($servername, 0,1)=='.'){echo $servername. " FAILED\n";return;}
	$users=new usersMenus();
	$sock=new sockets();
	$FreewebsStorageDirectory=$sock->GET_INFO("FreewebsStorageDirectory");
	
	if(!$users->AsWebMaster){return "FALSE";}
	$uid=$_GET["uid"];
	$mysql_database=format_mysql_table($_GET["mysql_database"]);
	$mysql_password=$_GET["mysql_password"];
	$mysql_username=$_GET["mysql_username"];
	$lvm_vg=$_GET["lvm_vg"];
	$vg_size=$_GET["vg_size"];
	$ServerPort=$_GET["ServerPort"];
	if(!is_numeric($ServerPort)){$ServerPort=0;}
	if($_GET["UseDefaultPort"]==1){$ServerPort=0;}

	if(!is_numeric($vg_size)){$vg_size=5000;}
	$ftpuser=$_GET["ftpuser"];
	$ftppassword=$_GET["ftppassword"];
	$useSSL=$_GET["useSSL"];
	
	if(!$users->PUREFTP_INSTALLED){
		$_GET["useFTP"]=0;
		$ftpuser=null;
		$ftppassword=null;
	}	
	
	
	
	$sql="SELECT servername FROM freeweb WHERE servername='{$_GET["servername"]}'";
	$q=new mysql();

	$ligne=@mysql_fetch_array($q->QUERY_SQL($sql,'artica_backup'));	
	if($ligne["servername"]<>null){
		if($uid<>null){$u=new user($uid);$ou=$u->ou;}
		if(!$users->AsSystemAdministrator){$ou=$_SESSION["ou"];}
		
		$sql="UPDATE freeweb SET 
			mysql_password='******',
			mysql_username='******',
			ftpuser='******',
			ftppassword='******',
			uid='$uid',
			useMysql='{$_GET["useMysql"]}',
			useFTP='{$_GET["useFTP"]}',
			lvm_vg='{$_GET["lvm_vg"]}',
			lvm_size='{$_GET["vg_size"]}',
			UseLoopDisk='{$_GET["UseLoopDisk"]}',
			LoopMounts='{$_GET["LoopMounts"]}',
			UseReverseProxy='{$_GET["UseReverseProxy"]}',
			ProxyPass='******',
			useSSL='$useSSL',
			ServerPort='$ServerPort',
			ou='$ou',
			Forwarder='{$_GET["Forwarder"]}',
			ForwardTo='{$_GET["ForwardTo"]}'
			
			WHERE servername='$servername'
		";
	}else{
		if($uid<>null){$u=new user($uid);$ou=$u->ou;}
		if($ou<>null){if($FreewebsStorageDirectory<>null){$www_dir="$FreewebsStorageDirectory/$servername";}}
		$sock=new sockets();
		$sock->getFrameWork("freeweb.php?force-resolv=yes");
		$sql="INSERT INTO freeweb (mysql_password,mysql_username,ftpuser,ftppassword,useSSL,servername,mysql_database,
		uid,useMysql,useFTP,lvm_vg,lvm_size,UseLoopDisk,LoopMounts,ou,domainname,www_dir,ServerPort,UseReverseProxy,ProxyPass,Forwarder,ForwardTo)
		VALUES('$mysql_password','$mysql_username','$ftpuser','$ftppassword','$useSSL','$servername','$mysql_database',
		'$uid','{$_GET["useMysql"]}',
		'{$_GET["useFTP"]}','{$_GET["lvm_vg"]}','{$_GET["vg_size"]}','{$_GET["UseLoopDisk"]}','{$_GET["LoopMounts"]}','$ou',
		'{$_GET["domainname"]}','$FreewebsStorageDirectory','$ServerPort','{$_GET["UseReverseProxy"]}','{$_GET["ProxyPass"]}',
		'{$_GET["Forwarder"]}','{$_GET["ForwardTo"]}'
		)";
	}
	$q=new mysql();
	$q->BuildTables();
	$q->QUERY_SQL($sql,"artica_backup");
	if(!$q->ok){echo $q->mysql_error;return;}
	$sock=new sockets();
	
	if($_GET["useFTP"]==1){
		if($users->PUREFTP_INSTALLED){
			$pure=new pureftpd_user();
			if(!$pure->CreateUser($ftpuser,$ftppassword,$servername)){
				echo "FTP: Failed\n";
				return;
			}
		}
	}
	
	if($_GET["useMysql"]==1){
		if(!$q->DATABASE_EXISTS($mysql_database)){$q->CREATE_DATABASE("$mysql_database");}
		if(!$q->PRIVILEGES($mysql_username,$mysql_password,$mysql_database)){
			echo "GRANT $mysql_database FAILED FOR $mysql_username\n$q->mysql_error";
		}
	}
	

	$sock->getFrameWork("cmd.php?freeweb-restart=yes");
	
}