Till Brehm
2014-08-14 b51c22aecea55a2edb0e5fa712b297465a444b28
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.'; '
234                     ."openssl req -new -subj '/C=".$autoinstall['ssl_cert_country']."/ST=".$autoinstall['ssl_cert_state']."/L=".$autoinstall['ssl_cert_locality']."/O=".$autoinstall['ssl_cert_organisation']."/OU=".$autoinstall['ssl_cert_organisation_unit']."/CN=".$autoinstall['ssl_cert_common_name']."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
235             } else {
236                 $command = 'cd '.$config_dir.'; '
237                     ."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";
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");
7fe908 835
0711af 836         //* Create a symlink, so ISPConfig is accessible via web
T 837         // Replaced by a separate vhost definition for port 8080
838         // $command = "ln -s $install_dir/interface/web/ /var/www/ispconfig";
839         // caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 840
0711af 841         //* Create the config file for ISPConfig interface
T 842         $configfile = 'config.inc.php';
843         if(is_file($install_dir.'/interface/lib/'.$configfile)){
7fe908 844             copy("$install_dir/interface/lib/$configfile", "$install_dir/interface/lib/$configfile~");
MC 845         }
615a0a 846         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master");
0711af 847         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
7fe908 848         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
0711af 849         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
T 850         $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
7fe908 851
12e3ba 852         $content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
T 853         $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
854         $content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
855         $content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
7fe908 856
7c3b60 857         $content = str_replace('{server_id}', $conf['server_id'], $content);
0711af 858         $content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
56f1f4 859         $content = str_replace('{language}', $conf['language'], $content);
8cf78b 860         $content = str_replace('{timezone}', $conf['timezone'], $content);
41eaa8 861         $content = str_replace('{theme}', $conf['theme'], $content);
992797 862         $content = str_replace('{language_file_import_enabled}', ($conf['language_file_import_enabled'] == true)?'true':'false', $content);
7fe908 863
0711af 864         wf("$install_dir/interface/lib/$configfile", $content);
7fe908 865
0711af 866         //* Create the config file for ISPConfig server
T 867         $configfile = 'config.inc.php';
868         if(is_file($install_dir.'/server/lib/'.$configfile)){
7fe908 869             copy("$install_dir/server/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);
T 873         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
874         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
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
0711af 882         $content = str_replace('{server_id}', $conf['server_id'], $content);
T 883         $content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
5898e6 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);
5c4d55 888
0711af 889         wf("$install_dir/server/lib/$configfile", $content);
7fe908 890
fb3a98 891         //* Create the config file for remote-actions (but only, if it does not exist, because
T 892         //  the value is a autoinc-value and so changed by the remoteaction_core_module
893         if (!file_exists($install_dir.'/server/lib/remote_action.inc.php')) {
894             $content = '<?php' . "\n" . '$maxid_remote_action = 0;' . "\n" . '?>';
895             wf($install_dir.'/server/lib/remote_action.inc.php', $content);
896         }
7fe908 897
MC 898
0711af 899         //* Enable the server modules and plugins.
T 900         // TODO: Implement a selector which modules and plugins shall be enabled.
901         $dir = $install_dir.'/server/mods-available/';
902         if (is_dir($dir)) {
903             if ($dh = opendir($dir)) {
904                 while (($file = readdir($dh)) !== false) {
7fe908 905                     if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
MC 906                         include_once $install_dir.'/server/mods-available/'.$file;
907                         $module_name = substr($file, 0, -8);
392450 908                         $tmp = new $module_name;
T 909                         if($tmp->onInstall()) {
910                             if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
911                             if (strpos($file, '_core_module') !== false) {
912                                 if(!@is_link($install_dir.'/server/mods-core/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
913                             }
0d0cd9 914                         }
392450 915                         unset($tmp);
0711af 916                     }
T 917                 }
918                 closedir($dh);
919             }
920         }
7fe908 921
0711af 922         $dir = $install_dir.'/server/plugins-available/';
T 923         if (is_dir($dir)) {
924             if ($dh = opendir($dir)) {
925                 while (($file = readdir($dh)) !== false) {
1bd269 926                     if($conf['apache']['installed'] == true && $file == 'nginx_plugin.inc.php') continue;
F 927                     if($conf['nginx']['installed'] == true && $file == 'apache2_plugin.inc.php') continue;
7fe908 928                     if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
MC 929                         include_once $install_dir.'/server/plugins-available/'.$file;
930                         $plugin_name = substr($file, 0, -8);
392450 931                         $tmp = new $plugin_name;
T 932                         if($tmp->onInstall()) {
933                             if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
934                             if (strpos($file, '_core_plugin') !== false) {
935                                 if(!@is_link($install_dir.'/server/plugins-core/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
936                             }
0d0cd9 937                         }
392450 938                         unset($tmp);
0711af 939                     }
T 940                 }
941                 closedir($dh);
942             }
943         }
7fe908 944
392450 945         // Update the server config
T 946         $mail_server_enabled = ($conf['services']['mail'])?1:0;
947         $web_server_enabled = ($conf['services']['web'])?1:0;
948         $dns_server_enabled = ($conf['services']['dns'])?1:0;
949         $file_server_enabled = ($conf['services']['file'])?1:0;
950         $db_server_enabled = ($conf['services']['db'])?1:0;
951         $vserver_server_enabled = ($conf['services']['vserver'])?1:0;
952         $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 953
392450 954         if($conf['mysql']['master_slave_setup'] == 'y') {
T 955             $this->dbmaster->query($sql);
f66929 956             $this->db->query($sql);
392450 957         } else {
T 958             $this->db->query($sql);
959         }
7fe908 960
fa029b 961         // chown install dir to root and chmod 755
3e0fc8 962         $command = 'chown root:root '.$install_dir;
TB 963         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
964         $command = 'chmod 755 '.$install_dir;
0711af 965         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
T 966
fa029b 967         //* Chmod the files and directories in the install dir
3e0fc8 968         $command = 'chmod -R 750 '.$install_dir.'/*';
TB 969         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
970
971         //* chown the interface files to the ispconfig user and group
972         $command = 'chown -R ispconfig:ispconfig '.$install_dir.'/interface';
973         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
974         
975         //* chown the server files to the root user and group
976         $command = 'chown -R root:root '.$install_dir.'/server';
0711af 977         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
fa029b 978         
TB 979         //* chown the security files to the root user and group
980         $command = 'chown -R root:root '.$install_dir.'/security';
981         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
982         
983         //* chown the security directory and security_settings.ini to root:ispconfig
984         $command = 'chown root:ispconfig '.$install_dir.'/security/security_settings.ini';
985         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
986         $command = 'chown root:ispconfig '.$install_dir.'/security';
987         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 988
0711af 989         //* Make the global language file directory group writable
T 990         exec("chmod -R 770 $install_dir/interface/lib/lang");
7fe908 991
0711af 992         //* Make the temp directory for language file exports writable
T 993         exec("chmod -R 770 $install_dir/interface/web/temp");
7fe908 994
0711af 995         //* Make all interface language file directories group writable
T 996         $handle = @opendir($install_dir.'/interface/web');
7fe908 997         while ($file = @readdir($handle)) {
MC 998             if ($file != '.' && $file != '..') {
999                 if(@is_dir($install_dir.'/interface/web'.'/'.$file.'/lib/lang')) {
0711af 1000                     $handle2 = opendir($install_dir.'/interface/web'.'/'.$file.'/lib/lang');
7fe908 1001                     chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang', 0770);
MC 1002                     while ($lang_file = @readdir($handle2)) {
0711af 1003                         if ($lang_file != '.' && $lang_file != '..') {
7fe908 1004                             chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang/'.$lang_file, 0770);
0711af 1005                         }
T 1006                     }
1007                 }
1008             }
1009         }
7fe908 1010
477d4e 1011         //* Make the APS directories group writable
T 1012         exec("chmod -R 770 $install_dir/interface/web/sites/aps_meta_packages");
1013         exec("chmod -R 770 $install_dir/server/aps_packages");
7fe908 1014
0711af 1015         //* make sure that the server config file (not the interface one) is only readable by the root user
bfcdef 1016         chmod($install_dir.'/server/lib/config.inc.php', 0600);
T 1017         chown($install_dir.'/server/lib/config.inc.php', 'root');
1018         chgrp($install_dir.'/server/lib/config.inc.php', 'root');
7fe908 1019
bfcdef 1020         //* Make sure thet the interface config file is readable by user ispconfig only
T 1021         chmod($install_dir.'/interface/lib/config.inc.php', 0600);
1022         chown($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
1023         chgrp($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
7fe908 1024
0711af 1025         if(@is_file("$install_dir/server/lib/mysql_clientdb.conf")) {
T 1026             exec("chmod 600 $install_dir/server/lib/mysql_clientdb.conf");
1027             exec("chown root:root $install_dir/server/lib/mysql_clientdb.conf");
1028         }
7fe908 1029
0711af 1030         // TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
T 1031         // and must be fixed as this will allow the apache user to read the ispconfig files.
1032         // Later this must run as own apache server or via suexec!
63b369 1033         if($conf['apache']['installed'] == true){
F 1034             $command = 'usermod -a -G ispconfig '.$conf['apache']['user'];
1035             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
272aec 1036             if(is_group('ispapps')){
F 1037                 $command = 'usermod -a -G ispapps '.$conf['apache']['user'];
1038                 caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1039             }
63b369 1040         }
F 1041         if($conf['nginx']['installed'] == true){
1042             $command = 'usermod -a -G ispconfig '.$conf['nginx']['user'];
1043             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
8ab3cd 1044             //if(is_user('ispapps')){
7fe908 1045             // Allow the ispapps vhost access to /etc/squirrelmail
MC 1046             //$command = 'usermod -a -G '.$conf['apache']['group'].' ispapps';
1047             //caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
8ab3cd 1048             //}
272aec 1049             if(is_group('ispapps')){
F 1050                 $command = 'usermod -a -G ispapps '.$conf['nginx']['user'];
1051                 caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1052             }
63b369 1053         }
7fe908 1054
0711af 1055         //* Make the shell scripts executable
T 1056         $command = "chmod +x $install_dir/server/scripts/*.sh";
1057         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 1058
7e1cfb 1059         if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
1bd269 1060             //* Copy the ISPConfig vhost for the controlpanel
F 1061             // TODO: These are missing! should they be "vhost_dist_*_dir" ?
1062             $vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
1063             $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
7fe908 1064
MC 1065
1bd269 1066             // Dont just copy over the virtualhost template but add some custom settings
ccbf14 1067             $tpl = new tpl('apache_ispconfig.vhost.master');
TB 1068             $tpl->setVar('vhost_port',$conf['apache']['vhost_port']);
7fe908 1069
1bd269 1070             // comment out the listen directive if port is 80 or 443
F 1071             if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) {
ccbf14 1072                 $tpl->setVar('vhost_port_listen','#');
1bd269 1073             } else {
ccbf14 1074                 $tpl->setVar('vhost_port_listen','');
1bd269 1075             }
7fe908 1076
ccbf14 1077             if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
TB 1078                 $tpl->setVar('ssl_comment','');
1bd269 1079             } else {
ccbf14 1080                 $tpl->setVar('ssl_comment','#');
1bd269 1081             }
10b4c8 1082             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 1083                 $tpl->setVar('ssl_bundle_comment','');
10b4c8 1084             } else {
ccbf14 1085                 $tpl->setVar('ssl_bundle_comment','#');
10b4c8 1086             }
ccbf14 1087             
TB 1088             $tpl->setVar('apache_version',getapacheversion());
7fe908 1089
ccbf14 1090             wf($vhost_conf_dir.'/ispconfig.vhost', $tpl->grab());
7fe908 1091
1bd269 1092             //copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
F 1093             //* and create the symlink
cc6568 1094             //if($this->is_update == false) {
7fe908 1095             if(@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) unlink("$vhost_conf_enabled_dir/ispconfig.vhost");
MC 1096             if(!@is_link("$vhost_conf_enabled_dir/000-ispconfig.vhost")) {
1097                 exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost");
1098             }
1099
1100             /*
1bd269 1101                 exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
F 1102                 exec('cp tpl/apache_ispconfig_fcgi_starter.master /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1103                 exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1104                 exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
1105                 exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
7fe908 1106
1bd269 1107                 replaceLine('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter','PHPRC=','PHPRC=/etc/',0,0);
526b99 1108                 */
7fe908 1109             //if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
MC 1110             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master');
1111             $content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
1112             $content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
1113             if(!is_dir('/var/www/php-fcgi-scripts/ispconfig')) exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
1114             wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
1115             exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1116             if(!is_link('/var/www/ispconfig')) exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
1117             exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
1118             //}
cc6568 1119             //}
f6d745 1120         }
7fe908 1121
7e1cfb 1122         if($conf['nginx']['installed'] == true && $this->install_ispconfig_interface == true){
1bd269 1123             //* Copy the ISPConfig vhost for the controlpanel
F 1124             $vhost_conf_dir = $conf['nginx']['vhost_conf_dir'];
1125             $vhost_conf_enabled_dir = $conf['nginx']['vhost_conf_enabled_dir'];
1126
1127             // Dont just copy over the virtualhost template but add some custom settings
615a0a 1128             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/nginx_ispconfig.vhost.master', 'tpl/nginx_ispconfig.vhost.master');
1bd269 1129             $content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
7fe908 1130
1bd269 1131             if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
10b4c8 1132                 $content = str_replace('{ssl_on}', ' on', $content);
1bd269 1133                 $content = str_replace('{ssl_comment}', '', $content);
F 1134                 $content = str_replace('{fastcgi_ssl}', 'on', $content);
1135             } else {
10b4c8 1136                 $content = str_replace('{ssl_on}', ' off', $content);
1bd269 1137                 $content = str_replace('{ssl_comment}', '#', $content);
F 1138                 $content = str_replace('{fastcgi_ssl}', 'off', $content);
0711af 1139             }
7fe908 1140
ca0b77 1141             $socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
7fe908 1142             if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
ca0b77 1143             if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
F 1144             $fpm_socket = $socket_dir.'ispconfig.sock';
7fe908 1145
ca0b77 1146             //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
F 1147             $content = str_replace('{fpm_socket}', $fpm_socket, $content);
1bd269 1148
F 1149             wf($vhost_conf_dir.'/ispconfig.vhost', $content);
7fe908 1150
1bd269 1151             unset($content);
7fe908 1152
1bd269 1153             // PHP-FPM
F 1154             // Dont just copy over the php-fpm pool template but add some custom settings
615a0a 1155             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/php_fpm_pool.conf.master', 'tpl/php_fpm_pool.conf.master');
1bd269 1156             $content = str_replace('{fpm_pool}', 'ispconfig', $content);
ca0b77 1157             //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
F 1158             $content = str_replace('{fpm_socket}', $fpm_socket, $content);
1bd269 1159             $content = str_replace('{fpm_user}', 'ispconfig', $content);
F 1160             $content = str_replace('{fpm_group}', 'ispconfig', $content);
1161             wf($conf['nginx']['php_fpm_pool_dir'].'/ispconfig.conf', $content);
1162
1163             //copy('tpl/nginx_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost');
1164             //* and create the symlink
7e1cfb 1165             if($this->is_update == false) {
1bd269 1166                 if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
F 1167                 if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
7fe908 1168                     symlink($vhost_conf_dir.'/ispconfig.vhost', $vhost_conf_enabled_dir.'/000-ispconfig.vhost');
1bd269 1169                 }
76f197 1170             }
7fe908 1171
3b273a 1172             // create symlink from /usr/share/phpmyadmin to /usr/share/phpMyAdmin, if it is installed
7fe908 1173             if(!@file_exists('/usr/share/phpmyadmin') && @is_dir('/usr/share/phpMyAdmin')) symlink('/usr/share/phpMyAdmin/', '/usr/share/phpmyadmin');
0711af 1174         }
7fe908 1175
0711af 1176         // Make the Clamav log files readable by ISPConfig
T 1177         //exec('chmod +r /var/log/clamav/clamav.log');
1178         //exec('chmod +r /var/log/clamav/freshclam.log');
7fe908 1179
66768a 1180         //* Install the update script
b34f99 1181         if(is_file('/usr/local/bin/ispconfig_update_from_dev.sh')) unlink('/usr/local/bin/ispconfig_update_from_dev.sh');
MC 1182         exec('chown root /usr/local/ispconfig/server/scripts/update_from_dev.sh');
1183         exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_dev.sh');
66768a 1184         exec('chown root /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
T 1185         exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
1186         exec('chown root /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
1187         exec('chmod 700 /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
b34f99 1188         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 1189         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 1190
76f197 1191         // set the fast cgi starter script to executable
T 1192         // exec('chmod 755 '.$install_dir.'/interface/bin/php-fcgi');
7fe908 1193
0711af 1194         //* Make the logs readable for the ispconfig user
T 1195         if(@is_file('/var/log/maillog')) exec('chmod +r /var/log/maillog');
1196         //if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
1197         //if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
1198         if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
7fe908 1199
0711af 1200         //To enable apache to read the directories
T 1201         // exec('chmod a+rx /usr/local/ispconfig');
1202         // exec('chmod -R 751 /usr/local/ispconfig/interface');
1203         // exec('chmod a+rx /usr/local/ispconfig/interface/web');
7fe908 1204
d9c8a7 1205         //* Create the ispconfig log directory
e38d14 1206         if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir']);
J 1207         if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) exec('touch '.$conf['ispconfig_log_dir'].'/ispconfig.log');
7fe908 1208
0c5b42 1209         if(is_user('getmail')) {
T 1210             exec('mv /usr/local/ispconfig/server/scripts/run-getmail.sh /usr/local/bin/run-getmail.sh');
1211             exec('chown getmail /usr/local/bin/run-getmail.sh');
1212             exec('chmod 744 /usr/local/bin/run-getmail.sh');
1213         }
7fe908 1214
9f56bd 1215         // Edit the file Edit the file /etc/sudoers and comment out the requiregetty line, otherwise the backup function will fail
7fe908 1216         replaceLine('/etc/sudoers', 'Defaults    requiretty', '#Defaults    requiretty', 0, 0);
MC 1217
8cf78b 1218         if(is_dir($install_dir.'/interface/invoices')) {
e94a9f 1219             exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
T 1220             exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
edf806 1221         }
7fe908 1222
0799f8 1223         //* Create the ispconfig auth log file and set uid/gid
T 1224         if(!is_file($conf['ispconfig_log_dir'].'/auth.log')) {
1225             touch($conf['ispconfig_log_dir'].'/auth.log');
1226         }
1227         exec('chown ispconfig:ispconfig '. $conf['ispconfig_log_dir'].'/auth.log');
1228         exec('chmod 660 '. $conf['ispconfig_log_dir'].'/auth.log');
7fe908 1229
d71bae 1230         //* Remove Domain module as its functions are available in the client module now
T 1231         if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
021aec 1232         
TB 1233         // Add symlink for patch tool
1234         if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
7fe908 1235
0711af 1236     }
7fe908 1237
0711af 1238     public function configure_dbserver()
T 1239     {
1240         global $conf;
7fe908 1241
0711af 1242         //* If this server shall act as database server for client DB's, we configure this here
T 1243         $install_dir = $conf['ispconfig_install_dir'];
7fe908 1244
MC 1245         // Create a file with the database login details which
0711af 1246         // are used to create the client databases.
7fe908 1247
0711af 1248         if(!is_dir("$install_dir/server/lib")) {
T 1249             $command = "mkdir $install_dir/server/lib";
1250             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1251         }
7fe908 1252
615a0a 1253         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/mysql_clientdb.conf.master', "tpl/mysql_clientdb.conf.master");
7fe908 1254         $content = str_replace('{hostname}', $conf['mysql']['host'], $content);
MC 1255         $content = str_replace('{username}', $conf['mysql']['admin_user'], $content);
1256         $content = str_replace('{password}', $conf['mysql']['admin_password'], $content);
1257         wf("$install_dir/server/lib/mysql_clientdb.conf", $content);
0711af 1258         exec('chmod 600 '."$install_dir/server/lib/mysql_clientdb.conf");
T 1259         exec('chown root:root '."$install_dir/server/lib/mysql_clientdb.conf");
7fe908 1260
0711af 1261     }
7fe908 1262
0711af 1263     public function install_crontab()
7fe908 1264     {
0711af 1265         global $conf;
7fe908 1266
0711af 1267         //* Root Crontab
T 1268         exec('crontab -u root -l > crontab.txt');
1269         $existing_root_cron_jobs = file('crontab.txt');
7fe908 1270
a8a328 1271         // remove existing ispconfig cronjobs, in case the syntax has changed
T 1272         foreach($existing_root_cron_jobs as $key => $val) {
7fe908 1273             if(stristr($val, '/usr/local/ispconfig')) unset($existing_root_cron_jobs[$key]);
a8a328 1274         }
7fe908 1275
0711af 1276         $root_cron_jobs = array(
T 1277             '* * * * * /usr/local/ispconfig/server/server.sh &> /dev/null',
1278             '30 00 * * * /usr/local/ispconfig/server/cron_daily.sh &> /dev/null'
1279         );
7fe908 1280
b6a10a 1281         if ($conf['nginx']['installed'] == true) {
F 1282             $root_cron_jobs[] = "0 0 * * * /usr/local/ispconfig/server/scripts/create_daily_nginx_access_logs.sh &> /dev/null";
1283         }
7fe908 1284
0711af 1285         foreach($root_cron_jobs as $cron_job) {
T 1286             if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
1287                 $existing_root_cron_jobs[] = $cron_job."\n";
1288             }
1289         }
1290         file_put_contents('crontab.txt', $existing_root_cron_jobs);
1291         exec('crontab -u root crontab.txt &> /dev/null');
1292         unlink('crontab.txt');
7fe908 1293
0711af 1294         //* Getmail crontab
a8a328 1295         if(is_user('getmail')) {
7fe908 1296             $cf = $conf['getmail'];
a8a328 1297             exec('crontab -u getmail -l > crontab.txt');
T 1298             $existing_cron_jobs = file('crontab.txt');
7fe908 1299
27c3a6 1300             $cron_jobs = array(
7fe908 1301                 '*/5 * * * * /usr/local/bin/run-getmail.sh > /dev/null 2>> /dev/null'
MC 1302             );
1303
a8a328 1304             // remove existing ispconfig cronjobs, in case the syntax has changed
9b30b0 1305             foreach($existing_cron_jobs as $key => $val) {
7fe908 1306                 if(stristr($val, 'getmail')) unset($existing_cron_jobs[$key]);
0711af 1307             }
7fe908 1308
a8a328 1309             foreach($cron_jobs as $cron_job) {
T 1310                 if(!in_array($cron_job."\n", $existing_cron_jobs)) {
1311                     $existing_cron_jobs[] = $cron_job."\n";
1312                 }
1313             }
1314             file_put_contents('crontab.txt', $existing_cron_jobs);
1315             exec('crontab -u getmail crontab.txt &> /dev/null');
1316             unlink('crontab.txt');
0711af 1317         }
7fe908 1318
00d730 1319         exec('touch /var/log/ispconfig/cron.log');
cc6568 1320         exec('chmod 660 /var/log/ispconfig/cron.log');
0711af 1321     }
T 1322
1323 }
1324
fd4cfd 1325 ?>