Marius Cramer
2014-08-13 42539643c396f9d8865dcf9a51b13dc869709d16
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     {
MC 117         global $conf;
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
0711af 961         //* Chmod the files
T 962         $command = "chmod -R 750 $install_dir";
963         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
964
965         //* chown the files to the ispconfig user and group
966         $command = "chown -R ispconfig:ispconfig $install_dir";
967         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 968
0711af 969         //* Make the global language file directory group writable
T 970         exec("chmod -R 770 $install_dir/interface/lib/lang");
7fe908 971
0711af 972         //* Make the temp directory for language file exports writable
T 973         exec("chmod -R 770 $install_dir/interface/web/temp");
7fe908 974
0711af 975         //* Make all interface language file directories group writable
T 976         $handle = @opendir($install_dir.'/interface/web');
7fe908 977         while ($file = @readdir($handle)) {
MC 978             if ($file != '.' && $file != '..') {
979                 if(@is_dir($install_dir.'/interface/web'.'/'.$file.'/lib/lang')) {
0711af 980                     $handle2 = opendir($install_dir.'/interface/web'.'/'.$file.'/lib/lang');
7fe908 981                     chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang', 0770);
MC 982                     while ($lang_file = @readdir($handle2)) {
0711af 983                         if ($lang_file != '.' && $lang_file != '..') {
7fe908 984                             chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang/'.$lang_file, 0770);
0711af 985                         }
T 986                     }
987                 }
988             }
989         }
7fe908 990
477d4e 991         //* Make the APS directories group writable
T 992         exec("chmod -R 770 $install_dir/interface/web/sites/aps_meta_packages");
993         exec("chmod -R 770 $install_dir/server/aps_packages");
7fe908 994
0711af 995         //* make sure that the server config file (not the interface one) is only readable by the root user
bfcdef 996         chmod($install_dir.'/server/lib/config.inc.php', 0600);
T 997         chown($install_dir.'/server/lib/config.inc.php', 'root');
998         chgrp($install_dir.'/server/lib/config.inc.php', 'root');
7fe908 999
bfcdef 1000         //* Make sure thet the interface config file is readable by user ispconfig only
T 1001         chmod($install_dir.'/interface/lib/config.inc.php', 0600);
1002         chown($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
1003         chgrp($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
7fe908 1004
0711af 1005         if(@is_file("$install_dir/server/lib/mysql_clientdb.conf")) {
T 1006             exec("chmod 600 $install_dir/server/lib/mysql_clientdb.conf");
1007             exec("chown root:root $install_dir/server/lib/mysql_clientdb.conf");
1008         }
7fe908 1009
0711af 1010         // TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
T 1011         // and must be fixed as this will allow the apache user to read the ispconfig files.
1012         // Later this must run as own apache server or via suexec!
63b369 1013         if($conf['apache']['installed'] == true){
F 1014             $command = 'usermod -a -G ispconfig '.$conf['apache']['user'];
1015             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
272aec 1016             if(is_group('ispapps')){
F 1017                 $command = 'usermod -a -G ispapps '.$conf['apache']['user'];
1018                 caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1019             }
63b369 1020         }
F 1021         if($conf['nginx']['installed'] == true){
1022             $command = 'usermod -a -G ispconfig '.$conf['nginx']['user'];
1023             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
8ab3cd 1024             //if(is_user('ispapps')){
7fe908 1025             // Allow the ispapps vhost access to /etc/squirrelmail
MC 1026             //$command = 'usermod -a -G '.$conf['apache']['group'].' ispapps';
1027             //caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
8ab3cd 1028             //}
272aec 1029             if(is_group('ispapps')){
F 1030                 $command = 'usermod -a -G ispapps '.$conf['nginx']['user'];
1031                 caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1032             }
63b369 1033         }
7fe908 1034
0711af 1035         //* Make the shell scripts executable
T 1036         $command = "chmod +x $install_dir/server/scripts/*.sh";
1037         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 1038
7e1cfb 1039         if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
1bd269 1040             //* Copy the ISPConfig vhost for the controlpanel
F 1041             // TODO: These are missing! should they be "vhost_dist_*_dir" ?
1042             $vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
1043             $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
7fe908 1044
MC 1045
1bd269 1046             // Dont just copy over the virtualhost template but add some custom settings
ccbf14 1047             $tpl = new tpl('apache_ispconfig.vhost.master');
TB 1048             $tpl->setVar('vhost_port',$conf['apache']['vhost_port']);
7fe908 1049
1bd269 1050             // comment out the listen directive if port is 80 or 443
F 1051             if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) {
ccbf14 1052                 $tpl->setVar('vhost_port_listen','#');
1bd269 1053             } else {
ccbf14 1054                 $tpl->setVar('vhost_port_listen','');
1bd269 1055             }
7fe908 1056
ccbf14 1057             if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
TB 1058                 $tpl->setVar('ssl_comment','');
1bd269 1059             } else {
ccbf14 1060                 $tpl->setVar('ssl_comment','#');
1bd269 1061             }
10b4c8 1062             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 1063                 $tpl->setVar('ssl_bundle_comment','');
10b4c8 1064             } else {
ccbf14 1065                 $tpl->setVar('ssl_bundle_comment','#');
10b4c8 1066             }
ccbf14 1067             
TB 1068             $tpl->setVar('apache_version',getapacheversion());
7fe908 1069
ccbf14 1070             wf($vhost_conf_dir.'/ispconfig.vhost', $tpl->grab());
7fe908 1071
1bd269 1072             //copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
F 1073             //* and create the symlink
cc6568 1074             //if($this->is_update == false) {
7fe908 1075             if(@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) unlink("$vhost_conf_enabled_dir/ispconfig.vhost");
MC 1076             if(!@is_link("$vhost_conf_enabled_dir/000-ispconfig.vhost")) {
1077                 exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost");
1078             }
1079
1080             /*
1bd269 1081                 exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
F 1082                 exec('cp tpl/apache_ispconfig_fcgi_starter.master /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1083                 exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1084                 exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
1085                 exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
7fe908 1086
1bd269 1087                 replaceLine('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter','PHPRC=','PHPRC=/etc/',0,0);
526b99 1088                 */
7fe908 1089             //if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
MC 1090             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master');
1091             $content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
1092             $content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
1093             if(!is_dir('/var/www/php-fcgi-scripts/ispconfig')) exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
1094             wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
1095             exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1096             if(!is_link('/var/www/ispconfig')) exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
1097             exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
1098             //}
cc6568 1099             //}
f6d745 1100         }
7fe908 1101
7e1cfb 1102         if($conf['nginx']['installed'] == true && $this->install_ispconfig_interface == true){
1bd269 1103             //* Copy the ISPConfig vhost for the controlpanel
F 1104             $vhost_conf_dir = $conf['nginx']['vhost_conf_dir'];
1105             $vhost_conf_enabled_dir = $conf['nginx']['vhost_conf_enabled_dir'];
1106
1107             // Dont just copy over the virtualhost template but add some custom settings
615a0a 1108             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/nginx_ispconfig.vhost.master', 'tpl/nginx_ispconfig.vhost.master');
1bd269 1109             $content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
7fe908 1110
1bd269 1111             if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
10b4c8 1112                 $content = str_replace('{ssl_on}', ' on', $content);
1bd269 1113                 $content = str_replace('{ssl_comment}', '', $content);
F 1114                 $content = str_replace('{fastcgi_ssl}', 'on', $content);
1115             } else {
10b4c8 1116                 $content = str_replace('{ssl_on}', ' off', $content);
1bd269 1117                 $content = str_replace('{ssl_comment}', '#', $content);
F 1118                 $content = str_replace('{fastcgi_ssl}', 'off', $content);
0711af 1119             }
7fe908 1120
ca0b77 1121             $socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
7fe908 1122             if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
ca0b77 1123             if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
F 1124             $fpm_socket = $socket_dir.'ispconfig.sock';
7fe908 1125
ca0b77 1126             //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
F 1127             $content = str_replace('{fpm_socket}', $fpm_socket, $content);
1bd269 1128
F 1129             wf($vhost_conf_dir.'/ispconfig.vhost', $content);
7fe908 1130
1bd269 1131             unset($content);
7fe908 1132
1bd269 1133             // PHP-FPM
F 1134             // Dont just copy over the php-fpm pool template but add some custom settings
615a0a 1135             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/php_fpm_pool.conf.master', 'tpl/php_fpm_pool.conf.master');
1bd269 1136             $content = str_replace('{fpm_pool}', 'ispconfig', $content);
ca0b77 1137             //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
F 1138             $content = str_replace('{fpm_socket}', $fpm_socket, $content);
1bd269 1139             $content = str_replace('{fpm_user}', 'ispconfig', $content);
F 1140             $content = str_replace('{fpm_group}', 'ispconfig', $content);
1141             wf($conf['nginx']['php_fpm_pool_dir'].'/ispconfig.conf', $content);
1142
1143             //copy('tpl/nginx_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost');
1144             //* and create the symlink
7e1cfb 1145             if($this->is_update == false) {
1bd269 1146                 if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
F 1147                 if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
7fe908 1148                     symlink($vhost_conf_dir.'/ispconfig.vhost', $vhost_conf_enabled_dir.'/000-ispconfig.vhost');
1bd269 1149                 }
76f197 1150             }
7fe908 1151
3b273a 1152             // create symlink from /usr/share/phpmyadmin to /usr/share/phpMyAdmin, if it is installed
7fe908 1153             if(!@file_exists('/usr/share/phpmyadmin') && @is_dir('/usr/share/phpMyAdmin')) symlink('/usr/share/phpMyAdmin/', '/usr/share/phpmyadmin');
0711af 1154         }
7fe908 1155
0711af 1156         // Make the Clamav log files readable by ISPConfig
T 1157         //exec('chmod +r /var/log/clamav/clamav.log');
1158         //exec('chmod +r /var/log/clamav/freshclam.log');
7fe908 1159
66768a 1160         //* Install the update script
b34f99 1161         if(is_file('/usr/local/bin/ispconfig_update_from_dev.sh')) unlink('/usr/local/bin/ispconfig_update_from_dev.sh');
MC 1162         exec('chown root /usr/local/ispconfig/server/scripts/update_from_dev.sh');
1163         exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_dev.sh');
66768a 1164         exec('chown root /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
T 1165         exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
1166         exec('chown root /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
1167         exec('chmod 700 /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
b34f99 1168         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 1169         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 1170
76f197 1171         // set the fast cgi starter script to executable
T 1172         // exec('chmod 755 '.$install_dir.'/interface/bin/php-fcgi');
7fe908 1173
0711af 1174         //* Make the logs readable for the ispconfig user
T 1175         if(@is_file('/var/log/maillog')) exec('chmod +r /var/log/maillog');
1176         //if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
1177         //if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
1178         if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
7fe908 1179
0711af 1180         //To enable apache to read the directories
T 1181         // exec('chmod a+rx /usr/local/ispconfig');
1182         // exec('chmod -R 751 /usr/local/ispconfig/interface');
1183         // exec('chmod a+rx /usr/local/ispconfig/interface/web');
7fe908 1184
d9c8a7 1185         //* Create the ispconfig log directory
e38d14 1186         if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir']);
J 1187         if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) exec('touch '.$conf['ispconfig_log_dir'].'/ispconfig.log');
7fe908 1188
0c5b42 1189         if(is_user('getmail')) {
T 1190             exec('mv /usr/local/ispconfig/server/scripts/run-getmail.sh /usr/local/bin/run-getmail.sh');
1191             exec('chown getmail /usr/local/bin/run-getmail.sh');
1192             exec('chmod 744 /usr/local/bin/run-getmail.sh');
1193         }
7fe908 1194
9f56bd 1195         // Edit the file Edit the file /etc/sudoers and comment out the requiregetty line, otherwise the backup function will fail
7fe908 1196         replaceLine('/etc/sudoers', 'Defaults    requiretty', '#Defaults    requiretty', 0, 0);
MC 1197
8cf78b 1198         if(is_dir($install_dir.'/interface/invoices')) {
e94a9f 1199             exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
T 1200             exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
edf806 1201         }
7fe908 1202
0799f8 1203         //* Create the ispconfig auth log file and set uid/gid
T 1204         if(!is_file($conf['ispconfig_log_dir'].'/auth.log')) {
1205             touch($conf['ispconfig_log_dir'].'/auth.log');
1206         }
1207         exec('chown ispconfig:ispconfig '. $conf['ispconfig_log_dir'].'/auth.log');
1208         exec('chmod 660 '. $conf['ispconfig_log_dir'].'/auth.log');
7fe908 1209
d71bae 1210         //* Remove Domain module as its functions are available in the client module now
T 1211         if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
021aec 1212         
TB 1213         // Add symlink for patch tool
1214         if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
7fe908 1215
0711af 1216     }
7fe908 1217
0711af 1218     public function configure_dbserver()
T 1219     {
1220         global $conf;
7fe908 1221
0711af 1222         //* If this server shall act as database server for client DB's, we configure this here
T 1223         $install_dir = $conf['ispconfig_install_dir'];
7fe908 1224
MC 1225         // Create a file with the database login details which
0711af 1226         // are used to create the client databases.
7fe908 1227
0711af 1228         if(!is_dir("$install_dir/server/lib")) {
T 1229             $command = "mkdir $install_dir/server/lib";
1230             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1231         }
7fe908 1232
615a0a 1233         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/mysql_clientdb.conf.master', "tpl/mysql_clientdb.conf.master");
7fe908 1234         $content = str_replace('{hostname}', $conf['mysql']['host'], $content);
MC 1235         $content = str_replace('{username}', $conf['mysql']['admin_user'], $content);
1236         $content = str_replace('{password}', $conf['mysql']['admin_password'], $content);
1237         wf("$install_dir/server/lib/mysql_clientdb.conf", $content);
0711af 1238         exec('chmod 600 '."$install_dir/server/lib/mysql_clientdb.conf");
T 1239         exec('chown root:root '."$install_dir/server/lib/mysql_clientdb.conf");
7fe908 1240
0711af 1241     }
7fe908 1242
0711af 1243     public function install_crontab()
7fe908 1244     {
0711af 1245         global $conf;
7fe908 1246
0711af 1247         //* Root Crontab
T 1248         exec('crontab -u root -l > crontab.txt');
1249         $existing_root_cron_jobs = file('crontab.txt');
7fe908 1250
a8a328 1251         // remove existing ispconfig cronjobs, in case the syntax has changed
T 1252         foreach($existing_root_cron_jobs as $key => $val) {
7fe908 1253             if(stristr($val, '/usr/local/ispconfig')) unset($existing_root_cron_jobs[$key]);
a8a328 1254         }
7fe908 1255
0711af 1256         $root_cron_jobs = array(
T 1257             '* * * * * /usr/local/ispconfig/server/server.sh &> /dev/null',
1258             '30 00 * * * /usr/local/ispconfig/server/cron_daily.sh &> /dev/null'
1259         );
7fe908 1260
b6a10a 1261         if ($conf['nginx']['installed'] == true) {
F 1262             $root_cron_jobs[] = "0 0 * * * /usr/local/ispconfig/server/scripts/create_daily_nginx_access_logs.sh &> /dev/null";
1263         }
7fe908 1264
0711af 1265         foreach($root_cron_jobs as $cron_job) {
T 1266             if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
1267                 $existing_root_cron_jobs[] = $cron_job."\n";
1268             }
1269         }
1270         file_put_contents('crontab.txt', $existing_root_cron_jobs);
1271         exec('crontab -u root crontab.txt &> /dev/null');
1272         unlink('crontab.txt');
7fe908 1273
0711af 1274         //* Getmail crontab
a8a328 1275         if(is_user('getmail')) {
7fe908 1276             $cf = $conf['getmail'];
a8a328 1277             exec('crontab -u getmail -l > crontab.txt');
T 1278             $existing_cron_jobs = file('crontab.txt');
7fe908 1279
27c3a6 1280             $cron_jobs = array(
7fe908 1281                 '*/5 * * * * /usr/local/bin/run-getmail.sh > /dev/null 2>> /dev/null'
MC 1282             );
1283
a8a328 1284             // remove existing ispconfig cronjobs, in case the syntax has changed
9b30b0 1285             foreach($existing_cron_jobs as $key => $val) {
7fe908 1286                 if(stristr($val, 'getmail')) unset($existing_cron_jobs[$key]);
0711af 1287             }
7fe908 1288
a8a328 1289             foreach($cron_jobs as $cron_job) {
T 1290                 if(!in_array($cron_job."\n", $existing_cron_jobs)) {
1291                     $existing_cron_jobs[] = $cron_job."\n";
1292                 }
1293             }
1294             file_put_contents('crontab.txt', $existing_cron_jobs);
1295             exec('crontab -u getmail crontab.txt &> /dev/null');
1296             unlink('crontab.txt');
0711af 1297         }
7fe908 1298
00d730 1299         exec('touch /var/log/ispconfig/cron.log');
cc6568 1300         exec('chmod 660 /var/log/ispconfig/cron.log');
0711af 1301     }
T 1302
1303 }
1304
fd4cfd 1305 ?>