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