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