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