function SAVE_FREEWEB_MAIN()
{
    $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"];
    $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];
    }
    $EnableFreeWeb = $sock->GET_INFO("EnableFreeWeb");
    if (!is_numeric($EnableFreeWeb)) {
        $EnableFreeWeb = 0;
    }
    if ($EnableFreeWeb == 0) {
        $sock->SET_INFO("EnableFreeWeb", 1);
        $sock->SET_INFO("EnableApacheSystem", 1);
        $sock->getFrameWork("freeweb.php?changeinit-off=yes");
        $sock->getFrameWork("cmd.php?restart-artica-status=yes");
        $sock->getFrameWork("cmd.php?freeweb-restart=yes");
    }
    if (!is_numeric($vg_size)) {
        $vg_size = 5000;
    }
    $useSSL = $_POST["useSSL"];
    if ($_POST["domainname"] == null) {
        $TDOM = explode(".", $_POST["domainname"]);
        unset($TDOM[0]);
        $_POST["domainname"] = @implode(".", $TDOM);
    }
    if (!isset($_POST["WebCopyID"])) {
        $_POST["WebCopyID"] = 0;
    }
    $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"];
        }
        if (isset($_POST["www_dir"])) {
            $www_dir_field = "www_dir='{$_POST["www_dir"]}',";
        }
        $sql = "UPDATE freeweb SET \n\t\t\tuid='{$uid}',\n\t\t\tgpid='{$_POST["gpid"]}',\n\t\t\tlvm_vg='{$_POST["lvm_vg"]}',\n\t\t\tlvm_size='{$_POST["vg_size"]}',\n\t\t\tUseLoopDisk='{$_POST["UseLoopDisk"]}',\n\t\t\tLoopMounts='{$_POST["LoopMounts"]}',\n\t\t\tUseReverseProxy='{$_POST["UseReverseProxy"]}',\n\t\t\tProxyPass='******',\n\t\t\tuseSSL='{$useSSL}',\n\t\t\tServerPort='{$ServerPort}',\n\t\t\t{$www_dir_field}\n\t\t\tou='{$ou}',\n\t\t\tForwarder='{$_POST["Forwarder"]}',\n\t\t\tForwardTo='{$_POST["ForwardTo"]}',\n\t\t\tServerIP='{$ServerIP}',\n\t\t\tWebCopyID='{$_POST["WebCopyID"]}',\n\t\t\tsslcertificate='{$_POST["sslcertificate"]}'\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 = strip_bad_characters($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 ($_POST["force-groupware"] != null) {
            $groupware_field = ",groupware";
            $groupware_value = ",'{$_POST["force-groupware"]}'";
        }
        if (!is_numeric($_POST["WebCopyID"])) {
            $WebCopyID_field = ",WebCopyID";
            $WebCopyID_value = ",'{$_POST["WebCopyID"]}'";
        }
        $sslcertificate = $_POST["sslcertificate"];
        $sock->getFrameWork("freeweb.php?force-resolv=yes");
        $sql = "INSERT INTO freeweb (useSSL,servername,\n\t\tuid,gpid,lvm_vg,lvm_size,UseLoopDisk,LoopMounts,ou,domainname,www_dir,ServerPort,UseReverseProxy,\n\t\tProxyPass,Forwarder,ForwardTo,ForceInstanceZarafaID,ServerIP,sslcertificate{$groupware_field}{$WebCopyID_field})\n\t\tVALUES('{$useSSL}','{$servername}','{$uid}','{$_POST["gpid"]}','{$_POST["lvm_vg"]}','{$_POST["vg_size"]}','{$_POST["UseLoopDisk"]}','{$_POST["LoopMounts"]}','{$ou}',\n\t\t'{$_POST["domainname"]}','{$FreewebsStorageDirectory}','{$ServerPort}','{$_POST["UseReverseProxy"]}','{$_POST["ProxyPass"]}',\n\t\t'{$_POST["Forwarder"]}','{$_POST["ForwardTo"]}','{$_POST["ForceInstanceZarafaID"]}','{$ServerIP}','{$sslcertificate}'{$groupware_value}{$WebCopyID_value}\n\t\t)";
    }
    writelogs("{$sql}", __FUNCTION__, __FILE__, __LINE__);
    $q = new mysql();
    $q->BuildTables();
    $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        echo "Function " . __FUNCTION__ . "\nLine:" . __LINE__ . "\nFile:" . __FILE__ . "\n" . $q->mysql_error;
        return;
    }
    if ($_POST["www_dir"] != null) {
        $sql = "UPDATE freeweb SET `www_dir`='{$_POST["www_dir"]}' WHERE servername='{$servername}'";
        $q->QUERY_SQL($sql, "artica_backup");
        if (!$q->ok) {
            echo "Function " . __FUNCTION__ . "\nLine:" . __LINE__ . "\nFile:" . __FILE__ . "\n" . $q->mysql_error;
            return;
        }
    }
    $sock = new sockets();
    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");
    $sock->getFrameWork("freeweb.php?rebuild-vhost=yes&servername={$servername}");
}
function xrun()
{
    $unix = new unix();
    $curl = new ccurl();
    $sock = new sockets();
    $tmpfile = $unix->FILE_TEMP();
    $tmpdir = $unix->TEMP_DIR();
    $squidbin = $unix->LOCATE_SQUID_BIN();
    $UpdateUtilityWebServername = $sock->GET_INFO("UpdateUtilityWebServername");
    if ($UpdateUtilityWebServername == null) {
        $UpdateUtilityWebServername = "update.domain.tld";
    }
    $UpdateUtilityStorePath = $sock->GET_INFO("UpdateUtilityStorePath");
    if ($UpdateUtilityStorePath == null) {
        $UpdateUtilityStorePath = "/home/kaspersky/UpdateUtility";
    }
    $UpdateUtilitySchedule = intval($sock->GET_INFO("UpdateUtilitySchedule"));
    $UpdateUtilityForceProxy = intval($sock->GET_INFO("UpdateUtilityForceProxy"));
    $FreewebsStorageDirectory = $UpdateUtilityStorePath;
    build_progress("{creating_the_webservice}:{$UpdateUtilityWebServername} ", 15);
    $servername = trim(strtolower($UpdateUtilityWebServername));
    $SCHEDULES[0] = "0 * * * *";
    $SCHEDULES[1] = "0 0,2,4,6,8,10,12,14,16,18,20,22 * * *";
    $SCHEDULES[2] = "0 0,4,8,12,16,20 * * *";
    $SCHEDULES[3] = "0 0,6,12,18 * * *";
    $schedule = $SCHEDULES[$UpdateUtilitySchedule];
    $cronfile = "UpdateUtility";
    $PATH = "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:/usr/share/artica-postfix/bin";
    $php5 = $unix->LOCATE_PHP5_BIN();
    $nice = $unix->EXEC_NICE();
    $nohup = $unix->find_program("nohup");
    $CRON[] = "PATH={$PATH}";
    $CRON[] = "MAILTO=\"\"";
    $CRON[] = "{$schedule}\troot\t{$nice} {$php5} /usr/share/artica-postfix/exec.keepup2date.php --UpdateUtility >/dev/null 2>&1";
    $CRON[] = "";
    file_put_contents("/etc/cron.d/{$cronfile}", @implode("\n", $CRON));
    chmod("/etc/cron.d/{$cronfile}", 0640);
    chown("/etc/cron.d/{$cronfile}", "root");
    system("/etc/init.d/cron reload");
    $uid = null;
    $lvm_vg = null;
    $vg_size = null;
    $ServerIP = null;
    $ServerPort = 0;
    $sock->SET_INFO("EnableFreeWeb", 1);
    $sock->SET_INFO("EnableApacheSystem", 1);
    $debianbin = $unix->find_program("update-rc.d");
    $redhatbin = $unix->find_program("chkconfig");
    if (is_file("/etc/init.d/apache")) {
        $service = "apache";
    }
    if (is_file("/etc/init.d/httpd")) {
        $service = "httpd";
    }
    if ($service != null) {
        if (is_file($debianbin)) {
            shell_exec("{$debianbin} -f {$service} defaults >/dev/null 2>&1");
        }
        if (is_file($redhatbin)) {
            shell_exec("{$redhatbin} --add {$service} >/dev/null 2>&1");
        }
    }
    if (!is_numeric($vg_size)) {
        $vg_size = 5000;
    }
    $useSSL = 0;
    $TDOM = explode(".", $UpdateUtilityWebServername);
    unset($TDOM[0]);
    $domainname = @implode(".", $TDOM);
    $WebCopyID = 0;
    build_progress("{creating_the_webservice}:{$UpdateUtilityWebServername} ", 50);
    $q = new mysql();
    $sql = "DELETE FROM freeweb WHERE groupware='UPDATEUTILITY'";
    $q->QUERY_SQL($sql, "artica_backup");
    $servername = strip_bad_characters($UpdateUtilityWebServername);
    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));
    }
    $sql = "INSERT INTO freeweb (useSSL,servername,domainname,www_dir,groupware)\n\t VALUES('0','{$servername}','{$domainname}','{$FreewebsStorageDirectory}','UPDATEUTILITY' )";
    build_progress("{creating_the_webservice}:{$UpdateUtilityWebServername} ", 55);
    $q = new mysql();
    $q->BuildTables();
    $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        echo $q->mysql_error . "\n";
        build_progress("{creating_the_webservice}:{failed} ", 110);
        return;
    }
    $cgcreate = $unix->find_program("cgcreate");
    if (is_file($cgcreate)) {
        $cgroupsEnabled = intval($sock->GET_INFO("cgroupsEnabled"));
        if ($cgroupsEnabled == 0) {
            build_progress("Enable cGroups...", 70);
            $sock->SET_INFO("cgroupsEnabled", 1);
            system("{$php5} /usr/share/artica-postfix/exec.cgroups.php --start");
        }
        $UpdateUtilityCpuShares = intval($sock->GET_INFO("UpdateUtilityCpuShares"));
        $UpdateUtilityDiskIO = intval($sock->GET_INFO("UpdateUtilityDiskIO"));
        if ($UpdateUtilityCpuShares == 0) {
            $UpdateUtilityCpuShares = 256;
        }
        if ($UpdateUtilityDiskIO == 0) {
            $UpdateUtilityDiskIO = 450;
        }
        $unix->CGROUPS_limit_service_structure("kasupt", $UpdateUtilityCpuShares, 0, $UpdateUtilityDiskIO);
        build_progress("LIMIT CPU  {$UpdateUtilityCpuShares} I/O {$UpdateUtilityDiskIO}", 70);
    }
    if (is_file($squidbin)) {
        if ($UpdateUtilityForceProxy == 1) {
            build_ufdb();
            shell_exec("{$squidbin} -f /etc/squid3/squid.conf -k reconfigure");
        } else {
            build_apache_OFF();
        }
    }
    $sql = "UPDATE freeweb SET `www_dir`='{$FreewebsStorageDirectory}' WHERE servername='{$UpdateUtilityWebServername}'";
    $q->QUERY_SQL($sql, "artica_backup");
    if (!$q->ok) {
        echo "Function " . __FUNCTION__ . "\nLine:" . __LINE__ . "\nFile:" . __FILE__ . "\n" . $q->mysql_error;
        build_progress("{creating_the_webservice}:{failed} ", 110);
        return;
    }
    $php = $unix->LOCATE_PHP5_BIN();
    build_progress("{reconfiguring_service} ", 80);
    $cmd = trim("{$php} /usr/share/artica-postfix/exec.freeweb.php --sitename {$UpdateUtilityWebServername} --restart --no-httpd-conf");
    system($cmd);
    build_progress("{restarting_service} ", 85);
    system("/etc/init.d/apache2 restart");
    build_progress("{done} ", 100);
    $sock->SET_INFO("UpdateUtilityWizard", 1);
    shell_exec("{$nohup} {$php5} /usr/share/artica-postfix/exec.keepup2date.php --UpdateUtility >/dev/null 2>&1 &");
}