Till Brehm
2014-10-19 b79f6ca284856d5ad1e260540b418b7eb634bc16
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);
b79f6c 419         $dovecot_version = $tmp[0];
31e0d1 420         unset($tmp);
7fe908 421
31e0d1 422         //* Copy dovecot configuration file
b79f6c 423         if(version_compare($dovecot_version,2) >= 0) {
7fe908 424             if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot2.conf.master')) {
MC 425                 copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot2.conf.master', $config_dir.'/'.$configfile);
426             } else {
427                 copy('tpl/fedora_dovecot2.conf.master', $config_dir.'/'.$configfile);
428             }
b79f6c 429             if(version_compare($dovecot_version,2.1) < 0) {
TB 430                 removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
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         }
980485 1061         
TB 1062         if(is_dir($install_dir.'/interface/invoices')) {
1063             exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
1064             exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
1065         }
1066         
1067         exec('chown -R root:root /usr/local/ispconfig/interface/ssl');
7fe908 1068
0711af 1069         // TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
T 1070         // and must be fixed as this will allow the apache user to read the ispconfig files.
1071         // Later this must run as own apache server or via suexec!
63b369 1072         if($conf['apache']['installed'] == true){
F 1073             $command = 'usermod -a -G ispconfig '.$conf['apache']['user'];
1074             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
272aec 1075             if(is_group('ispapps')){
F 1076                 $command = 'usermod -a -G ispapps '.$conf['apache']['user'];
1077                 caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1078             }
63b369 1079         }
F 1080         if($conf['nginx']['installed'] == true){
1081             $command = 'usermod -a -G ispconfig '.$conf['nginx']['user'];
1082             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
8ab3cd 1083             //if(is_user('ispapps')){
7fe908 1084             // Allow the ispapps vhost access to /etc/squirrelmail
MC 1085             //$command = 'usermod -a -G '.$conf['apache']['group'].' ispapps';
1086             //caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
8ab3cd 1087             //}
272aec 1088             if(is_group('ispapps')){
F 1089                 $command = 'usermod -a -G ispapps '.$conf['nginx']['user'];
1090                 caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1091             }
63b369 1092         }
7fe908 1093
0711af 1094         //* Make the shell scripts executable
T 1095         $command = "chmod +x $install_dir/server/scripts/*.sh";
1096         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 1097
7e1cfb 1098         if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
1bd269 1099             //* Copy the ISPConfig vhost for the controlpanel
F 1100             // TODO: These are missing! should they be "vhost_dist_*_dir" ?
1101             $vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
1102             $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
7fe908 1103
MC 1104
1bd269 1105             // Dont just copy over the virtualhost template but add some custom settings
ccbf14 1106             $tpl = new tpl('apache_ispconfig.vhost.master');
TB 1107             $tpl->setVar('vhost_port',$conf['apache']['vhost_port']);
7fe908 1108
1bd269 1109             // comment out the listen directive if port is 80 or 443
F 1110             if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) {
ccbf14 1111                 $tpl->setVar('vhost_port_listen','#');
1bd269 1112             } else {
ccbf14 1113                 $tpl->setVar('vhost_port_listen','');
1bd269 1114             }
7fe908 1115
ccbf14 1116             if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
TB 1117                 $tpl->setVar('ssl_comment','');
1bd269 1118             } else {
ccbf14 1119                 $tpl->setVar('ssl_comment','#');
1bd269 1120             }
10b4c8 1121             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 1122                 $tpl->setVar('ssl_bundle_comment','');
10b4c8 1123             } else {
ccbf14 1124                 $tpl->setVar('ssl_bundle_comment','#');
10b4c8 1125             }
ccbf14 1126             
TB 1127             $tpl->setVar('apache_version',getapacheversion());
7fe908 1128
ccbf14 1129             wf($vhost_conf_dir.'/ispconfig.vhost', $tpl->grab());
7fe908 1130
1bd269 1131             //copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
F 1132             //* and create the symlink
cc6568 1133             //if($this->is_update == false) {
7fe908 1134             if(@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) unlink("$vhost_conf_enabled_dir/ispconfig.vhost");
MC 1135             if(!@is_link("$vhost_conf_enabled_dir/000-ispconfig.vhost")) {
1136                 exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost");
1137             }
1138
1139             /*
1bd269 1140                 exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
F 1141                 exec('cp tpl/apache_ispconfig_fcgi_starter.master /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1142                 exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1143                 exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
1144                 exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
7fe908 1145
1bd269 1146                 replaceLine('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter','PHPRC=','PHPRC=/etc/',0,0);
526b99 1147                 */
7fe908 1148             //if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
MC 1149             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master');
1150             $content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
1151             $content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
1152             if(!is_dir('/var/www/php-fcgi-scripts/ispconfig')) exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
1153             wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
1154             exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1155             if(!is_link('/var/www/ispconfig')) exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
1156             exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
1157             //}
cc6568 1158             //}
f6d745 1159         }
7fe908 1160
7e1cfb 1161         if($conf['nginx']['installed'] == true && $this->install_ispconfig_interface == true){
1bd269 1162             //* Copy the ISPConfig vhost for the controlpanel
F 1163             $vhost_conf_dir = $conf['nginx']['vhost_conf_dir'];
1164             $vhost_conf_enabled_dir = $conf['nginx']['vhost_conf_enabled_dir'];
1165
1166             // Dont just copy over the virtualhost template but add some custom settings
615a0a 1167             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/nginx_ispconfig.vhost.master', 'tpl/nginx_ispconfig.vhost.master');
1bd269 1168             $content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
7fe908 1169
1bd269 1170             if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
10b4c8 1171                 $content = str_replace('{ssl_on}', ' on', $content);
1bd269 1172                 $content = str_replace('{ssl_comment}', '', $content);
F 1173                 $content = str_replace('{fastcgi_ssl}', 'on', $content);
1174             } else {
10b4c8 1175                 $content = str_replace('{ssl_on}', ' off', $content);
1bd269 1176                 $content = str_replace('{ssl_comment}', '#', $content);
F 1177                 $content = str_replace('{fastcgi_ssl}', 'off', $content);
0711af 1178             }
7fe908 1179
ca0b77 1180             $socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
7fe908 1181             if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
ca0b77 1182             if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
F 1183             $fpm_socket = $socket_dir.'ispconfig.sock';
7fe908 1184
ca0b77 1185             //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
F 1186             $content = str_replace('{fpm_socket}', $fpm_socket, $content);
1bd269 1187
F 1188             wf($vhost_conf_dir.'/ispconfig.vhost', $content);
7fe908 1189
1bd269 1190             unset($content);
7fe908 1191
1bd269 1192             // PHP-FPM
F 1193             // Dont just copy over the php-fpm pool template but add some custom settings
615a0a 1194             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/php_fpm_pool.conf.master', 'tpl/php_fpm_pool.conf.master');
1bd269 1195             $content = str_replace('{fpm_pool}', 'ispconfig', $content);
ca0b77 1196             //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
F 1197             $content = str_replace('{fpm_socket}', $fpm_socket, $content);
1bd269 1198             $content = str_replace('{fpm_user}', 'ispconfig', $content);
F 1199             $content = str_replace('{fpm_group}', 'ispconfig', $content);
1200             wf($conf['nginx']['php_fpm_pool_dir'].'/ispconfig.conf', $content);
1201
1202             //copy('tpl/nginx_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost');
1203             //* and create the symlink
7e1cfb 1204             if($this->is_update == false) {
1bd269 1205                 if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
F 1206                 if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
7fe908 1207                     symlink($vhost_conf_dir.'/ispconfig.vhost', $vhost_conf_enabled_dir.'/000-ispconfig.vhost');
1bd269 1208                 }
76f197 1209             }
7fe908 1210
3b273a 1211             // create symlink from /usr/share/phpmyadmin to /usr/share/phpMyAdmin, if it is installed
7fe908 1212             if(!@file_exists('/usr/share/phpmyadmin') && @is_dir('/usr/share/phpMyAdmin')) symlink('/usr/share/phpMyAdmin/', '/usr/share/phpmyadmin');
0711af 1213         }
7fe908 1214
0711af 1215         // Make the Clamav log files readable by ISPConfig
T 1216         //exec('chmod +r /var/log/clamav/clamav.log');
1217         //exec('chmod +r /var/log/clamav/freshclam.log');
7fe908 1218
66768a 1219         //* Install the update script
b34f99 1220         if(is_file('/usr/local/bin/ispconfig_update_from_dev.sh')) unlink('/usr/local/bin/ispconfig_update_from_dev.sh');
MC 1221         exec('chown root /usr/local/ispconfig/server/scripts/update_from_dev.sh');
1222         exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_dev.sh');
66768a 1223         exec('chown root /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
T 1224         exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
1225         exec('chown root /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
1226         exec('chmod 700 /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
b34f99 1227         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 1228         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 1229
76f197 1230         // set the fast cgi starter script to executable
T 1231         // exec('chmod 755 '.$install_dir.'/interface/bin/php-fcgi');
7fe908 1232
0711af 1233         //* Make the logs readable for the ispconfig user
T 1234         if(@is_file('/var/log/maillog')) exec('chmod +r /var/log/maillog');
1235         //if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
1236         //if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
1237         if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
7fe908 1238
0711af 1239         //To enable apache to read the directories
T 1240         // exec('chmod a+rx /usr/local/ispconfig');
1241         // exec('chmod -R 751 /usr/local/ispconfig/interface');
1242         // exec('chmod a+rx /usr/local/ispconfig/interface/web');
7fe908 1243
d9c8a7 1244         //* Create the ispconfig log directory
e38d14 1245         if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir']);
J 1246         if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) exec('touch '.$conf['ispconfig_log_dir'].'/ispconfig.log');
7fe908 1247
0c5b42 1248         if(is_user('getmail')) {
T 1249             exec('mv /usr/local/ispconfig/server/scripts/run-getmail.sh /usr/local/bin/run-getmail.sh');
1250             exec('chown getmail /usr/local/bin/run-getmail.sh');
1251             exec('chmod 744 /usr/local/bin/run-getmail.sh');
1252         }
7fe908 1253
9f56bd 1254         // Edit the file Edit the file /etc/sudoers and comment out the requiregetty line, otherwise the backup function will fail
7fe908 1255         replaceLine('/etc/sudoers', 'Defaults    requiretty', '#Defaults    requiretty', 0, 0);
MC 1256
8cf78b 1257         if(is_dir($install_dir.'/interface/invoices')) {
e94a9f 1258             exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
T 1259             exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
edf806 1260         }
7fe908 1261
0799f8 1262         //* Create the ispconfig auth log file and set uid/gid
T 1263         if(!is_file($conf['ispconfig_log_dir'].'/auth.log')) {
1264             touch($conf['ispconfig_log_dir'].'/auth.log');
1265         }
1266         exec('chown ispconfig:ispconfig '. $conf['ispconfig_log_dir'].'/auth.log');
1267         exec('chmod 660 '. $conf['ispconfig_log_dir'].'/auth.log');
7fe908 1268
d71bae 1269         //* Remove Domain module as its functions are available in the client module now
T 1270         if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
021aec 1271         
TB 1272         // Add symlink for patch tool
1273         if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
7fe908 1274
0711af 1275     }
7fe908 1276
0711af 1277     public function configure_dbserver()
T 1278     {
1279         global $conf;
7fe908 1280
0711af 1281         //* If this server shall act as database server for client DB's, we configure this here
T 1282         $install_dir = $conf['ispconfig_install_dir'];
7fe908 1283
MC 1284         // Create a file with the database login details which
0711af 1285         // are used to create the client databases.
7fe908 1286
0711af 1287         if(!is_dir("$install_dir/server/lib")) {
T 1288             $command = "mkdir $install_dir/server/lib";
1289             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1290         }
7fe908 1291
615a0a 1292         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/mysql_clientdb.conf.master', "tpl/mysql_clientdb.conf.master");
7fe908 1293         $content = str_replace('{hostname}', $conf['mysql']['host'], $content);
MC 1294         $content = str_replace('{username}', $conf['mysql']['admin_user'], $content);
1295         $content = str_replace('{password}', $conf['mysql']['admin_password'], $content);
1296         wf("$install_dir/server/lib/mysql_clientdb.conf", $content);
0711af 1297         exec('chmod 600 '."$install_dir/server/lib/mysql_clientdb.conf");
T 1298         exec('chown root:root '."$install_dir/server/lib/mysql_clientdb.conf");
7fe908 1299
0711af 1300     }
7fe908 1301
0711af 1302     public function install_crontab()
7fe908 1303     {
0711af 1304         global $conf;
7fe908 1305
0711af 1306         //* Root Crontab
T 1307         exec('crontab -u root -l > crontab.txt');
1308         $existing_root_cron_jobs = file('crontab.txt');
7fe908 1309
a8a328 1310         // remove existing ispconfig cronjobs, in case the syntax has changed
T 1311         foreach($existing_root_cron_jobs as $key => $val) {
7fe908 1312             if(stristr($val, '/usr/local/ispconfig')) unset($existing_root_cron_jobs[$key]);
a8a328 1313         }
7fe908 1314
0711af 1315         $root_cron_jobs = array(
T 1316             '* * * * * /usr/local/ispconfig/server/server.sh &> /dev/null',
1317             '30 00 * * * /usr/local/ispconfig/server/cron_daily.sh &> /dev/null'
1318         );
7fe908 1319
b6a10a 1320         if ($conf['nginx']['installed'] == true) {
F 1321             $root_cron_jobs[] = "0 0 * * * /usr/local/ispconfig/server/scripts/create_daily_nginx_access_logs.sh &> /dev/null";
1322         }
7fe908 1323
0711af 1324         foreach($root_cron_jobs as $cron_job) {
T 1325             if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
1326                 $existing_root_cron_jobs[] = $cron_job."\n";
1327             }
1328         }
1329         file_put_contents('crontab.txt', $existing_root_cron_jobs);
1330         exec('crontab -u root crontab.txt &> /dev/null');
1331         unlink('crontab.txt');
7fe908 1332
0711af 1333         //* Getmail crontab
a8a328 1334         if(is_user('getmail')) {
7fe908 1335             $cf = $conf['getmail'];
a8a328 1336             exec('crontab -u getmail -l > crontab.txt');
T 1337             $existing_cron_jobs = file('crontab.txt');
7fe908 1338
27c3a6 1339             $cron_jobs = array(
7fe908 1340                 '*/5 * * * * /usr/local/bin/run-getmail.sh > /dev/null 2>> /dev/null'
MC 1341             );
1342
a8a328 1343             // remove existing ispconfig cronjobs, in case the syntax has changed
9b30b0 1344             foreach($existing_cron_jobs as $key => $val) {
7fe908 1345                 if(stristr($val, 'getmail')) unset($existing_cron_jobs[$key]);
0711af 1346             }
7fe908 1347
a8a328 1348             foreach($cron_jobs as $cron_job) {
T 1349                 if(!in_array($cron_job."\n", $existing_cron_jobs)) {
1350                     $existing_cron_jobs[] = $cron_job."\n";
1351                 }
1352             }
1353             file_put_contents('crontab.txt', $existing_cron_jobs);
1354             exec('crontab -u getmail crontab.txt &> /dev/null');
1355             unlink('crontab.txt');
0711af 1356         }
7fe908 1357
00d730 1358         exec('touch /var/log/ispconfig/cron.log');
cc6568 1359         exec('chmod 660 /var/log/ispconfig/cron.log');
0711af 1360     }
T 1361
1362 }
1363
fd4cfd 1364 ?>