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