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