maddinxx
2012-08-15 a8ccf60181373b68ca8bb77ca45f879e1aea9c0b
auth.log e.g. for fail2ban
- install: touch auth.log
- login: write success/fail to auth.log
- cron: log rotation for auth.log
3 files modified
286 ■■■■ changed files
install/lib/installer_base.lib.php 139 ●●●● patch | view | raw | blame | history
interface/web/login/index.php 16 ●●●● patch | view | raw | blame | history
server/cron_daily.php 131 ●●●● patch | view | raw | blame | history
install/lib/installer_base.lib.php
@@ -55,7 +55,7 @@
    public function warning($msg) {
        echo('WARNING: '.$msg."\n");
    }
    public function simple_query($query, $answers, $default) {
        $finished = false;
        do {
@@ -104,10 +104,10 @@
    /*
    // TODO: this function is not used atmo I think - pedro
    function request_language(){
        swriteln(lng('Enter your language'));
        swriteln(lng('de, en'));
    }
    */
@@ -136,7 +136,7 @@
        if(is_installed('fail2ban-server')) $conf['fail2ban']['installed'] = true;
        if(is_installed('vzctl')) $conf['openvz']['installed'] = true;
        if(is_dir("/etc/Bastille")) $conf['bastille']['installed'] = true;
        if ($conf['services']['web'] && (($conf['apache']['installed'] && is_file($conf['apache']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")) || ($conf['nginx']['installed'] && is_file($conf['nginx']["vhost_conf_enabled_dir"]."/000-ispconfig.vhost")))) $this->ispconfig_interface_installed = true;
    }
@@ -233,7 +233,7 @@
        $tpl_ini_array['dns']['bind_zonefiles_dir'] = $conf['bind']['bind_zonefiles_dir'];
        $tpl_ini_array['dns']['named_conf_path'] = $conf['bind']['named_conf_path'];
        $tpl_ini_array['dns']['named_conf_local_path'] = $conf['bind']['named_conf_local_path'];
        $tpl_ini_array['web']['nginx_vhost_conf_dir'] = $conf['nginx']['vhost_conf_dir'];
        $tpl_ini_array['web']['nginx_vhost_conf_enabled_dir'] = $conf['nginx']['vhost_conf_enabled_dir'];
        $tpl_ini_array['web']['nginx_user'] = $conf['nginx']['user'];
@@ -244,12 +244,12 @@
        $tpl_ini_array['web']['php_fpm_pool_dir'] = $conf['nginx']['php_fpm_pool_dir'];
        $tpl_ini_array['web']['php_fpm_start_port'] = $conf['nginx']['php_fpm_start_port'];
        $tpl_ini_array['web']['php_fpm_socket_dir'] = $conf['nginx']['php_fpm_socket_dir'];
        if ($conf['nginx']['installed'] == true) {
            $tpl_ini_array['web']['server_type'] = 'nginx';
            $tpl_ini_array['global']['webserver'] = 'nginx';
        }
        if (array_key_exists('awstats', $conf)) {
            foreach ($conf['awstats'] as $aw_sett => $aw_value) {
                $tpl_ini_array['web']['awstats_'.$aw_sett] = $aw_value;
@@ -267,7 +267,7 @@
        $vserver_server_enabled = ($conf['openvz']['installed'])?1:0;
        $proxy_server_enabled = (isset($conf['services']['proxy']) && $conf['services']['proxy'])?1:0;
        $firewall_server_enabled = (isset($conf['services']['firewall']) && $conf['services']['firewall'])?1:0;
        //** Get the database version number based on the patchfiles
        $found = true;
        $current_db_version = 1;
@@ -323,7 +323,7 @@
         *   2) it is the MASTER of n clients
        */
        $hosts = array();
        if($conf['mysql']['master_slave_setup'] == 'y') {
            /*
             * it is a master-slave - Setup so the slave has to grant its rights in the master
@@ -333,7 +333,7 @@
            //* insert the ispconfig user in the remote server
            $from_host = $conf['hostname'];
            $from_ip = gethostbyname($conf['hostname']);
            $hosts[$from_host]['user'] = $conf['mysql']['master_ispconfig_user'];
            $hosts[$from_host]['db'] = $conf['mysql']['master_database'];
            $hosts[$from_host]['pwd'] = $conf['mysql']['master_ispconfig_password'];
@@ -357,7 +357,7 @@
                $hosts[$item['Host']]['pwd'] = ''; // the user already exists, so we need no pwd!
            }
        }
        if(count($hosts) > 0) {
        foreach($hosts as $host => $value) {
            /*
@@ -470,7 +470,7 @@
            if(!$this->dbmaster->query($query)) {
                $this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
            }
            $query = "GRANT SELECT, UPDATE ON ".$value['db'].".`aps_instances` TO '".$value['user']."'@'".$host."' ";
            if ($verbose){
                echo $query ."\n";
@@ -478,7 +478,7 @@
            if(!$this->dbmaster->query($query)) {
                $this->warning('Unable to set rights of user in master database: '.$value['db']."\n Query: ".$query."\n Error: ".$this->dbmaster->errorMessage);
            }
        }
        /*
@@ -523,13 +523,13 @@
            copy('tpl/'.$jk_init.'.master', $config_dir.'/'.$jk_init);
            copy('tpl/'.$jk_chrootsh.'.master', $config_dir.'/'.$jk_chrootsh);
        }
        //* help jailkit fo find its ini files
        if(!is_link('/usr/jk_socketd.ini')) exec('ln -s /etc/jailkit/jk_socketd.ini /usr/jk_socketd.ini');
        if(!is_link('/usr/jk_init.ini')) exec('ln -s /etc/jailkit/jk_init.ini /usr/jk_init.ini');
    }
    public function configure_mailman($status = 'insert') {
        global $conf;
@@ -539,13 +539,13 @@
        if(is_file($full_file_name)) {
            copy($full_file_name, $config_dir.'mm_cfg.py~');
        }
        // load files
        $content = rf('tpl/mm_cfg.py.master');
        $old_file = rf($full_file_name);
        $old_options = array();
        $lines = explode("\n", $old_file);
        $lines = explode("\n", $old_file);
        foreach ($lines as $line)
        {
            if (trim($line) != '' && substr($line, 0, 1) != '#')
@@ -558,13 +558,13 @@
                }
            }
        }
        $virtual_domains = '';
        if($status == 'update')
        {
            // create virtual_domains list
            $domainAll = $this->db->queryAllRecords("SELECT domain FROM mail_mailinglist GROUP BY domain");
            if(is_array($domainAll)) {
            foreach($domainAll as $domain)
            {
@@ -577,7 +577,7 @@
        }
        else
            $virtual_domains = "' '";
        $content = str_replace('{hostname}', $conf['hostname'], $content);
        if(!isset($old_options['DEFAULT_SERVER_LANGUAGE'])) $old_options['DEFAULT_SERVER_LANGUAGE'] = '';
        $content = str_replace('{default_language}', $old_options['DEFAULT_SERVER_LANGUAGE'], $content);
@@ -637,7 +637,7 @@
        $command = 'useradd -g '.$cf['vmail_groupname'].' -u '.$cf['vmail_userid'].' '.$cf['vmail_username'].' -d '.$cf['vmail_mailbox_base'].' -m';
        if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
        //* These postconf commands will be executed on installation and update
        $server_ini_rec = $this->db->queryOneRecord("SELECT config FROM server WHERE server_id = ".$conf['server_id']);
        $server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
@@ -689,7 +689,7 @@
                'body_checks = regexp:'.$config_dir.'/body_checks',
                'owner_request_special = no'
        );
        //* These postconf commands will be executed on installation only
        if($this->is_update == false) {
            $postconf_commands = array_merge($postconf_commands,array(
@@ -704,7 +704,7 @@
        touch($config_dir.'/mime_header_checks');
        touch($config_dir.'/nested_header_checks');
        touch($config_dir.'/body_checks');
        //* Create the mailman files
        exec('mkdir -p /var/lib/mailman/data');
        if(!is_file('/var/lib/mailman/data/aliases')) touch('/var/lib/mailman/data/aliases');
@@ -775,7 +775,7 @@
    public function configure_saslauthd() {
        global $conf;
        //* Get saslsauthd version
        exec('saslauthd -v 2>&1',$out);
        $parts = explode(' ',$out[0]);
@@ -790,7 +790,7 @@
            //* Configfile for saslauthd versions up to 2.1.23
            $configfile = 'sasl_smtpd.conf';
        }
        if(is_file($conf['postfix']['config_dir'].'/sasl/smtpd.conf')) copy($conf['postfix']['config_dir'].'/sasl/smtpd.conf',$conf['postfix']['config_dir'].'/sasl/smtpd.conf~');
        if(is_file($conf['postfix']['config_dir'].'/sasl/smtpd.conf~')) chmod($conf['postfix']['config_dir'].'/sasl/smtpd.conf~', 0400);
        $content = rf('tpl/'.$configfile.'.master');
@@ -930,14 +930,14 @@
        if(is_file($config_dir.'/'.$configfile)) {
            copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
        }
        //* Get the dovecot version
        exec('dovecot --version',$tmp);
        $parts = explode('.',trim($tmp[0]));
        $dovecot_version = $parts[0];
        unset($tmp);
        unset($parts);
        //* Copy dovecot configuration file
        if($dovecot_version == 2) {
            copy('tpl/debian_dovecot2.conf.master',$config_dir.'/'.$configfile);
@@ -985,7 +985,7 @@
        // Adding the amavisd commands to the postfix configuration
        // Add array for no error in foreach and maybe future options
        $postconf_commands = array ();
        // Check for amavisd -> pure webserver with postfix for mailing without antispam
        if ($conf['amavis']['installed']) {
            $postconf_commands[] = 'content_filter = amavis:[127.0.0.1]:10024';
@@ -1204,7 +1204,7 @@
        $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
        // copy('tpl/apache_ispconfig.conf.master',$vhost_conf_dir.'/ispconfig.conf');
        $content = rf('tpl/apache_ispconfig.conf.master');
        $records = $this->db->queryAllRecords('SELECT * FROM '.$conf['mysql']['master_database'].'.server_ip WHERE server_id = '.$conf['server_id']." AND virtualhost = 'y'");
@@ -1226,7 +1226,7 @@
                }
            }
        }
        $content .= "\n";
        wf($vhost_conf_dir.'/ispconfig.conf',$content);
@@ -1246,21 +1246,21 @@
            replaceLine('/etc/webalizer/webalizer.conf','#Incremental','Incremental     yes',0,0);
            replaceLine('/etc/webalizer/webalizer.conf','#HistoryName','HistoryName     webalizer.hist',0,0);
        }
        // Check the awsatst script
        if(!is_dir('/usr/share/awstats/tools')) exec('mkdir -p /usr/share/awstats/tools');
        if(!file_exists('/usr/share/awstats/tools/awstats_buildstaticpages.pl') && file_exists('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl')) symlink('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl','/usr/share/awstats/tools/awstats_buildstaticpages.pl');
        if(file_exists('/etc/awstats/awstats.conf.local')) replaceLine('/etc/awstats/awstats.conf.local','LogFormat=4','LogFormat=1',0,1);
        //* add a sshusers group
        $command = 'groupadd sshusers';
        if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
    }
    public function configure_nginx(){
        global $conf;
        if($conf['nginx']['installed'] == false) return;
        //* Create the logging directory for the vhost logfiles
        if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true);
@@ -1277,16 +1277,16 @@
            replaceLine('/etc/webalizer/webalizer.conf','#Incremental','Incremental     yes',0,0);
            replaceLine('/etc/webalizer/webalizer.conf','#HistoryName','HistoryName     webalizer.hist',0,0);
        }
        // Check the awsatst script
        if(!is_dir('/usr/share/awstats/tools')) exec('mkdir -p /usr/share/awstats/tools');
        if(!file_exists('/usr/share/awstats/tools/awstats_buildstaticpages.pl') && file_exists('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl')) symlink('/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl','/usr/share/awstats/tools/awstats_buildstaticpages.pl');
        if(file_exists('/etc/awstats/awstats.conf.local')) replaceLine('/etc/awstats/awstats.conf.local','LogFormat=4','LogFormat=1',0,1);
        //* add a sshusers group
        $command = 'groupadd sshusers';
        if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
        /*
        $row = $this->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ".$conf["server_id"]."");
        $ip_address = gethostbyname($row["server_name"]);
@@ -1317,18 +1317,18 @@
        exec('chown www-data:www-data /var/cache/nginx/temp');
        */
    }
    public function configure_fail2ban() {
        // To Do
    }
    public function configure_squid()
    {
        global $conf;
        $row = $this->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ".$conf["server_id"]."");
        $ip_address = gethostbyname($row["server_name"]);
        $server_name = $row["server_name"];
        $configfile = 'squid.conf';
        if(is_file($conf["squid"]["config_dir"].'/'.$configfile)) copy($conf["squid"]["config_dir"].'/'.$configfile,$conf["squid"]["config_dir"].'/'.$configfile.'~');
        if(is_file($conf["squid"]["config_dir"].'/'.$configfile.'~')) exec('chmod 400 '.$conf["squid"]["config_dir"].'/'.$configfile.'~');
@@ -1340,7 +1340,7 @@
        exec('chmod 600 '.$conf["squid"]["config_dir"].'/'.$configfile);
        exec('chown root:root '.$conf["squid"]["config_dir"].'/'.$configfile);
    }
    /*
    public function configure_ufw_firewall()
    {
@@ -1349,7 +1349,7 @@
        $content = rf("tpl/".$configfile.".master");
        wf('/etc/ufw/ufw.conf',$content);
        exec('chmod 600 /etc/ufw/ufw.conf');
        exec('chown root:root /etc/ufw/ufw.conf');
        exec('chown root:root /etc/ufw/ufw.conf');
    }
    */
@@ -1496,7 +1496,7 @@
            if(!@is_link($vhost_conf_enabled_dir.'/000-apps.vhost')) {
                symlink($vhost_conf_dir.'/apps.vhost',$vhost_conf_enabled_dir.'/000-apps.vhost');
            }
            if(!is_file($conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter')) {
                mkdir($conf['web']['website_basedir'].'/php-fcgi-scripts/apps', 0755, true);
                copy('tpl/apache_apps_fcgi_starter.master',$conf['web']['website_basedir'].'/php-fcgi-scripts/apps/.php-fcgi-starter');
@@ -1535,13 +1535,13 @@
            // Dont just copy over the virtualhost template but add some custom settings
            $content = rf('tpl/nginx_apps.vhost.master');
            if($conf['web']['apps_vhost_ip'] == '_default_'){
                $apps_vhost_ip = '';
            } else {
                $apps_vhost_ip = $conf['web']['apps_vhost_ip'].':';
            }
            $socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
            if(substr($socket_dir,-1) != '/') $socket_dir .= '/';
            if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
@@ -1557,7 +1557,7 @@
            $content = str_replace('{cgi_socket}', $cgi_socket, $content);
            wf($vhost_conf_dir.'/apps.vhost', $content);
            // PHP-FPM
            // Dont just copy over the php-fpm pool template but add some custom settings
            $content = rf('tpl/apps_php_fpm_pool.conf.master');
@@ -1574,21 +1574,21 @@
            if(!@is_link($vhost_conf_enabled_dir.'/000-apps.vhost')) {
                symlink($vhost_conf_dir.'/apps.vhost',$vhost_conf_enabled_dir.'/000-apps.vhost');
            }
        }
    }
    public function make_ispconfig_ssl_cert() {
        global $conf;
        $install_dir = $conf['ispconfig_install_dir'];
        $ssl_crt_file = $install_dir.'/interface/ssl/ispserver.crt';
        $ssl_csr_file = $install_dir.'/interface/ssl/ispserver.csr';
        $ssl_key_file = $install_dir.'/interface/ssl/ispserver.key';
        if(!@is_dir($install_dir.'/interface/ssl')) mkdir($install_dir.'/interface/ssl', 0755, true);
        $ssl_pw = substr(md5(mt_rand()),0,6);
        exec("openssl genrsa -des3 -passout pass:$ssl_pw -out $ssl_key_file 4096");
        exec("openssl req -new -passin pass:$ssl_pw -passout pass:$ssl_pw -key $ssl_key_file -out $ssl_csr_file");
@@ -1596,7 +1596,7 @@
        exec("openssl rsa -passin pass:$ssl_pw -in $ssl_key_file -out $ssl_key_file.insecure");
        rename($ssl_key_file,$ssl_key_file.'.secure');
        rename($ssl_key_file.'.insecure',$ssl_key_file);
    }
    public function install_ispconfig() {
@@ -1790,7 +1790,7 @@
                }
            }
        }
        //* Make the APS directories group writable
        exec("chmod -R 770 $install_dir/interface/web/sites/aps_meta_packages");
        exec("chmod -R 770 $install_dir/server/aps_packages");
@@ -1809,7 +1809,7 @@
            chown($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
            chgrp($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
        }
        if(is_dir($install_dir.'/interface/invoices')) {
            exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
            exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
@@ -1854,7 +1854,7 @@
            } else {
                $content = str_replace('{vhost_port_listen}', '', $content);
            }
            if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
                $content = str_replace('{ssl_comment}', '', $content);
            } else {
@@ -1880,7 +1880,7 @@
            }
        }
        if($conf['nginx']['installed'] == true && $this->install_ispconfig_interface == true){
            //* Copy the ISPConfig vhost for the controlpanel
            $vhost_conf_dir = $conf['nginx']['vhost_conf_dir'];
@@ -1889,7 +1889,7 @@
            // Dont just copy over the virtualhost template but add some custom settings
            $content = rf('tpl/nginx_ispconfig.vhost.master');
            $content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
            if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
                $content = str_replace('{ssl_on}', 'on', $content);
                $content = str_replace('{ssl_comment}', '', $content);
@@ -1899,19 +1899,19 @@
                $content = str_replace('{ssl_comment}', '#', $content);
                $content = str_replace('{fastcgi_ssl}', 'off', $content);
            }
            $socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
            if(substr($socket_dir,-1) != '/') $socket_dir .= '/';
            if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
            $fpm_socket = $socket_dir.'ispconfig.sock';
            //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
            $content = str_replace('{fpm_socket}', $fpm_socket, $content);
            wf($vhost_conf_dir.'/ispconfig.vhost', $content);
            unset($content);
            // PHP-FPM
            // Dont just copy over the php-fpm pool template but add some custom settings
            $content = rf('tpl/php_fpm_pool.conf.master');
@@ -1956,7 +1956,12 @@
            if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir'], 0755);
            touch($conf['ispconfig_log_dir'].'/ispconfig.log');
        }
        //* Create the ispconfig auth log file
        if(!is_file($conf['ispconfig_log_dir'].'/auth.log')) {
            touch($conf['ispconfig_log_dir'].'/auth.log', 0666);
        }
        if(is_user('getmail')) {
            rename($install_dir.'/server/scripts/run-getmail.sh','/usr/local/bin/run-getmail.sh');
            if(is_user('getmail')) chown('/usr/local/bin/run-getmail.sh', 'getmail');
@@ -2008,7 +2013,7 @@
        wf($install_dir.'/server/lib/mysql_clientdb.conf',$content);
        chmod($install_dir.'/server/lib/mysql_clientdb.conf', 0600);
        chown($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
        chgrp($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
        chgrp($install_dir.'/server/lib/mysql_clientdb.conf', 'root');
    }
@@ -2030,11 +2035,11 @@
                "* * * * * ".$install_dir."/server/server.sh > /dev/null 2>> ".$conf['ispconfig_log_dir']."/cron.log",
                "30 00 * * * ".$install_dir."/server/cron_daily.sh > /dev/null 2>> ".$conf['ispconfig_log_dir']."/cron.log"
        );
        if ($conf['nginx']['installed'] == true) {
            $root_cron_jobs[] = "0 0 * * * ".$install_dir."/server/scripts/create_daily_nginx_access_logs.sh &> /dev/null";
        }
        foreach($root_cron_jobs as $cron_job) {
            if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
                $existing_root_cron_jobs[] = $cron_job."\n";
interface/web/login/index.php
@@ -78,7 +78,6 @@
            $passwort = $app->db->quote($_POST['passwort']);
            $loginAs  = false;
            $time = time();
            $logging = 'Failed login for user '. $username .' from '. long2ip($ip) .' at '. date('Y-m-d H:i:s');
            if($username != '' && $passwort != '' && $error == '') {
                /*
@@ -200,6 +199,12 @@
                                $app->plugin->raiseEvent('login',$this);
                                //* Save successfull login message to var
                                $authlog = 'Successful login for user \''. $username .'\' from '. long2ip($ip) .' at '. date('Y-m-d H:i:s');
                                $authlog_handle = fopen($conf['ispconfig_log_dir'].'/auth.log', 'a');
                                fwrite($authlog_handle, $authlog ."\n");
                                fclose($authlog_handle);
                                /*
                                * We need LOGIN_REDIRECT instead of HEADER_REDIRECT to load the
                                * new theme, if the logged-in user has another
@@ -211,6 +216,7 @@
                         } else {
                            $error = $app->lng('error_user_blocked');
                        }
                    } else {
                        if(!$alreadyfailed['times'] )
                        {
@@ -228,10 +234,14 @@
                        $app->plugin->raiseEvent('login_failed',$this);
                        //* write to log (e.g. for fail2ban)
                        exec('echo '. $logging .' >> /tmp/login.log');
                        //* Save failed login message to var
                        $authlog = 'Failed login for user \''. $username .'\' from '. long2ip($ip) .' at '. date('Y-m-d H:i:s');
                        $authlog_handle = fopen($conf['ispconfig_log_dir'].'/auth.log', 'a');
                        fwrite($authlog_handle, $authlog ."\n");
                        fclose($authlog_handle);
                       }
                }
              } else {
                   //* Username or password empty
                if($error == '') $error = $app->lng('error_user_password_empty');
server/cron_daily.php
@@ -132,7 +132,7 @@
    $webalizer = '/usr/bin/webalizer';
    $webalizer_conf_main = '/etc/webalizer/webalizer.conf';
    $webalizer_conf = escapeshellcmd($rec['document_root'].'/log/webalizer.conf');
    if(is_file($statsdir.'/index.php')) unlink($statsdir.'/index.php');
    if(!@is_file($webalizer_conf)) {
@@ -169,27 +169,27 @@
            continue;
        }
    }
    $domain = escapeshellcmd($rec['domain']);
    $statsdir = escapeshellcmd($rec['document_root'].'/web/stats');
    $awstats_pl = $web_config['awstats_pl'];
    $awstats_buildstaticpages_pl = $web_config['awstats_buildstaticpages_pl'];
    $awstats_conf_dir = $web_config['awstats_conf_dir'];
    $awstats_website_conf_file = $web_config['awstats_conf_dir'].'/awstats.'.$domain.'.conf';
    if(is_file($awstats_website_conf_file)) unlink($awstats_website_conf_file);
    $sql = "SELECT domain FROM web_domain WHERE (type = 'alias' OR type = 'subdomain') AND parent_domain_id = ".$rec['domain_id'];
    $aliases = $app->db->queryAllRecords($sql);
    $aliasdomain = '';
    if(is_array($aliases)) {
        foreach ($aliases as $alias) {
            $aliasdomain.= ' '.$alias['domain']. ' www.'.$alias['domain'];
        }
    }
    if(!is_file($awstats_website_conf_file)) {
        $awstats_conf_file_content = 'Include "'.$awstats_conf_dir.'/awstats.conf"
LogFile="/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log"
@@ -197,11 +197,11 @@
HostAliases="www.'.$domain.' localhost 127.0.0.1'.$aliasdomain.'"';
        file_put_contents($awstats_website_conf_file,$awstats_conf_file_content);
    }
    if(!@is_dir($statsdir)) mkdir($statsdir);
    if(is_link('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log')) unlink('/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
    symlink($logfile,'/var/log/ispconfig/httpd/'.$domain.'/yesterday-access.log');
    $awmonth = date("n");
    $awyear = date("Y");
@@ -212,10 +212,10 @@
            $awmonth = "12";
        }
    }
    // awstats_buildstaticpages.pl -update -config=mydomain.com -lang=en -dir=/var/www/domain.com/web/stats -awstatsprog=/path/to/awstats.pl
    // $command = "$awstats_buildstaticpages_pl -update -config='$domain' -lang=".$conf['language']." -dir='$statsdir' -awstatsprog='$awstats_pl'";
    $command = "$awstats_buildstaticpages_pl -month='$awmonth' -year='$awyear' -update -config='$domain' -lang=".$conf['language']." -dir='$statsdir' -awstatsprog='$awstats_pl'";
    if (date("d") == 2) {
@@ -232,24 +232,24 @@
            if (substr($file,0,1) != "." && !is_dir("$statsdir"."/"."$file") && substr($file,0,1) != "w" && substr($file,0,1) != "i") copy("$statsdir"."/"."$file","$statsdirold"."$file");
        }
    }
    if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {
        exec($command);
        if(is_file($rec['document_root'].'/web/stats/index.html')) unlink($rec['document_root'].'/web/stats/index.html');
        rename($rec['document_root'].'/web/stats/awstats.'.$domain.'.html',$rec['document_root'].'/web/stats/awsindex.html');
        if(!is_file($rec['document_root']."/web/stats/index.php")) copy("/usr/local/ispconfig/server/conf/awstats_index.php.master",$rec['document_root']."/web/stats/index.php");
        $app->log('Created awstats statistics with command: '.$command,LOGLEVEL_DEBUG);
    } else {
        $app->log("No awstats statistics created. Either $awstats_pl or $awstats_buildstaticpages_pl is not owned by root user.",LOGLEVEL_WARN);
    }
    if(is_file($rec['document_root']."/web/stats/index.php")) {
        chown($rec['document_root']."/web/stats/index.php",$rec['system_user']);
        chgrp($rec['document_root']."/web/stats/index.php",$rec['system_group']);
    }
}
@@ -266,12 +266,12 @@
$sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE server_id = ".$conf['server_id'];
$records = $app->db->queryAllRecords($sql);
foreach($records as $rec) {
    //* create traffic statistics based on yesterdays access log file
    $yesterday = date('Ymd',time() - 86400);
    $logfile = $rec['document_root'].'/log/'.$yesterday.'-access.log';
    $total_bytes = 0;
    $handle = @fopen($logfile, "r");
    if ($handle) {
        while (($line = fgets($handle, 4096)) !== false) {
@@ -279,7 +279,7 @@
                $total_bytes += intval($m[1]);
            }
        }
        //* Insert / update traffic in master database
        $traffic_date = date('Y-m-d',time() - 86400);
        $tmp = $app->dbmaster->queryOneRecord("select hostname from web_traffic where hostname='".$rec['domain']."' and traffic_date='".$traffic_date."'");
@@ -292,20 +292,20 @@
            $sql = "insert into web_traffic (hostname, traffic_date, traffic_bytes) values ('".$rec['domain']."', '".$traffic_date."', '".$total_bytes."')";
        }
        $app->dbmaster->query($sql);
        fclose($handle);
    }
    $yesterday2 = date('Ymd',time() - 86400*2);
    $logfile = escapeshellcmd($rec['document_root'].'/log/'.$yesterday2.'-access.log');
    //* Compress logfile
    if(@is_file($logfile)) {
        // Compress yesterdays logfile
        exec("gzip -c $logfile > $logfile.gz");
        unlink($logfile);
    }
    // rotate and compress the error.log when it exceeds a size of 10 MB
    $logfile = escapeshellcmd($rec['document_root'].'/log/error.log');
    if(is_file($logfile) && filesize($logfile) > 10000000) {
@@ -319,13 +319,13 @@
    if(@is_file($logfile)) {
        unlink($logfile);
    }
    //* Delete older Log files, in case that we missed them before due to serverdowntimes.
    $datepart = date('Ym',time() - 86400 * 31 * 2);
    $logfile = escapeshellcmd($rec['document_root']).'/log/'.$datepart.'*-access.log.gz';
    exec('rm -f '.$logfile);
    $logfile = escapeshellcmd($rec['document_root']).'/log/'.$datepart.'*-access.log';
    exec('rm -f '.$logfile);
}
@@ -343,6 +343,13 @@
// rotate the cron.log when it exceeds a size of 10 MB
$logfile = $conf['ispconfig_log_dir'].'/cron.log';
if(is_file($logfile) && filesize($logfile) > 10000000) {
    exec("gzip -c $logfile > $logfile.1.gz");
    exec("cat /dev/null > $logfile");
}
// rotate the auth.log when it exceeds a size of 10 MB
$logfile = $conf['ispconfig_log_dir'].'/auth.log';
if(is_file($logfile) && filesize($logfile) > 10000000) {
    exec("gzip -c $logfile > $logfile.1.gz");
    exec("cat /dev/null > $logfile");
@@ -519,36 +526,36 @@
$http_server_user = $web_config['user'];
if($backup_dir != '') {
    if(isset($server_config['backup_dir_ftpread']) && $server_config['backup_dir_ftpread'] == 'y') {
        $backup_dir_permissions = 0755;
    } else {
        $backup_dir_permissions = 0750;
    }
    if(!is_dir($backup_dir)) {
        mkdir(escapeshellcmd($backup_dir), $backup_dir_permissions, true);
    } else {
        chmod(escapeshellcmd($backup_dir), $backup_dir_permissions);
    }
    $sql = "SELECT * FROM web_domain WHERE server_id = '".$conf['server_id']."' AND type = 'vhost' AND backup_interval != 'none'";
    $records = $app->db->queryAllRecords($sql);
    if(is_array($records)) {
        foreach($records as $rec) {
            //* Do the website backup
            if($rec['backup_interval'] == 'daily' or ($rec['backup_interval'] == 'weekly' && date('w') == 0) or ($rec['backup_interval'] == 'monthly' && date('d') == '01')) {
                $web_path = $rec['document_root'];
                $web_user = $rec['system_user'];
                $web_group = $rec['system_group'];
                $web_id = $rec['domain_id'];
                $web_backup_dir = $backup_dir.'/web'.$web_id;
                if(!is_dir($web_backup_dir)) mkdir($web_backup_dir, 0750);
                chmod($web_backup_dir, 0750);
                chmod($web_backup_dir, 0750);
                //if(isset($server_config['backup_dir_ftpread']) && $server_config['backup_dir_ftpread'] == 'y') {
                chown($web_backup_dir, $rec['system_user']);
                chown($web_backup_dir, $rec['system_user']);
                chgrp($web_backup_dir, $rec['system_group']);
                /*} else {
                    chown($web_backup_dir, 'root');
@@ -564,17 +571,17 @@
                    $web_backup_file = 'web'.$web_id.'_'.date('Y-m-d_H-i').'.tar.gz';
                    exec('tar pczf '.escapeshellarg($web_backup_dir.'/'.$web_backup_file).' --exclude=backup\* --directory '.escapeshellarg($web_path).' .');
                }
                chown($web_backup_dir.'/'.$web_backup_file, 'root');
                chown($web_backup_dir.'/'.$web_backup_file, 'root');
                chgrp($web_backup_dir.'/'.$web_backup_file, 'root');
                chmod($web_backup_dir.'/'.$web_backup_file, 0750);
                //* Insert web backup record in database
                $insert_data = "(server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",".$web_id.",'web','".$backup_mode."',".time().",'".$app->db->quote($web_backup_file)."')";
                $app->dbmaster->datalogInsert('web_backup', $insert_data, 'backup_id');
                //* Remove old backups
                $backup_copies = intval($rec['backup_copies']);
                $dir_handle = dir($web_backup_dir);
                $files = array();
                while (false !== ($entry = $dir_handle->read())) {
@@ -583,9 +590,9 @@
                    }
                }
                $dir_handle->close();
                rsort($files);
                for ($n = $backup_copies; $n <= 10; $n++) {
                    if(isset($files[$n]) && is_file($web_backup_dir.'/'.$files[$n])) {
                        unlink($web_backup_dir.'/'.$files[$n]);
@@ -594,23 +601,23 @@
                        $app->dbmaster->datalogDelete('web_backup', 'backup_id', $tmp['backup_id']);
                    }
                }
                unset($files);
                unset($dir_handle);
                //* Remove backupdir symlink and create as directory instead
                if(is_link($web_path.'/backup')) {
                    unlink($web_path.'/backup');
                }
                if(!is_dir($web_path.'/backup')) {
                    mkdir($web_path.'/backup');
                    chown($web_path.'/backup', $rec['system_user']);
                    chown($web_path.'/backup', $rec['system_user']);
                    chgrp($web_path.'/backup', $rec['system_group']);
                }
            }
            /* If backup_interval is set to none and we have a
            /* If backup_interval is set to none and we have a
            backup directory for the website, then remove the backups */
            if($rec['backup_interval'] == 'none') {
                $web_id = $rec['domain_id'];
@@ -622,22 +629,22 @@
            }
        }
    }
    $sql = "SELECT * FROM web_database WHERE server_id = '".$conf['server_id']."' AND backup_interval != 'none'";
    $records = $app->db->queryAllRecords($sql);
    if(is_array($records)) {
        include('lib/mysql_clientdb.conf');
        foreach($records as $rec) {
            //* Do the database backup
            if($rec['backup_interval'] == 'daily' or ($rec['backup_interval'] == 'weekly' && date('w') == 0) or ($rec['backup_interval'] == 'monthly' && date('d') == '01')) {
                $web_id = $rec['parent_domain_id'];
                $db_backup_dir = $backup_dir.'/web'.$web_id;
                if(!is_dir($web_backup_dir)) mkdir($web_backup_dir, 0750);
                chmod($web_backup_dir, 0750);
                chmod($web_backup_dir, 0750);
                chown($web_backup_dir, 'root');
                chgrp($web_backup_dir, 'root');
@@ -647,23 +654,23 @@
                $db_backup_file = 'db_'.$db_name.'_'.date('Y-m-d_H-i').'.sql';
                $command = "mysqldump -h '".escapeshellcmd($clientdb_host)."' -u '".escapeshellcmd($clientdb_user)."' -p'".escapeshellcmd($clientdb_password)."' -c --add-drop-table --create-options --quick --result-file='".$db_backup_dir.'/'.$db_backup_file."' '".$db_name."'";
                exec($command);
                //* Compress the backup with gzip
                exec("gzip -c '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file)."' > '".escapeshellcmd($db_backup_dir.'/'.$db_backup_file).".gz'");
                chmod($db_backup_dir.'/'.$db_backup_file.'.gz', 0750);
                chown($db_backup_dir.'/'.$db_backup_file.'.gz', fileowner($db_backup_dir));
                chown($db_backup_dir.'/'.$db_backup_file.'.gz', fileowner($db_backup_dir));
                chgrp($db_backup_dir.'/'.$db_backup_file.'.gz', filegroup($db_backup_dir));
                //* Insert web backup record in database
                $insert_data = "(server_id,parent_domain_id,backup_type,backup_mode,tstamp,filename) VALUES (".$conf['server_id'].",$web_id,'mysql','sqlgz',".time().",'".$app->db->quote($db_backup_file).".gz')";
                $app->dbmaster->datalogInsert('web_backup', $insert_data, 'backup_id');
                //* Remove the uncompressed file
                unlink($db_backup_dir.'/'.$db_backup_file);
                //* Remove old backups
                $backup_copies = intval($rec['backup_copies']);
                $dir_handle = dir($db_backup_dir);
                $files = array();
                while (false !== ($entry = $dir_handle->read())) {
@@ -672,9 +679,9 @@
                    }
                }
                $dir_handle->close();
                rsort($files);
                for ($n = $backup_copies; $n <= 10; $n++) {
                    if(isset($files[$n]) && is_file($db_backup_dir.'/'.$files[$n])) {
                        unlink($db_backup_dir.'/'.$files[$n]);
@@ -683,16 +690,16 @@
                        $app->dbmaster->datalogDelete('web_backup', 'backup_id', $tmp['backup_id']);
                    }
                }
                unset($files);
                unset($dir_handle);
            }
        }
        unset($clientdb_host);
        unset($clientdb_user);
        unset($clientdb_password);
    }
}