Marius Burkard
2016-04-20 4569cae57f127afd093794310ccd290d2d9fdf36
commit | author | age
0711af 1 <?php
T 2
3 /*
436ed8 4 Copyright (c) 2007, Till Brehm, projektfarm Gmbh
0711af 5 All rights reserved.
T 6
7 Redistribution and use in source and binary forms, with or without modification,
8 are permitted provided that the following conditions are met:
9
10     * Redistributions of source code must retain the above copyright notice,
11       this list of conditions and the following disclaimer.
12     * Redistributions in binary form must reproduce the above copyright notice,
13       this list of conditions and the following disclaimer in the documentation
14       and/or other materials provided with the distribution.
15     * Neither the name of ISPConfig nor the names of its contributors
16       may be used to endorse or promote products derived from this software without
17       specific prior written permission.
18
19 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
23 INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
24 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
26 OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28 EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
344393 31 class installer_dist extends installer_base {
223c56 32     protected $mailman_group = 'mailman';
MC 33     
34     public function __construct() {
35         //** check apache modules */
36         $mods = getapachemodules();
37         if(in_array('authz_compat', $mods, true)) {
38             swriteln($inst->lng('    WARNING! You are using mod_authz_compat.'));
39             swriteln($inst->lng('    Please make sure that your apache config uses the new auth syntax:'));
40             swriteln($inst->lng('    <Directory />'));
41             swriteln($inst->lng('    Options None'));
42             swriteln($inst->lng('    AllowOverride None'));
43             swriteln($inst->lng('    Require all denied'));
44             swriteln($inst->lng('    </Directory>'."\n"));
45             
46             swriteln($inst->lng('    If it uses the old syntax (deny from all) ISPConfig would fail to work.'));
526b99 47         }
T 48     }
b1a6a5 49
0711af 50     function configure_postfix($options = '')
b1a6a5 51     {
b51c22 52         global $conf,$autoinstall;
0711af 53         $cf = $conf['postfix'];
T 54         $config_dir = $cf['config_dir'];
b1a6a5 55
0711af 56         if(!is_dir($config_dir)){
b1a6a5 57             $this->error("The postfix configuration directory '$config_dir' does not exist.");
MC 58         }
59
0711af 60         //* mysql-virtual_domains.cf
b1a6a5 61         $this->process_postfix_config('mysql-virtual_domains.cf');
0711af 62
T 63         //* mysql-virtual_forwardings.cf
b1a6a5 64         $this->process_postfix_config('mysql-virtual_forwardings.cf');
0711af 65
T 66         //* mysql-virtual_mailboxes.cf
b1a6a5 67         $this->process_postfix_config('mysql-virtual_mailboxes.cf');
0711af 68
T 69         //* mysql-virtual_email2email.cf
b1a6a5 70         $this->process_postfix_config('mysql-virtual_email2email.cf');
0711af 71
T 72         //* mysql-virtual_transports.cf
b1a6a5 73         $this->process_postfix_config('mysql-virtual_transports.cf');
0711af 74
T 75         //* mysql-virtual_recipient.cf
b1a6a5 76         $this->process_postfix_config('mysql-virtual_recipient.cf');
0711af 77
T 78         //* mysql-virtual_sender.cf
b1a6a5 79         $this->process_postfix_config('mysql-virtual_sender.cf');
0711af 80
03b633 81         //* mysql-virtual_sender_login_maps.cf
D 82         $this->process_postfix_config('mysql-virtual_sender_login_maps.cf');
83         
0711af 84         //* mysql-virtual_client.cf
b1a6a5 85         $this->process_postfix_config('mysql-virtual_client.cf');
MC 86
0711af 87         //* mysql-virtual_relaydomains.cf
b1a6a5 88         $this->process_postfix_config('mysql-virtual_relaydomains.cf');
MC 89
429dcf 90         //* mysql-virtual_relayrecipientmaps.cf
b1a6a5 91         $this->process_postfix_config('mysql-virtual_relayrecipientmaps.cf');
0711af 92
75722e 93         //* mysql-virtual_policy_greylist.cf
D 94         $this->process_postfix_config('mysql-virtual_policy_greylist.cf');
95
b1a6a5 96         //* postfix-dkim
MC 97         $full_file_name=$config_dir.'/tag_as_originating.re';
98         if(is_file($full_file_name)) {
99             copy($full_file_name, $config_dir.$configfile.'~');
100         }
101         wf($full_file_name, '/^/ FILTER amavis:[127.0.0.1]:10026');
ec5716 102
b1a6a5 103         $full_file_name=$config_dir.'/tag_as_foreign.re';
MC 104         if(is_file($full_file_name)) {
105             copy($full_file_name, $config_dir.$configfile.'~');
106         }
107         wf($full_file_name, '/^/ FILTER amavis:[127.0.0.1]:10024');
ec5716 108
0711af 109         //* Changing mode and group of the new created config files.
T 110         caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
b1a6a5 111             __FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
MC 112         caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
113             __FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
114
0711af 115         //* Creating virtual mail user and group
T 116         $command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
392450 117         if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
0711af 118
T 119         $command = 'useradd -g '.$cf['vmail_groupname'].' -u '.$cf['vmail_userid'].' '.$cf['vmail_username'].' -d '.$cf['vmail_mailbox_base'].' -m';
7b47c0 120         if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
T 121
122         //* These postconf commands will be executed on installation and update
2af58c 123         $server_ini_rec = $this->db->queryOneRecord("SELECT config FROM server WHERE server_id = ?", $conf['server_id']);
7b47c0 124         $server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
T 125         unset($server_ini_rec);
126
127         //* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removeal after an update
128         $rbl_list = '';
129         if (@isset($server_ini_array['mail']['realtime_blackhole_list']) && $server_ini_array['mail']['realtime_blackhole_list'] != '') {
b1a6a5 130             $rbl_hosts = explode(",", str_replace(" ", "", $server_ini_array['mail']['realtime_blackhole_list']));
7b47c0 131             foreach ($rbl_hosts as $key => $value) {
T 132                 $rbl_list .= ", reject_rbl_client ". $value;
133             }
134         }
135         unset($rbl_hosts);
75722e 136         
D 137         //* If Postgrey is installed, configure it
138         $greylisting = '';
139         if($conf['postgrey']['installed'] == true) {
20f478 140             $greylisting = ', check_recipient_access mysql:/etc/postfix/mysql-virtual_policy_greylist.cf';
75722e 141         }
D 142         
20f478 143         $reject_sender_login_mismatch = '';
D 144         if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
145             $reject_sender_login_mismatch = ', reject_authenticated_sender_login_mismatch';
146         }
147         unset($server_ini_array);
148         
b1a6a5 149         $postconf_placeholders = array('{config_dir}' => $config_dir,
MC 150             '{vmail_mailbox_base}' => $cf['vmail_mailbox_base'],
151             '{vmail_userid}' => $cf['vmail_userid'],
152             '{vmail_groupid}' => $cf['vmail_groupid'],
75722e 153             '{rbl_list}' => $rbl_list,
D 154             '{greylisting}' => $greylisting,
20f478 155             '{reject_slm}' => $reject_sender_login_mismatch,
75722e 156         );
20f478 157         
b1a6a5 158         $postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_postfix.conf.master', 'tpl/fedora_postfix.conf.master');
MC 159         $postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
160         $postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines
161
b67344 162         //* These postconf commands will be executed on installation only
T 163         if($this->is_update == false) {
b1a6a5 164             $postconf_commands = array_merge($postconf_commands, array(
MC 165                     'myhostname = '.$conf['hostname'],
166                     'mydestination = '.$conf['hostname'].', localhost, localhost.localdomain',
167                     'mynetworks = 127.0.0.0/8 [::1]/128'
168                 ));
b67344 169         }
b1a6a5 170
0711af 171         //* Create the header and body check files
T 172         touch($config_dir.'/header_checks');
173         touch($config_dir.'/mime_header_checks');
174         touch($config_dir.'/nested_header_checks');
175         touch($config_dir.'/body_checks');
b1a6a5 176
3f478f 177         //* Create the mailman files
T 178         if(!is_dir('/var/lib/mailman/data')) exec('mkdir -p /var/lib/mailman/data');
179         //if(!is_file('/var/lib/mailman/data/aliases')) touch('/var/lib/mailman/data/aliases');
180         if(is_file('/var/lib/mailman/data/aliases')) unlink('/var/lib/mailman/data/aliases');
b1a6a5 181         if(!is_link('/var/lib/mailman/data/aliases')) symlink('/etc/mailman/aliases', '/var/lib/mailman/data/aliases');
3f478f 182         exec('postalias /var/lib/mailman/data/aliases');
79bd20 183         if(!is_file('/etc/mailman/virtual-mailman')) touch('/etc/mailman/virtual-mailman');
TB 184         exec('postmap /etc/mailman/virtual-mailman');
3f478f 185         if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman');
T 186         exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman');
b1a6a5 187
0711af 188         //* Make a backup copy of the main.cf file
T 189         copy($config_dir.'/main.cf', $config_dir.'/main.cf~');
b1a6a5 190
0711af 191         //* Executing the postconf commands
T 192         foreach($postconf_commands as $cmd) {
193             $command = "postconf -e '$cmd'";
194             caselog($command." &> /dev/null", __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
195         }
b1a6a5 196
MC 197         if(!stristr($options, 'dont-create-certs')) {
0711af 198             //* Create the SSL certificate
b04e82 199             if(AUTOINSTALL){
TB 200                 $command = 'cd '.$config_dir.'; '
c43c29 201                     ."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
b04e82 202             } else {
TB 203                 $command = 'cd '.$config_dir.'; '
c43c29 204                     .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509';
TB 205             }
0711af 206             exec($command);
b1a6a5 207
01423f 208             $command = 'chmod o= '.$config_dir.'/smtpd.key';
0711af 209             caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
T 210         }
b1a6a5 211
0711af 212         //** We have to change the permissions of the courier authdaemon directory to make it accessible for maildrop.
T 213         $command = 'chmod 755 /var/spool/authdaemon';
214         caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
b1a6a5 215
0711af 216         //* Changing maildrop lines in posfix master.cf
T 217         if(is_file($config_dir.'/master.cf')){
b1a6a5 218             copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
MC 219         }
0711af 220         if(is_file($config_dir.'/master.cf~')){
b1a6a5 221             exec('chmod 400 '.$config_dir.'/master.cf~');
MC 222         }
0711af 223         $configfile = $config_dir.'/master.cf';
T 224         $content = rf($configfile);
2c8f94 225         // if postfix package is from fedora or centios main repo
b1a6a5 226         $content = str_replace('#  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}',
MC 227             '  flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}',
228             $content);
229
2c8f94 230         // If postfix package is from centos plus repo
b1a6a5 231         $content = str_replace('#  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}',
MC 232             '  flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}',
233             $content);
234
235         $content = str_replace('  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}',
236             '  flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}',
237             $content);
238
239
240         $content = str_replace('#maildrop  unix  -       n       n       -       -       pipe',
241             'maildrop  unix  -       n       n       -       -       pipe',
242             $content);
243
0711af 244         wf($configfile, $content);
b1a6a5 245
0711af 246         //* Writing the Maildrop mailfilter file
T 247         $configfile = 'mailfilter';
248         if(is_file($cf['vmail_mailbox_base'].'/.'.$configfile)){
b1a6a5 249             copy($cf['vmail_mailbox_base'].'/.'.$configfile, $cf['vmail_mailbox_base'].'/.'.$configfile.'~');
MC 250         }
615a0a 251         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master");
0711af 252         $content = str_replace('{dist_postfix_vmail_mailbox_base}', $cf['vmail_mailbox_base'], $content);
T 253         wf($cf['vmail_mailbox_base'].'/.'.$configfile, $content);
b1a6a5 254
0711af 255         //* Create the directory for the custom mailfilters
T 256         $command = 'mkdir '.$cf['vmail_mailbox_base'].'/mailfilters';
257         caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 258
0711af 259         //* Chmod and chown the .mailfilter file
T 260         $command = 'chown -R '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base'].'/.mailfilter';
261         caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 262
0711af 263         $command = 'chmod -R 600 '.$cf['vmail_mailbox_base'].'/.mailfilter';
T 264         caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 265
0711af 266     }
b1a6a5 267
0711af 268     public function configure_saslauthd() {
T 269         global $conf;
b1a6a5 270
0711af 271         $configfile = 'tpl/fedora_saslauthd_smtpd_conf.master';
615a0a 272         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_saslauthd_smtpd_conf.master', $configfile);
b1a6a5 273         wf('/usr/lib/sasl2/smtpd.conf', $content);
MC 274         if(is_dir('/usr/lib64')) wf('/usr/lib64/sasl/smtpd.conf', $content);
275         if(is_dir('/usr/lib64')) wf('/usr/lib64/sasl2/smtpd.conf', $content);
276
0711af 277     }
b1a6a5 278
0711af 279     public function configure_pam()
b1a6a5 280     {
0711af 281         global $conf;
T 282         $pam = $conf['pam'];
283         //* configure pam for SMTP authentication agains the ispconfig database
284         $configfile = 'pamd_smtp';
285         if(is_file("$pam/smtp"))    copy("$pam/smtp", "$pam/smtp~");
286         if(is_file("$pam/smtp~"))   exec("chmod 400 $pam/smtp~");
287
615a0a 288         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master");
0711af 289         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
T 290         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
291         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
292         $content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
293         wf("$pam/smtp", $content);
03bff7 294         // On some OSes smtp is world readable which allows for reading database information.  Removing world readable rights should have no effect.
T 295         if(is_file("$pam/smtp"))    exec("chmod o= $pam/smtp");
0711af 296     }
b1a6a5 297
0711af 298     public function configure_courier()
b1a6a5 299     {
0711af 300         global $conf;
T 301         $config_dir = $conf['courier']['config_dir'];
302         //* authmysqlrc
303         $configfile = 'authmysqlrc';
304         if(is_file("$config_dir/$configfile")){
b1a6a5 305             copy("$config_dir/$configfile", "$config_dir/$configfile~");
MC 306         }
0711af 307         exec("chmod 400 $config_dir/$configfile~");
615a0a 308         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master");
b1a6a5 309         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
MC 310         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
311         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
312         $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
82e9b9 313         $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
0711af 314         wf("$config_dir/$configfile", $content);
b1a6a5 315
0711af 316         exec("chmod 660 $config_dir/$configfile");
T 317         exec("chown root:root $config_dir/$configfile");
b1a6a5 318
0711af 319         //* authdaemonrc
T 320         $configfile = $conf['courier']['config_dir'].'/authdaemonrc';
321         if(is_file($configfile)){
b1a6a5 322             copy($configfile, $configfile.'~');
MC 323         }
0711af 324         if(is_file($configfile.'~')){
b1a6a5 325             exec('chmod 400 '.$configfile.'~');
MC 326         }
0711af 327         $content = rf($configfile);
T 328         $content = str_replace('authmodulelist=', 'authmodulelist="authmysql"', $content);
329         wf($configfile, $content);
330     }
b1a6a5 331
0f2bb1 332     public function configure_dovecot()
b1a6a5 333     {
0f2bb1 334         global $conf;
b1a6a5 335
a8aad2 336         $virtual_transport = 'dovecot';
8b23f8 337
FS 338         $configure_lmtp = false;
a8aad2 339         
DM 340         // check if virtual_transport must be changed
341         if ($this->is_update) {
2af58c 342             $tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
a8aad2 343             $ini_array = ini_to_array(stripslashes($tmp['config']));
DM 344             // ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
345             
346             if(isset($ini_array['mail']['mailbox_virtual_uidgid_maps']) && $ini_array['mail']['mailbox_virtual_uidgid_maps'] == 'y') {
347                 $virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
8b23f8 348                 $configure_lmtp = true;
a8aad2 349             }
DM 350         }
351
bd5d26 352         $config_dir = $conf['postfix']['config_dir'];
9c6782 353
0f2bb1 354         //* Configure master.cf and add a line for deliver
9c6782 355         if(!$this->get_postfix_service('dovecot', 'unix')) {
bd5d26 356             //* backup
FS 357             if(is_file($config_dir.'/master.cf')){
358                 copy($config_dir.'/master.cf', $config_dir.'/master.cf~2');
359             }
360             if(is_file($config_dir.'/master.cf~')){
361                 chmod($config_dir.'/master.cf~2', 0400);
362             }
363             //* Configure master.cf and add a line for deliver
364             $content = rf($conf["postfix"]["config_dir"].'/master.cf');
9c6782 365             $deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n";
b1a6a5 366             af($conf["postfix"]["config_dir"].'/master.cf', $deliver_content);
bd5d26 367             unset($content);
FS 368             unset($deliver_content);
0f2bb1 369         }
b1a6a5 370
0f2bb1 371         //* Reconfigure postfix to use dovecot authentication
T 372         // Adding the amavisd commands to the postfix configuration
373         $postconf_commands = array (
374             'dovecot_destination_recipient_limit = 1',
a8aad2 375             'virtual_transport = '.$virtual_transport,
0f2bb1 376             'smtpd_sasl_type = dovecot',
T 377             'smtpd_sasl_path = private/auth',
378         );
b1a6a5 379
0f2bb1 380         // Make a backup copy of the main.cf file
b1a6a5 381         copy($conf["postfix"]["config_dir"].'/main.cf', $conf["postfix"]["config_dir"].'/main.cf~3');
MC 382
0f2bb1 383         // Executing the postconf commands
T 384         foreach($postconf_commands as $cmd) {
385             $command = "postconf -e '$cmd'";
386             caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
387         }
bd5d26 388
FS 389         //* Use /etc/dovecot as config dir if exists
390 //        if(is_dir('/etc/dovecot')) $config_dir = '/etc/dovecot';
391         $config_dir = $conf['dovecot']['config_dir'];
b1a6a5 392
31e0d1 393         //* backup dovecot.conf
0f2bb1 394         $configfile = 'dovecot.conf';
T 395         if(is_file("$config_dir/$configfile")){
b1a6a5 396             copy("$config_dir/$configfile", "$config_dir/$configfile~");
MC 397         }
398
31e0d1 399         //* Get the dovecot version
b1a6a5 400         exec('dovecot --version', $tmp);
b79f6c 401         $dovecot_version = $tmp[0];
31e0d1 402         unset($tmp);
b1a6a5 403
31e0d1 404         //* Copy dovecot configuration file
b79f6c 405         if(version_compare($dovecot_version,2) >= 0) {
b1a6a5 406             if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot2.conf.master')) {
MC 407                 copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot2.conf.master', $config_dir.'/'.$configfile);
408             } else {
409                 copy('tpl/fedora_dovecot2.conf.master', $config_dir.'/'.$configfile);
410             }
b79f6c 411             if(version_compare($dovecot_version,2.1) < 0) {
TB 412                 removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
413             }
31e0d1 414         } else {
b1a6a5 415             if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot.conf.master')) {
MC 416                 copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot.conf.master', $config_dir.'/'.$configfile);
417             } else {
418                 copy('tpl/fedora_dovecot.conf.master', $config_dir.'/'.$configfile);
419             }
31e0d1 420         }
615a0a 421
8b23f8 422         //* dovecot-lmtpd
FS 423         if($configure_lmtp) {
424             replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
425         }
426
0f2bb1 427         //* dovecot-sql.conf
T 428         $configfile = 'dovecot-sql.conf';
429         if(is_file("$config_dir/$configfile")){
b1a6a5 430             copy("$config_dir/$configfile", "$config_dir/$configfile~");
0f2bb1 431             exec("chmod 400 $config_dir/$configfile~");
b1a6a5 432         }
85f6fb 433         
TB 434         if(!@file_exists('/etc/dovecot-sql.conf')) exec('ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf');
b1a6a5 435
615a0a 436         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot-sql.conf.master', "tpl/fedora_dovecot-sql.conf.master");
b1a6a5 437         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
MC 438         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
439         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
440         $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
82e9b9 441         $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
032b86 442         $content = str_replace('{server_id}', $conf['server_id'], $content);
0f2bb1 443         wf("$config_dir/$configfile", $content);
b1a6a5 444
0f2bb1 445         exec("chmod 600 $config_dir/$configfile");
T 446         exec("chown root:root $config_dir/$configfile");
5e7306 447         
TB 448         // Dovecot shall ignore mounts in website directory
85f6fb 449         if(is_installed('doveadm')) exec("doveadm mount add '/var/www/*' ignore > /dev/null 2> /dev/null");
0f2bb1 450
T 451     }
b1a6a5 452
0711af 453     public function configure_amavis() {
T 454         global $conf;
b1a6a5 455
0711af 456         // amavisd user config file
T 457         $configfile = 'fedora_amavisd_conf';
b1a6a5 458         if(is_file($conf["amavis"]["config_dir"].'/amavisd.conf')) copy($conf["amavis"]["config_dir"].'/amavisd.conf', $conf["amavis"]["config_dir"].'/amavisd.conf~');
0711af 459         if(is_file($conf["amavis"]["config_dir"].'/amavisd.conf~')) exec('chmod 400 '.$conf["amavis"]["config_dir"].'/amavisd.conf~');
615a0a 460         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/".$configfile.".master");
b1a6a5 461         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
MC 462         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
463         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
464         $content = str_replace('{mysql_server_port}', $conf["mysql"]["port"], $content);
465         $content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
466         $content = str_replace('{hostname}', $conf['hostname'], $content);
467         wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content);
c83951 468         chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
b1a6a5 469
MC 470
0711af 471         // Adding the amavisd commands to the postfix configuration
T 472         $postconf_commands = array (
473             'content_filter = amavis:[127.0.0.1]:10024',
474             'receive_override_options = no_address_mappings'
475         );
b1a6a5 476
0711af 477         // Make a backup copy of the main.cf file
b1a6a5 478         copy($conf["postfix"]["config_dir"].'/main.cf', $conf["postfix"]["config_dir"].'/main.cf~2');
MC 479
0711af 480         // Executing the postconf commands
T 481         foreach($postconf_commands as $cmd) {
482             $command = "postconf -e '$cmd'";
483             caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
484         }
b1a6a5 485
bd5d26 486         $config_dir = $conf['postfix']['config_dir'];
FS 487
488         // Adding amavis-services to the master.cf file if the service does not already exists
9c6782 489         $add_amavis = !$this->get_postfix_service('amavis','unix');
FS 490         $add_amavis_10025 = !$this->get_postfix_service('127.0.0.1:10025','inet');
491         $add_amavis_10027 = !$this->get_postfix_service('127.0.0.1:10027','inet');
bd5d26 492
FS 493         if ($add_amavis || $add_amavis_10025 || $add_amavis_10027) {
494             //* backup master.cf
495             if(is_file($config_dir.'/master.cf')) copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
496             // adjust amavis-config
497             if($add_amavis) {
498                 $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', 'tpl/master_cf_amavis.master');
499                 af($config_dir.'/master.cf', $content);
500                 unset($content);
501             }
502             if ($add_amavis_10025) {
503                 $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10025.master', 'tpl/master_cf_amavis10025.master');
504                 af($config_dir.'/master.cf', $content);
505                 unset($content);
506             }
507             if ($add_amavis_10027) {
508                 $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis10027.master', 'tpl/master_cf_amavis10027.master');
509                 af($config_dir.'/master.cf', $content);
510                 unset($content);
511             }
44ae08 512         }
b1a6a5 513
MC 514         removeLine('/etc/sysconfig/freshclam', 'FRESHCLAM_DELAY=disabled-warn   # REMOVE ME', 1);
515         replaceLine('/etc/freshclam.conf', 'Example', '# Example', 1);
516
0711af 517         // Add the clamav user to the vscan group
T 518         //exec('groupmod --add-user clamav vscan');
b1a6a5 519
MC 520
0711af 521     }
b1a6a5 522
0711af 523     public function configure_spamassassin()
b1a6a5 524     {
0711af 525         global $conf;
b1a6a5 526
0711af 527         //* Enable spamasasssin on debian and ubuntu
T 528         /*
529         $configfile = '/etc/default/spamassassin';
530         if(is_file($configfile)){
531             copy($configfile, $configfile.'~');
532         }
533         $content = rf($configfile);
534         $content = str_replace('ENABLED=0', 'ENABLED=1', $content);
535         wf($configfile, $content);
536         */
537     }
b1a6a5 538
0711af 539     public function configure_getmail()
b1a6a5 540     {
0711af 541         global $conf;
b1a6a5 542
0711af 543         $config_dir = $conf['getmail']['config_dir'];
b1a6a5 544
0711af 545         if(!is_dir($config_dir)) exec("mkdir -p ".escapeshellcmd($config_dir));
T 546
547         $command = "useradd -d $config_dir getmail";
392450 548         if(!is_user('getmail')) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 549
0711af 550         $command = "chown -R getmail $config_dir";
T 551         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 552
0711af 553         $command = "chmod -R 700 $config_dir";
T 554         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
555     }
b1a6a5 556
MC 557
0711af 558     public function configure_pureftpd()
b1a6a5 559     {
0711af 560         global $conf;
b1a6a5 561
0711af 562         $config_dir = $conf['pureftpd']['config_dir'];
T 563
564         //* configure pam for SMTP authentication agains the ispconfig database
565         $configfile = 'pureftpd-mysql.conf';
566         if(is_file("$config_dir/$configfile")){
b1a6a5 567             copy("$config_dir/$configfile", "$config_dir/$configfile~");
MC 568         }
0711af 569         if(is_file("$config_dir/$configfile~")){
b1a6a5 570             exec("chmod 400 $config_dir/$configfile~");
MC 571         }
615a0a 572         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/pureftpd_mysql.conf.master', 'tpl/pureftpd_mysql.conf.master');
0711af 573         $content = str_replace('{mysql_server_ispconfig_user}', $conf["mysql"]["ispconfig_user"], $content);
T 574         $content = str_replace('{mysql_server_ispconfig_password}', $conf["mysql"]["ispconfig_password"], $content);
575         $content = str_replace('{mysql_server_database}', $conf["mysql"]["database"], $content);
576         $content = str_replace('{mysql_server_ip}', $conf["mysql"]["ip"], $content);
577         $content = str_replace('{server_id}', $conf["server_id"], $content);
578         wf("$config_dir/$configfile", $content);
579         exec("chmod 600 $config_dir/$configfile");
580         exec("chown root:root $config_dir/$configfile");
b1a6a5 581
0711af 582         // copy our customized copy of pureftpd.conf to the pure-ftpd config directory
615a0a 583         if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_pureftpd_conf.master')) {
b1a6a5 584             exec("cp " . $conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_pureftpd_conf.master ' . "$config_dir/pure-ftpd.conf");
MC 585         }else {
586             exec("cp tpl/fedora_pureftpd_conf.master $config_dir/pure-ftpd.conf");
587         }
588
0711af 589     }
b1a6a5 590
0711af 591     public function configure_mydns()
b1a6a5 592     {
0711af 593         global $conf;
b1a6a5 594
0711af 595         // configure mydns
T 596         $configfile = 'mydns.conf';
b1a6a5 597         if(is_file($conf["mydns"]["config_dir"].'/'.$configfile)) copy($conf["mydns"]["config_dir"].'/'.$configfile, $conf["mydns"]["config_dir"].'/'.$configfile.'~');
0711af 598         if(is_file($conf["mydns"]["config_dir"].'/'.$configfile.'~')) exec('chmod 400 '.$conf["mydns"]["config_dir"].'/'.$configfile.'~');
615a0a 599         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/".$configfile.".master");
b1a6a5 600         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
MC 601         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
602         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
603         $content = str_replace('{mysql_server_host}', $conf["mysql"]["host"], $content);
223c56 604         $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
b1a6a5 605         $content = str_replace('{server_id}', $conf["server_id"], $content);
MC 606         wf($conf["mydns"]["config_dir"].'/'.$configfile, $content);
0711af 607         exec('chmod 600 '.$conf["mydns"]["config_dir"].'/'.$configfile);
T 608         exec('chown root:root '.$conf["mydns"]["config_dir"].'/'.$configfile);
b1a6a5 609
0711af 610     }
b1a6a5 611
0f2bb1 612     public function configure_bind() {
T 613         global $conf;
b1a6a5 614
0f2bb1 615         // add the include line at the end of named.conf.
b1a6a5 616         replaceLine('/etc/named.conf', 'include "/etc/named.conf.local";', 'include "/etc/named.conf.local";', 0, 1);
fd4cfd 617
D 618         //* Check if the zonefile directory has a slash at the end
619         $content=$conf['bind']['bind_zonefiles_dir'];
b1a6a5 620         if(substr($content, -1, 1) != '/') {
fd4cfd 621             $content .= '/';
D 622         }
623
624         //* Create the slave subdirectory
625         $content .= 'slave';
626         $content_mkdir = 'mkdir -p '.$content;
627         exec($content_mkdir);
628
629         //* Chown the slave subdirectory to $conf['bind']['bind_user']
630         exec('chown '.$conf['bind']['bind_user'].':'.$conf['bind']['bind_group'].' '.$content);
fc7f1b 631         exec('chmod 2770 '.$content);
b1a6a5 632
0f2bb1 633     }
b1a6a5 634
0711af 635     public function configure_apache()
b1a6a5 636     {
0711af 637         global $conf;
b1a6a5 638
1bd269 639         if($conf['apache']['installed'] == false) return;
bde98e 640         if(is_file('/etc/suphp.conf')) {
4c7fd5 641             //replaceLine('/etc/suphp.conf','php=php:/usr/bin','x-httpd-suphp=php:/usr/bin/php-cgi',0);
b1a6a5 642             replaceLine('/etc/suphp.conf', 'docroot=', 'docroot=/var/www', 0);
MC 643             replaceLine('/etc/suphp.conf', 'umask=0077', 'umask=0022', 0);
bde98e 644         }
b1a6a5 645
0711af 646         //* Create the logging directory for the vhost logfiles
T 647         exec('mkdir -p /var/log/ispconfig/httpd');
b1a6a5 648
0711af 649         // Sites enabled and avaulable dirs
T 650         exec('mkdir -p '.$conf['apache']['vhost_conf_enabled_dir']);
651         exec('mkdir -p '.$conf['apache']['vhost_conf_dir']);
b1a6a5 652
0711af 653         $content = rf('/etc/httpd/conf/httpd.conf');
b1a6a5 654         if(!stristr($content, 'Include /etc/httpd/conf/sites-enabled/')) {
MC 655             af('/etc/httpd/conf/httpd.conf', "\nNameVirtualHost *:80\nNameVirtualHost *:443\nInclude /etc/httpd/conf/sites-enabled/\n\n");
0711af 656         }
T 657         unset($content);
b1a6a5 658
9de0c4 659         //* Copy the ISPConfig configuration include
b1a6a5 660         $vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
MC 661         $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
662
ccbf14 663         $tpl = new tpl('apache_ispconfig.conf.master');
TB 664         $tpl->setVar('apache_version',getapacheversion());
665         
2af58c 666         $records = $this->db->queryAllRecords("SELECT * FROM ?? WHERE server_id = ? AND virtualhost = 'y'", $conf['mysql']['master_database'] . '.server_ip', $conf['server_id']);
ccbf14 667         $ip_addresses = array();
TB 668         
fb3a98 669         if(is_array($records) && count($records) > 0) {
86e3bb 670             foreach($records as $rec) {
a2156e 671                 if($rec['ip_type'] == 'IPv6') {
T 672                     $ip_address = '['.$rec['ip_address'].']';
673                 } else {
674                     $ip_address = $rec['ip_address'];
675                 }
b1a6a5 676                 $ports = explode(',', $rec['virtualhost_port']);
a2156e 677                 if(is_array($ports)) {
T 678                     foreach($ports as $port) {
679                         $port = intval($port);
680                         if($port > 0 && $port < 65536 && $ip_address != '') {
ccbf14 681                             $ip_addresses[] = array('ip_address' => $ip_address, 'port' => $port);
a2156e 682                         }
T 683                     }
684                 }
86e3bb 685             }
T 686         }
855547 687         
3de838 688         if(count($ip_addresses) > 0) $tpl->setLoop('ip_adresses',$ip_addresses);
b1a6a5 689
ccbf14 690         wf($vhost_conf_dir.'/ispconfig.conf', $tpl->grab());
TB 691         unset($tpl);
b1a6a5 692
9de0c4 693         if(!@is_link($vhost_conf_enabled_dir."/000-ispconfig.conf")) {
T 694             exec("ln -s ".$vhost_conf_dir."/ispconfig.conf ".$vhost_conf_enabled_dir."/000-ispconfig.conf");
695         }
b1a6a5 696
99d5dc 697         //* make sure that webalizer finds its config file when it is directly in /etc
T 698         if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
699             exec('mkdir /etc/webalizer');
700             exec('ln -s /etc/webalizer.conf /etc/webalizer/webalizer.conf');
701         }
b1a6a5 702
99d5dc 703         if(is_file('/etc/webalizer/webalizer.conf')) {
T 704             // Change webalizer mode to incremental
b1a6a5 705             replaceLine('/etc/webalizer/webalizer.conf', '#IncrementalName', 'IncrementalName webalizer.current', 0, 0);
MC 706             replaceLine('/etc/webalizer/webalizer.conf', '#Incremental', 'Incremental     yes', 0, 0);
707             replaceLine('/etc/webalizer/webalizer.conf', '#HistoryName', 'HistoryName     webalizer.hist', 0, 0);
99d5dc 708         }
b1a6a5 709
6b029a 710         //* add a sshusers group
T 711         $command = 'groupadd sshusers';
712         if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 713
0711af 714     }
b1a6a5 715
d95ed9 716     public function configure_nginx(){
F 717         global $conf;
b1a6a5 718
d95ed9 719         if($conf['nginx']['installed'] == false) return;
F 720         //* Create the logging directory for the vhost logfiles
721         if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true);
b1a6a5 722
d95ed9 723         // Sites enabled and avaulable dirs
F 724         exec('mkdir -p '.$conf['nginx']['vhost_conf_enabled_dir']);
725         exec('mkdir -p '.$conf['nginx']['vhost_conf_dir']);
726
b1a6a5 727         wf('/etc/nginx/conf.d/ispconfig_vhosts.conf', "include /etc/nginx/sites-enabled/*.vhost;");
d95ed9 728
F 729         //* make sure that webalizer finds its config file when it is directly in /etc
730         if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
731             mkdir('/etc/webalizer');
b1a6a5 732             symlink('/etc/webalizer.conf', '/etc/webalizer/webalizer.conf');
d95ed9 733         }
F 734
735         if(is_file('/etc/webalizer/webalizer.conf')) {
736             // Change webalizer mode to incremental
b1a6a5 737             replaceLine('/etc/webalizer/webalizer.conf', '#IncrementalName', 'IncrementalName webalizer.current', 0, 0);
MC 738             replaceLine('/etc/webalizer/webalizer.conf', '#Incremental', 'Incremental     yes', 0, 0);
739             replaceLine('/etc/webalizer/webalizer.conf', '#HistoryName', 'HistoryName     webalizer.hist', 0, 0);
d95ed9 740         }
b1a6a5 741
d95ed9 742         // Check the awsatst script
F 743         if(!is_dir('/usr/share/awstats/tools')) exec('mkdir -p /usr/share/awstats/tools');
b1a6a5 744         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');
MC 745         if(file_exists('/etc/awstats/awstats.conf.local')) replaceLine('/etc/awstats/awstats.conf.local', 'LogFormat=4', 'LogFormat=1', 0, 1);
746
d95ed9 747         //* add a sshusers group
F 748         $command = 'groupadd sshusers';
749         if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
750     }
b1a6a5 751
ca2165 752     public function configure_bastille_firewall()
0711af 753     {
T 754         global $conf;
b1a6a5 755
0711af 756         $dist_init_scripts = $conf['init_scripts'];
b1a6a5 757
0711af 758         if(is_dir("/etc/Bastille.backup")) caselog("rm -rf /etc/Bastille.backup", __FILE__, __LINE__);
T 759         if(is_dir("/etc/Bastille")) caselog("mv -f /etc/Bastille /etc/Bastille.backup", __FILE__, __LINE__);
b1a6a5 760         @mkdir("/etc/Bastille", octdec($directory_mode));
MC 761         if(is_dir("/etc/Bastille.backup/firewall.d")) caselog("cp -pfr /etc/Bastille.backup/firewall.d /etc/Bastille/", __FILE__, __LINE__);
762         if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/bastille-firewall.cfg.master')) {
763             caselog("cp -f " . $conf['ispconfig_install_dir']."/server/conf-custom/install/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
764         } else {
765             caselog("cp -f tpl/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
766         }
767         caselog("chmod 644 /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
768         $content = rf("/etc/Bastille/bastille-firewall.cfg");
769         $content = str_replace("{DNS_SERVERS}", "", $content);
0711af 770
b1a6a5 771         $tcp_public_services = '';
MC 772         $udp_public_services = '';
773
2af58c 774         $row = $this->db->queryOneRecord('SELECT * FROM ?? WHERE server_id = ?', $conf["mysql"]["database"] . '.firewall', $conf['server_id']);
b1a6a5 775
MC 776         if(trim($row["tcp_port"]) != '' || trim($row["udp_port"]) != ''){
777             $tcp_public_services = trim(str_replace(',', ' ', $row["tcp_port"]));
778             $udp_public_services = trim(str_replace(',', ' ', $row["udp_port"]));
779         } else {
780             $tcp_public_services = '21 22 25 53 80 110 443 3306 8080 10000';
781             $udp_public_services = '53';
782         }
9ce725 783         if(!stristr($tcp_public_services, $conf['apache']['vhost_port'])) {
96cc31 784             $tcp_public_services .= ' '.intval($conf['apache']['vhost_port']);
2af58c 785             if($row["tcp_port"] != '') $this->db->query("UPDATE firewall SET tcp_port = tcp_port + ? WHERE server_id = ?", ',' . intval($conf['apache']['vhost_port']), $conf['server_id']);
9ce725 786         }
0711af 787
b1a6a5 788         $content = str_replace("{TCP_PUBLIC_SERVICES}", $tcp_public_services, $content);
MC 789         $content = str_replace("{UDP_PUBLIC_SERVICES}", $udp_public_services, $content);
0711af 790
b1a6a5 791         wf("/etc/Bastille/bastille-firewall.cfg", $content);
0711af 792
b1a6a5 793         if(is_file($dist_init_scripts."/bastille-firewall")) caselog("mv -f $dist_init_scripts/bastille-firewall $dist_init_scripts/bastille-firewall.backup", __FILE__, __LINE__);
MC 794         caselog("cp -f apps/bastille-firewall $dist_init_scripts", __FILE__, __LINE__);
795         caselog("chmod 700 $dist_init_scripts/bastille-firewall", __FILE__, __LINE__);
0711af 796
b1a6a5 797         if(is_file("/sbin/bastille-ipchains")) caselog("mv -f /sbin/bastille-ipchains /sbin/bastille-ipchains.backup", __FILE__, __LINE__);
MC 798         caselog("cp -f apps/bastille-ipchains /sbin", __FILE__, __LINE__);
799         caselog("chmod 700 /sbin/bastille-ipchains", __FILE__, __LINE__);
800
801         if(is_file("/sbin/bastille-netfilter")) caselog("mv -f /sbin/bastille-netfilter /sbin/bastille-netfilter.backup", __FILE__, __LINE__);
802         caselog("cp -f apps/bastille-netfilter /sbin", __FILE__, __LINE__);
803         caselog("chmod 700 /sbin/bastille-netfilter", __FILE__, __LINE__);
804
0711af 805         if(!@is_dir('/var/lock/subsys')) caselog("mkdir /var/lock/subsys", __FILE__, __LINE__);
T 806
b1a6a5 807         exec("which ipchains &> /dev/null", $ipchains_location, $ret_val);
MC 808         if(!is_file("/sbin/ipchains") && !is_link("/sbin/ipchains") && $ret_val == 0) phpcaselog(@symlink(shell_exec("which ipchains"), "/sbin/ipchains"), 'create symlink', __FILE__, __LINE__);
809         unset($ipchains_location);
810         exec("which iptables &> /dev/null", $iptables_location, $ret_val);
811         if(!is_file("/sbin/iptables") && !is_link("/sbin/iptables") && $ret_val == 0) phpcaselog(@symlink(trim(shell_exec("which iptables")), "/sbin/iptables"), 'create symlink', __FILE__, __LINE__);
812         unset($iptables_location);
0711af 813
T 814     }
b1a6a5 815
0711af 816     public function install_ispconfig()
b1a6a5 817     {
0711af 818         global $conf;
b1a6a5 819
0711af 820         $install_dir = $conf['ispconfig_install_dir'];
T 821
822         //* Create the ISPConfig installation directory
823         if(!@is_dir("$install_dir")) {
824             $command = "mkdir $install_dir";
825             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
826         }
b1a6a5 827
0711af 828         //* Create a ISPConfig user and group
T 829         $command = 'groupadd ispconfig';
392450 830         if(!is_group('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 831
0711af 832         $command = "useradd -g ispconfig -d $install_dir ispconfig";
392450 833         if(!is_user('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 834
0711af 835         //* copy the ISPConfig interface part
T 836         $command = "cp -rf ../interface $install_dir";
837         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 838
0711af 839         //* copy the ISPConfig server part
T 840         $command = "cp -rf ../server $install_dir";
841         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
a13af2 842         
fb6c56 843         //* Make a backup of the security settings
TB 844         if(is_file('/usr/local/ispconfig/security/security_settings.ini')) copy('/usr/local/ispconfig/security/security_settings.ini','/usr/local/ispconfig/security/security_settings.ini~');
845         
a13af2 846         //* copy the ISPConfig security part
TB 847         $command = 'cp -rf ../security '.$install_dir;
848         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
fb6c56 849         
TB 850         //* Apply changed security_settings.ini values to new security_settings.ini file
851         if(is_file('/usr/local/ispconfig/security/security_settings.ini~')) {
852             $security_settings_old = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini~'));
853             $security_settings_new = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini'));
854             if(is_array($security_settings_new) && is_array($security_settings_old)) {
855                 foreach($security_settings_new as $section => $sval) {
856                     if(is_array($sval)) {
857                         foreach($sval as $key => $val) {
858                             if(isset($security_settings_old[$section]) && isset($security_settings_old[$section][$key])) {
859                                 $security_settings_new[$section][$key] = $security_settings_old[$section][$key];
860                             }
861                         }
862                     }
863                 }
864                 file_put_contents('/usr/local/ispconfig/security/security_settings.ini',array_to_ini($security_settings_new));
865             }
866         }
b1a6a5 867
0711af 868         //* Create a symlink, so ISPConfig is accessible via web
T 869         // Replaced by a separate vhost definition for port 8080
870         // $command = "ln -s $install_dir/interface/web/ /var/www/ispconfig";
871         // caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 872
0711af 873         //* Create the config file for ISPConfig interface
T 874         $configfile = 'config.inc.php';
875         if(is_file($install_dir.'/interface/lib/'.$configfile)){
b1a6a5 876             copy("$install_dir/interface/lib/$configfile", "$install_dir/interface/lib/$configfile~");
MC 877         }
615a0a 878         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master");
0711af 879         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
b1a6a5 880         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
0711af 881         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
T 882         $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
82e9b9 883         $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
b1a6a5 884
12e3ba 885         $content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
T 886         $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
887         $content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
888         $content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
82e9b9 889         $content = str_replace('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
b1a6a5 890
7c3b60 891         $content = str_replace('{server_id}', $conf['server_id'], $content);
0711af 892         $content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
56f1f4 893         $content = str_replace('{language}', $conf['language'], $content);
8cf78b 894         $content = str_replace('{timezone}', $conf['timezone'], $content);
41eaa8 895         $content = str_replace('{theme}', $conf['theme'], $content);
992797 896         $content = str_replace('{language_file_import_enabled}', ($conf['language_file_import_enabled'] == true)?'true':'false', $content);
b1a6a5 897
0711af 898         wf("$install_dir/interface/lib/$configfile", $content);
b1a6a5 899
0711af 900         //* Create the config file for ISPConfig server
T 901         $configfile = 'config.inc.php';
902         if(is_file($install_dir.'/server/lib/'.$configfile)){
b1a6a5 903             copy("$install_dir/server/lib/$configfile", "$install_dir/interface/lib/$configfile~");
MC 904         }
615a0a 905         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master");
0711af 906         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
T 907         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
908         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
909         $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
82e9b9 910         $content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
b1a6a5 911
12e3ba 912         $content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
T 913         $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
914         $content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
915         $content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
82e9b9 916         $content = str_replace('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
b1a6a5 917
0711af 918         $content = str_replace('{server_id}', $conf['server_id'], $content);
T 919         $content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
5898e6 920         $content = str_replace('{language}', $conf['language'], $content);
8cf78b 921         $content = str_replace('{timezone}', $conf['timezone'], $content);
41eaa8 922         $content = str_replace('{theme}', $conf['theme'], $content);
992797 923         $content = str_replace('{language_file_import_enabled}', ($conf['language_file_import_enabled'] == true)?'true':'false', $content);
5c4d55 924
0711af 925         wf("$install_dir/server/lib/$configfile", $content);
b1a6a5 926
fb3a98 927         //* Create the config file for remote-actions (but only, if it does not exist, because
T 928         //  the value is a autoinc-value and so changed by the remoteaction_core_module
929         if (!file_exists($install_dir.'/server/lib/remote_action.inc.php')) {
930             $content = '<?php' . "\n" . '$maxid_remote_action = 0;' . "\n" . '?>';
931             wf($install_dir.'/server/lib/remote_action.inc.php', $content);
932         }
b1a6a5 933
0711af 934         //* Enable the server modules and plugins.
T 935         // TODO: Implement a selector which modules and plugins shall be enabled.
936         $dir = $install_dir.'/server/mods-available/';
937         if (is_dir($dir)) {
938             if ($dh = opendir($dir)) {
939                 while (($file = readdir($dh)) !== false) {
b1a6a5 940                     if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
MC 941                         include_once $install_dir.'/server/mods-available/'.$file;
942                         $module_name = substr($file, 0, -8);
392450 943                         $tmp = new $module_name;
T 944                         if($tmp->onInstall()) {
945                             if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
946                             if (strpos($file, '_core_module') !== false) {
947                                 if(!@is_link($install_dir.'/server/mods-core/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
948                             }
0d0cd9 949                         }
392450 950                         unset($tmp);
0711af 951                     }
T 952                 }
953                 closedir($dh);
954             }
955         }
b1a6a5 956
0711af 957         $dir = $install_dir.'/server/plugins-available/';
T 958         if (is_dir($dir)) {
959             if ($dh = opendir($dir)) {
960                 while (($file = readdir($dh)) !== false) {
1bd269 961                     if($conf['apache']['installed'] == true && $file == 'nginx_plugin.inc.php') continue;
F 962                     if($conf['nginx']['installed'] == true && $file == 'apache2_plugin.inc.php') continue;
b1a6a5 963                     if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
MC 964                         include_once $install_dir.'/server/plugins-available/'.$file;
965                         $plugin_name = substr($file, 0, -8);
392450 966                         $tmp = new $plugin_name;
T 967                         if($tmp->onInstall()) {
968                             if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
969                             if (strpos($file, '_core_plugin') !== false) {
970                                 if(!@is_link($install_dir.'/server/plugins-core/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
971                             }
0d0cd9 972                         }
392450 973                         unset($tmp);
0711af 974                     }
T 975                 }
976                 closedir($dh);
977             }
978         }
b1a6a5 979
392450 980         // Update the server config
T 981         $mail_server_enabled = ($conf['services']['mail'])?1:0;
982         $web_server_enabled = ($conf['services']['web'])?1:0;
983         $dns_server_enabled = ($conf['services']['dns'])?1:0;
984         $file_server_enabled = ($conf['services']['file'])?1:0;
985         $db_server_enabled = ($conf['services']['db'])?1:0;
986         $vserver_server_enabled = ($conf['services']['vserver'])?1:0;
2af58c 987         $sql = "UPDATE `server` SET mail_server = ?, web_server = ?, dns_server = ?, file_server = ?, db_server = ?, vserver_server = ? WHERE server_id = ?";
b1a6a5 988
2af58c 989         $this->db->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']);
392450 990         if($conf['mysql']['master_slave_setup'] == 'y') {
2af58c 991             $this->dbmaster->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']);
392450 992         }
b1a6a5 993
fa029b 994         // chown install dir to root and chmod 755
3e0fc8 995         $command = 'chown root:root '.$install_dir;
TB 996         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
997         $command = 'chmod 755 '.$install_dir;
0711af 998         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
T 999
fa029b 1000         //* Chmod the files and directories in the install dir
3e0fc8 1001         $command = 'chmod -R 750 '.$install_dir.'/*';
TB 1002         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1003
1004         //* chown the interface files to the ispconfig user and group
1005         $command = 'chown -R ispconfig:ispconfig '.$install_dir.'/interface';
1006         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1007         
1008         //* chown the server files to the root user and group
1009         $command = 'chown -R root:root '.$install_dir.'/server';
0711af 1010         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
fa029b 1011         
TB 1012         //* chown the security files to the root user and group
1013         $command = 'chown -R root:root '.$install_dir.'/security';
1014         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1015         
1016         //* chown the security directory and security_settings.ini to root:ispconfig
1017         $command = 'chown root:ispconfig '.$install_dir.'/security/security_settings.ini';
1018         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1019         $command = 'chown root:ispconfig '.$install_dir.'/security';
1020         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
cb1221 1021         $command = 'chown root:ispconfig '.$install_dir.'/security/ids.whitelist';
TB 1022         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1023         $command = 'chown root:ispconfig '.$install_dir.'/security/ids.htmlfield';
1024         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1025         $command = 'chown root:ispconfig '.$install_dir.'/security/apache_directives.blacklist';
0711af 1026         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 1027
0711af 1028         //* Make the global language file directory group writable
T 1029         exec("chmod -R 770 $install_dir/interface/lib/lang");
b1a6a5 1030
0711af 1031         //* Make the temp directory for language file exports writable
T 1032         exec("chmod -R 770 $install_dir/interface/web/temp");
b1a6a5 1033
0711af 1034         //* Make all interface language file directories group writable
T 1035         $handle = @opendir($install_dir.'/interface/web');
b1a6a5 1036         while ($file = @readdir($handle)) {
MC 1037             if ($file != '.' && $file != '..') {
1038                 if(@is_dir($install_dir.'/interface/web'.'/'.$file.'/lib/lang')) {
0711af 1039                     $handle2 = opendir($install_dir.'/interface/web'.'/'.$file.'/lib/lang');
b1a6a5 1040                     chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang', 0770);
MC 1041                     while ($lang_file = @readdir($handle2)) {
0711af 1042                         if ($lang_file != '.' && $lang_file != '..') {
b1a6a5 1043                             chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang/'.$lang_file, 0770);
0711af 1044                         }
T 1045                     }
1046                 }
1047             }
1048         }
b1a6a5 1049
477d4e 1050         //* Make the APS directories group writable
T 1051         exec("chmod -R 770 $install_dir/interface/web/sites/aps_meta_packages");
1052         exec("chmod -R 770 $install_dir/server/aps_packages");
b1a6a5 1053
0711af 1054         //* make sure that the server config file (not the interface one) is only readable by the root user
bfcdef 1055         chmod($install_dir.'/server/lib/config.inc.php', 0600);
T 1056         chown($install_dir.'/server/lib/config.inc.php', 'root');
1057         chgrp($install_dir.'/server/lib/config.inc.php', 'root');
b1a6a5 1058
bfcdef 1059         //* Make sure thet the interface config file is readable by user ispconfig only
T 1060         chmod($install_dir.'/interface/lib/config.inc.php', 0600);
1061         chown($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
1062         chgrp($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
b1a6a5 1063
0711af 1064         if(@is_file("$install_dir/server/lib/mysql_clientdb.conf")) {
T 1065             exec("chmod 600 $install_dir/server/lib/mysql_clientdb.conf");
1066             exec("chown root:root $install_dir/server/lib/mysql_clientdb.conf");
1067         }
980485 1068         
TB 1069         if(is_dir($install_dir.'/interface/invoices')) {
1070             exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
1071             exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
1072         }
1073         
1074         exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
b1a6a5 1075
0711af 1076         // TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
T 1077         // and must be fixed as this will allow the apache user to read the ispconfig files.
1078         // Later this must run as own apache server or via suexec!
63b369 1079         if($conf['apache']['installed'] == true){
F 1080             $command = 'usermod -a -G ispconfig '.$conf['apache']['user'];
1081             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
272aec 1082             if(is_group('ispapps')){
F 1083                 $command = 'usermod -a -G ispapps '.$conf['apache']['user'];
1084                 caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1085             }
63b369 1086         }
F 1087         if($conf['nginx']['installed'] == true){
1088             $command = 'usermod -a -G ispconfig '.$conf['nginx']['user'];
1089             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
272aec 1090             if(is_group('ispapps')){
F 1091                 $command = 'usermod -a -G ispapps '.$conf['nginx']['user'];
1092                 caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1093             }
63b369 1094         }
b1a6a5 1095
0711af 1096         //* Make the shell scripts executable
T 1097         $command = "chmod +x $install_dir/server/scripts/*.sh";
1098         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
b1a6a5 1099
7e1cfb 1100         if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
1bd269 1101             //* Copy the ISPConfig vhost for the controlpanel
F 1102             // TODO: These are missing! should they be "vhost_dist_*_dir" ?
1103             $vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
1104             $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
b1a6a5 1105
MC 1106
1bd269 1107             // Dont just copy over the virtualhost template but add some custom settings
ccbf14 1108             $tpl = new tpl('apache_ispconfig.vhost.master');
TB 1109             $tpl->setVar('vhost_port',$conf['apache']['vhost_port']);
b1a6a5 1110
1bd269 1111             // comment out the listen directive if port is 80 or 443
F 1112             if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) {
ccbf14 1113                 $tpl->setVar('vhost_port_listen','#');
1bd269 1114             } else {
ccbf14 1115                 $tpl->setVar('vhost_port_listen','');
1bd269 1116             }
b1a6a5 1117
ccbf14 1118             if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
TB 1119                 $tpl->setVar('ssl_comment','');
1bd269 1120             } else {
ccbf14 1121                 $tpl->setVar('ssl_comment','#');
1bd269 1122             }
10b4c8 1123             if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key') && is_file($install_dir.'/interface/ssl/ispserver.bundle')) {
ccbf14 1124                 $tpl->setVar('ssl_bundle_comment','');
10b4c8 1125             } else {
ccbf14 1126                 $tpl->setVar('ssl_bundle_comment','#');
10b4c8 1127             }
ccbf14 1128             
TB 1129             $tpl->setVar('apache_version',getapacheversion());
b1a6a5 1130
ccbf14 1131             wf($vhost_conf_dir.'/ispconfig.vhost', $tpl->grab());
b1a6a5 1132
1bd269 1133             //copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
F 1134             //* and create the symlink
cc6568 1135             //if($this->is_update == false) {
b1a6a5 1136             if(@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) unlink("$vhost_conf_enabled_dir/ispconfig.vhost");
MC 1137             if(!@is_link("$vhost_conf_enabled_dir/000-ispconfig.vhost")) {
1138                 exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost");
1139             }
1140
1141             /*
1bd269 1142                 exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
F 1143                 exec('cp tpl/apache_ispconfig_fcgi_starter.master /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1144                 exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1145                 exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
1146                 exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
b1a6a5 1147
1bd269 1148                 replaceLine('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter','PHPRC=','PHPRC=/etc/',0,0);
526b99 1149                 */
b1a6a5 1150             //if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
MC 1151             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master');
1152             $content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
1153             $content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
1154             if(!is_dir('/var/www/php-fcgi-scripts/ispconfig')) exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
1155             wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
1156             exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1157             if(!is_link('/var/www/ispconfig')) exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
1158             exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
1159             //}
cc6568 1160             //}
f6d745 1161         }
b1a6a5 1162
7e1cfb 1163         if($conf['nginx']['installed'] == true && $this->install_ispconfig_interface == true){
1bd269 1164             //* Copy the ISPConfig vhost for the controlpanel
F 1165             $vhost_conf_dir = $conf['nginx']['vhost_conf_dir'];
1166             $vhost_conf_enabled_dir = $conf['nginx']['vhost_conf_enabled_dir'];
1167
1168             // Dont just copy over the virtualhost template but add some custom settings
615a0a 1169             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/nginx_ispconfig.vhost.master', 'tpl/nginx_ispconfig.vhost.master');
1bd269 1170             $content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
b1a6a5 1171
1bd269 1172             if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
10b4c8 1173                 $content = str_replace('{ssl_on}', ' on', $content);
1bd269 1174                 $content = str_replace('{ssl_comment}', '', $content);
F 1175                 $content = str_replace('{fastcgi_ssl}', 'on', $content);
1176             } else {
10b4c8 1177                 $content = str_replace('{ssl_on}', ' off', $content);
1bd269 1178                 $content = str_replace('{ssl_comment}', '#', $content);
F 1179                 $content = str_replace('{fastcgi_ssl}', 'off', $content);
0711af 1180             }
b1a6a5 1181
ca0b77 1182             $socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
b1a6a5 1183             if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
ca0b77 1184             if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
F 1185             $fpm_socket = $socket_dir.'ispconfig.sock';
b1a6a5 1186
ca0b77 1187             //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
F 1188             $content = str_replace('{fpm_socket}', $fpm_socket, $content);
1bd269 1189
F 1190             wf($vhost_conf_dir.'/ispconfig.vhost', $content);
b1a6a5 1191
1bd269 1192             unset($content);
b1a6a5 1193
1bd269 1194             // PHP-FPM
F 1195             // Dont just copy over the php-fpm pool template but add some custom settings
615a0a 1196             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/php_fpm_pool.conf.master', 'tpl/php_fpm_pool.conf.master');
1bd269 1197             $content = str_replace('{fpm_pool}', 'ispconfig', $content);
ca0b77 1198             //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
F 1199             $content = str_replace('{fpm_socket}', $fpm_socket, $content);
1bd269 1200             $content = str_replace('{fpm_user}', 'ispconfig', $content);
F 1201             $content = str_replace('{fpm_group}', 'ispconfig', $content);
1202             wf($conf['nginx']['php_fpm_pool_dir'].'/ispconfig.conf', $content);
1203
1204             //copy('tpl/nginx_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost');
1205             //* and create the symlink
7e1cfb 1206             if($this->is_update == false) {
1bd269 1207                 if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
F 1208                 if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
b1a6a5 1209                     symlink($vhost_conf_dir.'/ispconfig.vhost', $vhost_conf_enabled_dir.'/000-ispconfig.vhost');
1bd269 1210                 }
76f197 1211             }
b1a6a5 1212
3b273a 1213             // create symlink from /usr/share/phpmyadmin to /usr/share/phpMyAdmin, if it is installed
b1a6a5 1214             if(!@file_exists('/usr/share/phpmyadmin') && @is_dir('/usr/share/phpMyAdmin')) symlink('/usr/share/phpMyAdmin/', '/usr/share/phpmyadmin');
0711af 1215         }
b1a6a5 1216
0711af 1217         // Make the Clamav log files readable by ISPConfig
T 1218         //exec('chmod +r /var/log/clamav/clamav.log');
1219         //exec('chmod +r /var/log/clamav/freshclam.log');
b1a6a5 1220
66768a 1221         //* Install the update script
b34f99 1222         if(is_file('/usr/local/bin/ispconfig_update_from_dev.sh')) unlink('/usr/local/bin/ispconfig_update_from_dev.sh');
MC 1223         exec('chown root /usr/local/ispconfig/server/scripts/update_from_dev.sh');
1224         exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_dev.sh');
66768a 1225         exec('chown root /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
T 1226         exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
1227         exec('chown root /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
1228         exec('chmod 700 /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
b34f99 1229         if(!is_link('/usr/local/bin/ispconfig_update_from_dev.sh')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_update.sh /usr/local/bin/ispconfig_update_from_dev.sh');
608a8c 1230         if(!is_link('/usr/local/bin/ispconfig_update.sh')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_update.sh /usr/local/bin/ispconfig_update.sh');
b1a6a5 1231
76f197 1232         // set the fast cgi starter script to executable
T 1233         // exec('chmod 755 '.$install_dir.'/interface/bin/php-fcgi');
b1a6a5 1234
0711af 1235         //* Make the logs readable for the ispconfig user
T 1236         if(@is_file('/var/log/maillog')) exec('chmod +r /var/log/maillog');
1237         //if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
1238         //if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
1239         if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
b1a6a5 1240
0711af 1241         //To enable apache to read the directories
T 1242         // exec('chmod a+rx /usr/local/ispconfig');
1243         // exec('chmod -R 751 /usr/local/ispconfig/interface');
1244         // exec('chmod a+rx /usr/local/ispconfig/interface/web');
b1a6a5 1245
d9c8a7 1246         //* Create the ispconfig log directory
e38d14 1247         if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir']);
J 1248         if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) exec('touch '.$conf['ispconfig_log_dir'].'/ispconfig.log');
b1a6a5 1249
0c5b42 1250         if(is_user('getmail')) {
T 1251             exec('mv /usr/local/ispconfig/server/scripts/run-getmail.sh /usr/local/bin/run-getmail.sh');
1252             exec('chown getmail /usr/local/bin/run-getmail.sh');
1253             exec('chmod 744 /usr/local/bin/run-getmail.sh');
1254         }
b1a6a5 1255
9f56bd 1256         // Edit the file Edit the file /etc/sudoers and comment out the requiregetty line, otherwise the backup function will fail
b1a6a5 1257         replaceLine('/etc/sudoers', 'Defaults    requiretty', '#Defaults    requiretty', 0, 0);
MC 1258
8cf78b 1259         if(is_dir($install_dir.'/interface/invoices')) {
e94a9f 1260             exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
T 1261             exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
edf806 1262         }
b1a6a5 1263
0799f8 1264         //* Create the ispconfig auth log file and set uid/gid
T 1265         if(!is_file($conf['ispconfig_log_dir'].'/auth.log')) {
1266             touch($conf['ispconfig_log_dir'].'/auth.log');
1267         }
1268         exec('chown ispconfig:ispconfig '. $conf['ispconfig_log_dir'].'/auth.log');
1269         exec('chmod 660 '. $conf['ispconfig_log_dir'].'/auth.log');
b1a6a5 1270
d71bae 1271         //* Remove Domain module as its functions are available in the client module now
T 1272         if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
021aec 1273         
TB 1274         // Add symlink for patch tool
1275         if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
c83951 1276         
TB 1277         // Change mode of a few files from amavisd
1278         if(is_file($conf['amavis']['config_dir'].'/conf.d/50-user')) chmod($conf['amavis']['config_dir'].'/conf.d/50-user', 0640);
1279         if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
1280         if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
1281         if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
0711af 1282     }
T 1283 }
1284
fd4cfd 1285 ?>