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