Marius Cramer
2014-08-13 31230cb7cda673db7a96fb14d93dfaf9262c74cf
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
01423f 232             $command = 'cd '.$config_dir.'; '
7fe908 233                 .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509';
0711af 234             exec($command);
7fe908 235
01423f 236             $command = 'chmod o= '.$config_dir.'/smtpd.key';
0711af 237             caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
T 238         }
7fe908 239
0711af 240         //** We have to change the permissions of the courier authdaemon directory to make it accessible for maildrop.
T 241         $command = 'chmod 755 /var/spool/authdaemon';
242         caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
7fe908 243
0711af 244         //* Changing maildrop lines in posfix master.cf
T 245         if(is_file($config_dir.'/master.cf')){
7fe908 246             copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
MC 247         }
0711af 248         if(is_file($config_dir.'/master.cf~')){
7fe908 249             exec('chmod 400 '.$config_dir.'/master.cf~');
MC 250         }
0711af 251         $configfile = $config_dir.'/master.cf';
T 252         $content = rf($configfile);
2c8f94 253         // if postfix package is from fedora or centios main repo
7fe908 254         $content = str_replace('#  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}',
MC 255             '  flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}',
256             $content);
257
2c8f94 258         // If postfix package is from centos plus repo
7fe908 259         $content = str_replace('#  flags=DRhu user=vmail argv=/usr/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
263         $content = str_replace('  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}',
264             '  flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}',
265             $content);
266
267
268         $content = str_replace('#maildrop  unix  -       n       n       -       -       pipe',
269             'maildrop  unix  -       n       n       -       -       pipe',
270             $content);
271
0711af 272         wf($configfile, $content);
7fe908 273
0711af 274         //* Writing the Maildrop mailfilter file
T 275         $configfile = 'mailfilter';
276         if(is_file($cf['vmail_mailbox_base'].'/.'.$configfile)){
7fe908 277             copy($cf['vmail_mailbox_base'].'/.'.$configfile, $cf['vmail_mailbox_base'].'/.'.$configfile.'~');
MC 278         }
615a0a 279         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master");
0711af 280         $content = str_replace('{dist_postfix_vmail_mailbox_base}', $cf['vmail_mailbox_base'], $content);
T 281         wf($cf['vmail_mailbox_base'].'/.'.$configfile, $content);
7fe908 282
0711af 283         //* Create the directory for the custom mailfilters
T 284         $command = 'mkdir '.$cf['vmail_mailbox_base'].'/mailfilters';
285         caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 286
0711af 287         //* Chmod and chown the .mailfilter file
T 288         $command = 'chown -R '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base'].'/.mailfilter';
289         caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 290
0711af 291         $command = 'chmod -R 600 '.$cf['vmail_mailbox_base'].'/.mailfilter';
T 292         caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 293
0711af 294     }
7fe908 295
0711af 296     public function configure_saslauthd() {
T 297         global $conf;
7fe908 298
0711af 299         $configfile = 'tpl/fedora_saslauthd_smtpd_conf.master';
615a0a 300         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_saslauthd_smtpd_conf.master', $configfile);
7fe908 301         wf('/usr/lib/sasl2/smtpd.conf', $content);
MC 302         if(is_dir('/usr/lib64')) wf('/usr/lib64/sasl/smtpd.conf', $content);
303         if(is_dir('/usr/lib64')) wf('/usr/lib64/sasl2/smtpd.conf', $content);
304
0711af 305     }
7fe908 306
0711af 307     public function configure_pam()
7fe908 308     {
0711af 309         global $conf;
T 310         $pam = $conf['pam'];
311         //* configure pam for SMTP authentication agains the ispconfig database
312         $configfile = 'pamd_smtp';
313         if(is_file("$pam/smtp"))    copy("$pam/smtp", "$pam/smtp~");
314         if(is_file("$pam/smtp~"))   exec("chmod 400 $pam/smtp~");
315
615a0a 316         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master");
0711af 317         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
T 318         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
319         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
320         $content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
321         wf("$pam/smtp", $content);
03bff7 322         // On some OSes smtp is world readable which allows for reading database information.  Removing world readable rights should have no effect.
T 323         if(is_file("$pam/smtp"))    exec("chmod o= $pam/smtp");
0711af 324         //exec("chmod 660 $pam/smtp");
T 325         //exec("chown root:root $pam/smtp");
7fe908 326
0711af 327     }
7fe908 328
0711af 329     public function configure_courier()
7fe908 330     {
0711af 331         global $conf;
T 332         $config_dir = $conf['courier']['config_dir'];
333         //* authmysqlrc
334         $configfile = 'authmysqlrc';
335         if(is_file("$config_dir/$configfile")){
7fe908 336             copy("$config_dir/$configfile", "$config_dir/$configfile~");
MC 337         }
0711af 338         exec("chmod 400 $config_dir/$configfile~");
615a0a 339         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master");
7fe908 340         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
MC 341         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
342         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
343         $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
0711af 344         wf("$config_dir/$configfile", $content);
7fe908 345
0711af 346         exec("chmod 660 $config_dir/$configfile");
T 347         exec("chown root:root $config_dir/$configfile");
7fe908 348
0711af 349         //* authdaemonrc
T 350         $configfile = $conf['courier']['config_dir'].'/authdaemonrc';
351         if(is_file($configfile)){
7fe908 352             copy($configfile, $configfile.'~');
MC 353         }
0711af 354         if(is_file($configfile.'~')){
7fe908 355             exec('chmod 400 '.$configfile.'~');
MC 356         }
0711af 357         $content = rf($configfile);
T 358         $content = str_replace('authmodulelist=', 'authmodulelist="authmysql"', $content);
359         wf($configfile, $content);
360     }
7fe908 361
0f2bb1 362     public function configure_dovecot()
7fe908 363     {
0f2bb1 364         global $conf;
7fe908 365
0f2bb1 366         $config_dir = $conf['dovecot']['config_dir'];
7fe908 367
9ec545 368         //* Use /etc/dovecot as config dir if exists
T 369         if(is_dir('/etc/dovecot')) $config_dir = '/etc/dovecot';
7fe908 370
0f2bb1 371         //* Configure master.cf and add a line for deliver
T 372         if(is_file($config_dir.'/master.cf')){
7fe908 373             copy($config_dir.'/master.cf', $config_dir.'/master.cf~2');
MC 374         }
0f2bb1 375         if(is_file($config_dir.'/master.cf~')){
7fe908 376             exec('chmod 400 '.$config_dir.'/master.cf~2');
MC 377         }
0f2bb1 378         $content = rf($conf["postfix"]["config_dir"].'/master.cf');
T 379         // Only add the content if we had not addded it before
7fe908 380         if(!stristr($content, "dovecot/deliver")) {
013ae4 381             $deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DROhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}';
7fe908 382             af($conf["postfix"]["config_dir"].'/master.cf', $deliver_content);
0f2bb1 383         }
T 384         unset($content);
385         unset($deliver_content);
7fe908 386
MC 387
0f2bb1 388         //* Reconfigure postfix to use dovecot authentication
T 389         // Adding the amavisd commands to the postfix configuration
390         $postconf_commands = array (
391             'dovecot_destination_recipient_limit = 1',
392             'virtual_transport = dovecot',
393             'smtpd_sasl_type = dovecot',
394             'smtpd_sasl_path = private/auth',
395         );
7fe908 396
0f2bb1 397         // Make a backup copy of the main.cf file
7fe908 398         copy($conf["postfix"]["config_dir"].'/main.cf', $conf["postfix"]["config_dir"].'/main.cf~3');
MC 399
0f2bb1 400         // Executing the postconf commands
T 401         foreach($postconf_commands as $cmd) {
402             $command = "postconf -e '$cmd'";
403             caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
404         }
7fe908 405
31e0d1 406         //* backup dovecot.conf
0f2bb1 407         $configfile = 'dovecot.conf';
T 408         if(is_file("$config_dir/$configfile")){
7fe908 409             copy("$config_dir/$configfile", "$config_dir/$configfile~");
MC 410         }
411
31e0d1 412         //* Get the dovecot version
7fe908 413         exec('dovecot --version', $tmp);
MC 414         $parts = explode('.', trim($tmp[0]));
31e0d1 415         $dovecot_version = $parts[0];
T 416         unset($tmp);
417         unset($parts);
7fe908 418
31e0d1 419         //* Copy dovecot configuration file
T 420         if($dovecot_version == 2) {
7fe908 421             if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot2.conf.master')) {
MC 422                 copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot2.conf.master', $config_dir.'/'.$configfile);
423             } else {
424                 copy('tpl/fedora_dovecot2.conf.master', $config_dir.'/'.$configfile);
425             }
31e0d1 426         } else {
7fe908 427             if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot.conf.master')) {
MC 428                 copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot.conf.master', $config_dir.'/'.$configfile);
429             } else {
430                 copy('tpl/fedora_dovecot.conf.master', $config_dir.'/'.$configfile);
431             }
31e0d1 432         }
615a0a 433
0f2bb1 434         //* dovecot-sql.conf
T 435         $configfile = 'dovecot-sql.conf';
436         if(is_file("$config_dir/$configfile")){
7fe908 437             copy("$config_dir/$configfile", "$config_dir/$configfile~");
0f2bb1 438             exec("chmod 400 $config_dir/$configfile~");
7fe908 439         }
85f6fb 440         
TB 441         if(!@file_exists('/etc/dovecot-sql.conf')) exec('ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf');
7fe908 442
615a0a 443         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_dovecot-sql.conf.master', "tpl/fedora_dovecot-sql.conf.master");
7fe908 444         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
MC 445         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
446         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
447         $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
0f2bb1 448         wf("$config_dir/$configfile", $content);
7fe908 449
0f2bb1 450         exec("chmod 600 $config_dir/$configfile");
T 451         exec("chown root:root $config_dir/$configfile");
5e7306 452         
TB 453         // Dovecot shall ignore mounts in website directory
85f6fb 454         if(is_installed('doveadm')) exec("doveadm mount add '/var/www/*' ignore > /dev/null 2> /dev/null");
0f2bb1 455
T 456     }
7fe908 457
0711af 458     public function configure_amavis() {
T 459         global $conf;
7fe908 460
0711af 461         // amavisd user config file
T 462         $configfile = 'fedora_amavisd_conf';
7fe908 463         if(is_file($conf["amavis"]["config_dir"].'/amavisd.conf')) copy($conf["amavis"]["config_dir"].'/amavisd.conf', $conf["amavis"]["config_dir"].'/amavisd.conf~');
0711af 464         if(is_file($conf["amavis"]["config_dir"].'/amavisd.conf~')) exec('chmod 400 '.$conf["amavis"]["config_dir"].'/amavisd.conf~');
615a0a 465         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/".$configfile.".master");
7fe908 466         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
MC 467         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
468         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
469         $content = str_replace('{mysql_server_port}', $conf["mysql"]["port"], $content);
470         $content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
471         $content = str_replace('{hostname}', $conf['hostname'], $content);
472         wf($conf["amavis"]["config_dir"].'/amavisd.conf', $content);
473
474
0711af 475         // Adding the amavisd commands to the postfix configuration
T 476         $postconf_commands = array (
477             'content_filter = amavis:[127.0.0.1]:10024',
478             'receive_override_options = no_address_mappings'
479         );
7fe908 480
0711af 481         // Make a backup copy of the main.cf file
7fe908 482         copy($conf["postfix"]["config_dir"].'/main.cf', $conf["postfix"]["config_dir"].'/main.cf~2');
MC 483
0711af 484         // Executing the postconf commands
T 485         foreach($postconf_commands as $cmd) {
486             $command = "postconf -e '$cmd'";
487             caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
488         }
7fe908 489
0711af 490         // Append the configuration for amavisd to the master.cf file
7fe908 491         if(is_file($conf["postfix"]["config_dir"].'/master.cf')) copy($conf["postfix"]["config_dir"].'/master.cf', $conf["postfix"]["config_dir"].'/master.cf~');
0711af 492         $content = rf($conf["postfix"]["config_dir"].'/master.cf');
T 493         // Only add the content if we had not addded it before
7fe908 494         if(!stristr($content, "127.0.0.1:10025")) {
0711af 495             unset($content);
615a0a 496             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/master_cf_amavis.master', "tpl/master_cf_amavis.master");
7fe908 497             af($conf["postfix"]["config_dir"].'/master.cf', $content);
0711af 498         }
T 499         unset($content);
7fe908 500
MC 501         removeLine('/etc/sysconfig/freshclam', 'FRESHCLAM_DELAY=disabled-warn   # REMOVE ME', 1);
502         replaceLine('/etc/freshclam.conf', 'Example', '# Example', 1);
503
0711af 504         // Add the clamav user to the vscan group
T 505         //exec('groupmod --add-user clamav vscan');
7fe908 506
MC 507
0711af 508     }
7fe908 509
0711af 510     public function configure_spamassassin()
7fe908 511     {
0711af 512         global $conf;
7fe908 513
0711af 514         //* Enable spamasasssin on debian and ubuntu
T 515         /*
516         $configfile = '/etc/default/spamassassin';
517         if(is_file($configfile)){
518             copy($configfile, $configfile.'~');
519         }
520         $content = rf($configfile);
521         $content = str_replace('ENABLED=0', 'ENABLED=1', $content);
522         wf($configfile, $content);
523         */
524     }
7fe908 525
0711af 526     public function configure_getmail()
7fe908 527     {
0711af 528         global $conf;
7fe908 529
0711af 530         $config_dir = $conf['getmail']['config_dir'];
7fe908 531
0711af 532         if(!is_dir($config_dir)) exec("mkdir -p ".escapeshellcmd($config_dir));
T 533
534         $command = "useradd -d $config_dir getmail";
392450 535         if(!is_user('getmail')) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 536
0711af 537         $command = "chown -R getmail $config_dir";
T 538         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 539
0711af 540         $command = "chmod -R 700 $config_dir";
T 541         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
542     }
7fe908 543
MC 544
0711af 545     public function configure_pureftpd()
7fe908 546     {
0711af 547         global $conf;
7fe908 548
0711af 549         $config_dir = $conf['pureftpd']['config_dir'];
T 550
551         //* configure pam for SMTP authentication agains the ispconfig database
552         $configfile = 'pureftpd-mysql.conf';
553         if(is_file("$config_dir/$configfile")){
7fe908 554             copy("$config_dir/$configfile", "$config_dir/$configfile~");
MC 555         }
0711af 556         if(is_file("$config_dir/$configfile~")){
7fe908 557             exec("chmod 400 $config_dir/$configfile~");
MC 558         }
615a0a 559         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/pureftpd_mysql.conf.master', 'tpl/pureftpd_mysql.conf.master');
0711af 560         $content = str_replace('{mysql_server_ispconfig_user}', $conf["mysql"]["ispconfig_user"], $content);
T 561         $content = str_replace('{mysql_server_ispconfig_password}', $conf["mysql"]["ispconfig_password"], $content);
562         $content = str_replace('{mysql_server_database}', $conf["mysql"]["database"], $content);
563         $content = str_replace('{mysql_server_ip}', $conf["mysql"]["ip"], $content);
564         $content = str_replace('{server_id}', $conf["server_id"], $content);
565         wf("$config_dir/$configfile", $content);
566         exec("chmod 600 $config_dir/$configfile");
567         exec("chown root:root $config_dir/$configfile");
7fe908 568
0711af 569         // copy our customized copy of pureftpd.conf to the pure-ftpd config directory
615a0a 570         if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_pureftpd_conf.master')) {
7fe908 571             exec("cp " . $conf['ispconfig_install_dir'].'/server/conf-custom/install/fedora_pureftpd_conf.master ' . "$config_dir/pure-ftpd.conf");
MC 572         }else {
573             exec("cp tpl/fedora_pureftpd_conf.master $config_dir/pure-ftpd.conf");
574         }
575
0711af 576     }
7fe908 577
0711af 578     public function configure_mydns()
7fe908 579     {
0711af 580         global $conf;
7fe908 581
0711af 582         // configure mydns
T 583         $configfile = 'mydns.conf';
7fe908 584         if(is_file($conf["mydns"]["config_dir"].'/'.$configfile)) copy($conf["mydns"]["config_dir"].'/'.$configfile, $conf["mydns"]["config_dir"].'/'.$configfile.'~');
0711af 585         if(is_file($conf["mydns"]["config_dir"].'/'.$configfile.'~')) exec('chmod 400 '.$conf["mydns"]["config_dir"].'/'.$configfile.'~');
615a0a 586         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/".$configfile.".master");
7fe908 587         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
MC 588         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
589         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
590         $content = str_replace('{mysql_server_host}', $conf["mysql"]["host"], $content);
591         $content = str_replace('{server_id}', $conf["server_id"], $content);
592         wf($conf["mydns"]["config_dir"].'/'.$configfile, $content);
0711af 593         exec('chmod 600 '.$conf["mydns"]["config_dir"].'/'.$configfile);
T 594         exec('chown root:root '.$conf["mydns"]["config_dir"].'/'.$configfile);
7fe908 595
0711af 596     }
7fe908 597
0f2bb1 598     public function configure_bind() {
T 599         global $conf;
7fe908 600
0f2bb1 601         // add the include line at the end of named.conf.
7fe908 602         replaceLine('/etc/named.conf', 'include "/etc/named.conf.local";', 'include "/etc/named.conf.local";', 0, 1);
fd4cfd 603
D 604         //* Check if the zonefile directory has a slash at the end
605         $content=$conf['bind']['bind_zonefiles_dir'];
7fe908 606         if(substr($content, -1, 1) != '/') {
fd4cfd 607             $content .= '/';
D 608         }
609
610         //* Create the slave subdirectory
611         $content .= 'slave';
612         $content_mkdir = 'mkdir -p '.$content;
613         exec($content_mkdir);
614
615         //* Chown the slave subdirectory to $conf['bind']['bind_user']
616         exec('chown '.$conf['bind']['bind_user'].':'.$conf['bind']['bind_group'].' '.$content);
617         exec('chmod 770 '.$content);
7fe908 618
0f2bb1 619     }
7fe908 620
0711af 621     public function configure_apache()
7fe908 622     {
0711af 623         global $conf;
7fe908 624
1bd269 625         if($conf['apache']['installed'] == false) return;
bde98e 626         if(is_file('/etc/suphp.conf')) {
4c7fd5 627             //replaceLine('/etc/suphp.conf','php=php:/usr/bin','x-httpd-suphp=php:/usr/bin/php-cgi',0);
7fe908 628             replaceLine('/etc/suphp.conf', 'docroot=', 'docroot=/var/www', 0);
MC 629             replaceLine('/etc/suphp.conf', 'umask=0077', 'umask=0022', 0);
bde98e 630         }
7fe908 631
0711af 632         //* Create the logging directory for the vhost logfiles
T 633         exec('mkdir -p /var/log/ispconfig/httpd');
7fe908 634
0711af 635         // Sites enabled and avaulable dirs
T 636         exec('mkdir -p '.$conf['apache']['vhost_conf_enabled_dir']);
637         exec('mkdir -p '.$conf['apache']['vhost_conf_dir']);
7fe908 638
0711af 639         $content = rf('/etc/httpd/conf/httpd.conf');
7fe908 640         if(!stristr($content, 'Include /etc/httpd/conf/sites-enabled/')) {
MC 641             af('/etc/httpd/conf/httpd.conf', "\nNameVirtualHost *:80\nNameVirtualHost *:443\nInclude /etc/httpd/conf/sites-enabled/\n\n");
0711af 642         }
T 643         unset($content);
7fe908 644
9de0c4 645         //* Copy the ISPConfig configuration include
7fe908 646         $vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
MC 647         $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
648
ccbf14 649         $tpl = new tpl('apache_ispconfig.conf.master');
TB 650         $tpl->setVar('apache_version',getapacheversion());
651         
a2156e 652         $records = $this->db->queryAllRecords('SELECT * FROM '.$conf['mysql']['master_database'].'.server_ip WHERE server_id = '.$conf['server_id']." AND virtualhost = 'y'");
ccbf14 653         $ip_addresses = array();
TB 654         
fb3a98 655         if(is_array($records) && count($records) > 0) {
86e3bb 656             foreach($records as $rec) {
a2156e 657                 if($rec['ip_type'] == 'IPv6') {
T 658                     $ip_address = '['.$rec['ip_address'].']';
659                 } else {
660                     $ip_address = $rec['ip_address'];
661                 }
7fe908 662                 $ports = explode(',', $rec['virtualhost_port']);
a2156e 663                 if(is_array($ports)) {
T 664                     foreach($ports as $port) {
665                         $port = intval($port);
666                         if($port > 0 && $port < 65536 && $ip_address != '') {
ccbf14 667                             $ip_addresses[] = array('ip_address' => $ip_address, 'port' => $port);
a2156e 668                         }
T 669                     }
670                 }
86e3bb 671             }
T 672         }
855547 673         
3de838 674         if(count($ip_addresses) > 0) $tpl->setLoop('ip_adresses',$ip_addresses);
7fe908 675
ccbf14 676         wf($vhost_conf_dir.'/ispconfig.conf', $tpl->grab());
TB 677         unset($tpl);
7fe908 678
9de0c4 679         if(!@is_link($vhost_conf_enabled_dir."/000-ispconfig.conf")) {
T 680             exec("ln -s ".$vhost_conf_dir."/ispconfig.conf ".$vhost_conf_enabled_dir."/000-ispconfig.conf");
681         }
7fe908 682
99d5dc 683         //* make sure that webalizer finds its config file when it is directly in /etc
T 684         if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
685             exec('mkdir /etc/webalizer');
686             exec('ln -s /etc/webalizer.conf /etc/webalizer/webalizer.conf');
687         }
7fe908 688
99d5dc 689         if(is_file('/etc/webalizer/webalizer.conf')) {
T 690             // Change webalizer mode to incremental
7fe908 691             replaceLine('/etc/webalizer/webalizer.conf', '#IncrementalName', 'IncrementalName webalizer.current', 0, 0);
MC 692             replaceLine('/etc/webalizer/webalizer.conf', '#Incremental', 'Incremental     yes', 0, 0);
693             replaceLine('/etc/webalizer/webalizer.conf', '#HistoryName', 'HistoryName     webalizer.hist', 0, 0);
99d5dc 694         }
7fe908 695
6b029a 696         //* add a sshusers group
T 697         $command = 'groupadd sshusers';
698         if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 699
0711af 700     }
7fe908 701
d95ed9 702     public function configure_nginx(){
F 703         global $conf;
7fe908 704
d95ed9 705         if($conf['nginx']['installed'] == false) return;
F 706         //* Create the logging directory for the vhost logfiles
707         if(!@is_dir($conf['ispconfig_log_dir'].'/httpd')) mkdir($conf['ispconfig_log_dir'].'/httpd', 0755, true);
7fe908 708
d95ed9 709         // Sites enabled and avaulable dirs
F 710         exec('mkdir -p '.$conf['nginx']['vhost_conf_enabled_dir']);
711         exec('mkdir -p '.$conf['nginx']['vhost_conf_dir']);
712
7fe908 713         wf('/etc/nginx/conf.d/ispconfig_vhosts.conf', "include /etc/nginx/sites-enabled/*.vhost;");
d95ed9 714
F 715         //* make sure that webalizer finds its config file when it is directly in /etc
716         if(@is_file('/etc/webalizer.conf') && !@is_dir('/etc/webalizer')) {
717             mkdir('/etc/webalizer');
7fe908 718             symlink('/etc/webalizer.conf', '/etc/webalizer/webalizer.conf');
d95ed9 719         }
F 720
721         if(is_file('/etc/webalizer/webalizer.conf')) {
722             // Change webalizer mode to incremental
7fe908 723             replaceLine('/etc/webalizer/webalizer.conf', '#IncrementalName', 'IncrementalName webalizer.current', 0, 0);
MC 724             replaceLine('/etc/webalizer/webalizer.conf', '#Incremental', 'Incremental     yes', 0, 0);
725             replaceLine('/etc/webalizer/webalizer.conf', '#HistoryName', 'HistoryName     webalizer.hist', 0, 0);
d95ed9 726         }
7fe908 727
d95ed9 728         // Check the awsatst script
F 729         if(!is_dir('/usr/share/awstats/tools')) exec('mkdir -p /usr/share/awstats/tools');
7fe908 730         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 731         if(file_exists('/etc/awstats/awstats.conf.local')) replaceLine('/etc/awstats/awstats.conf.local', 'LogFormat=4', 'LogFormat=1', 0, 1);
732
d95ed9 733         //* add a sshusers group
F 734         $command = 'groupadd sshusers';
735         if(!is_group('sshusers')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
736     }
7fe908 737
0711af 738     public function configure_firewall()
T 739     {
740         global $conf;
7fe908 741
0711af 742         $dist_init_scripts = $conf['init_scripts'];
7fe908 743
0711af 744         if(is_dir("/etc/Bastille.backup")) caselog("rm -rf /etc/Bastille.backup", __FILE__, __LINE__);
T 745         if(is_dir("/etc/Bastille")) caselog("mv -f /etc/Bastille /etc/Bastille.backup", __FILE__, __LINE__);
7fe908 746         @mkdir("/etc/Bastille", octdec($directory_mode));
MC 747         if(is_dir("/etc/Bastille.backup/firewall.d")) caselog("cp -pfr /etc/Bastille.backup/firewall.d /etc/Bastille/", __FILE__, __LINE__);
748         if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/bastille-firewall.cfg.master')) {
749             caselog("cp -f " . $conf['ispconfig_install_dir']."/server/conf-custom/install/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
750         } else {
751             caselog("cp -f tpl/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
752         }
753         caselog("chmod 644 /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
754         $content = rf("/etc/Bastille/bastille-firewall.cfg");
755         $content = str_replace("{DNS_SERVERS}", "", $content);
0711af 756
7fe908 757         $tcp_public_services = '';
MC 758         $udp_public_services = '';
759
fb3a98 760         $row = $this->db->queryOneRecord('SELECT * FROM '.$conf["mysql"]["database"].'.firewall WHERE server_id = '.intval($conf['server_id']));
7fe908 761
MC 762         if(trim($row["tcp_port"]) != '' || trim($row["udp_port"]) != ''){
763             $tcp_public_services = trim(str_replace(',', ' ', $row["tcp_port"]));
764             $udp_public_services = trim(str_replace(',', ' ', $row["udp_port"]));
765         } else {
766             $tcp_public_services = '21 22 25 53 80 110 443 3306 8080 10000';
767             $udp_public_services = '53';
768         }
9ce725 769         if(!stristr($tcp_public_services, $conf['apache']['vhost_port'])) {
96cc31 770             $tcp_public_services .= ' '.intval($conf['apache']['vhost_port']);
57299d 771             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 772         }
0711af 773
7fe908 774         $content = str_replace("{TCP_PUBLIC_SERVICES}", $tcp_public_services, $content);
MC 775         $content = str_replace("{UDP_PUBLIC_SERVICES}", $udp_public_services, $content);
0711af 776
7fe908 777         wf("/etc/Bastille/bastille-firewall.cfg", $content);
0711af 778
7fe908 779         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 780         caselog("cp -f apps/bastille-firewall $dist_init_scripts", __FILE__, __LINE__);
781         caselog("chmod 700 $dist_init_scripts/bastille-firewall", __FILE__, __LINE__);
0711af 782
7fe908 783         if(is_file("/sbin/bastille-ipchains")) caselog("mv -f /sbin/bastille-ipchains /sbin/bastille-ipchains.backup", __FILE__, __LINE__);
MC 784         caselog("cp -f apps/bastille-ipchains /sbin", __FILE__, __LINE__);
785         caselog("chmod 700 /sbin/bastille-ipchains", __FILE__, __LINE__);
786
787         if(is_file("/sbin/bastille-netfilter")) caselog("mv -f /sbin/bastille-netfilter /sbin/bastille-netfilter.backup", __FILE__, __LINE__);
788         caselog("cp -f apps/bastille-netfilter /sbin", __FILE__, __LINE__);
789         caselog("chmod 700 /sbin/bastille-netfilter", __FILE__, __LINE__);
790
0711af 791         if(!@is_dir('/var/lock/subsys')) caselog("mkdir /var/lock/subsys", __FILE__, __LINE__);
T 792
7fe908 793         exec("which ipchains &> /dev/null", $ipchains_location, $ret_val);
MC 794         if(!is_file("/sbin/ipchains") && !is_link("/sbin/ipchains") && $ret_val == 0) phpcaselog(@symlink(shell_exec("which ipchains"), "/sbin/ipchains"), 'create symlink', __FILE__, __LINE__);
795         unset($ipchains_location);
796         exec("which iptables &> /dev/null", $iptables_location, $ret_val);
797         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__);
798         unset($iptables_location);
0711af 799
T 800     }
7fe908 801
MC 802
0711af 803     public function install_ispconfig()
7fe908 804     {
0711af 805         global $conf;
7fe908 806
0711af 807         $install_dir = $conf['ispconfig_install_dir'];
T 808
809         //* Create the ISPConfig installation directory
810         if(!@is_dir("$install_dir")) {
811             $command = "mkdir $install_dir";
812             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
813         }
7fe908 814
0711af 815         //* Create a ISPConfig user and group
T 816         $command = 'groupadd ispconfig';
392450 817         if(!is_group('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 818
0711af 819         $command = "useradd -g ispconfig -d $install_dir ispconfig";
392450 820         if(!is_user('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 821
0711af 822         //* copy the ISPConfig interface part
T 823         $command = "cp -rf ../interface $install_dir";
824         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 825
0711af 826         //* copy the ISPConfig server part
T 827         $command = "cp -rf ../server $install_dir";
828         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 829
0711af 830         //* Create a symlink, so ISPConfig is accessible via web
T 831         // Replaced by a separate vhost definition for port 8080
832         // $command = "ln -s $install_dir/interface/web/ /var/www/ispconfig";
833         // caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 834
0711af 835         //* Create the config file for ISPConfig interface
T 836         $configfile = 'config.inc.php';
837         if(is_file($install_dir.'/interface/lib/'.$configfile)){
7fe908 838             copy("$install_dir/interface/lib/$configfile", "$install_dir/interface/lib/$configfile~");
MC 839         }
615a0a 840         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master");
0711af 841         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
7fe908 842         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
0711af 843         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
T 844         $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
7fe908 845
12e3ba 846         $content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
T 847         $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
848         $content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
849         $content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
7fe908 850
7c3b60 851         $content = str_replace('{server_id}', $conf['server_id'], $content);
0711af 852         $content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
56f1f4 853         $content = str_replace('{language}', $conf['language'], $content);
8cf78b 854         $content = str_replace('{timezone}', $conf['timezone'], $content);
41eaa8 855         $content = str_replace('{theme}', $conf['theme'], $content);
992797 856         $content = str_replace('{language_file_import_enabled}', ($conf['language_file_import_enabled'] == true)?'true':'false', $content);
7fe908 857
0711af 858         wf("$install_dir/interface/lib/$configfile", $content);
7fe908 859
0711af 860         //* Create the config file for ISPConfig server
T 861         $configfile = 'config.inc.php';
862         if(is_file($install_dir.'/server/lib/'.$configfile)){
7fe908 863             copy("$install_dir/server/lib/$configfile", "$install_dir/interface/lib/$configfile~");
MC 864         }
615a0a 865         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', "tpl/$configfile.master");
0711af 866         $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
T 867         $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
868         $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
869         $content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
7fe908 870
12e3ba 871         $content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
T 872         $content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
873         $content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
874         $content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
7fe908 875
0711af 876         $content = str_replace('{server_id}', $conf['server_id'], $content);
T 877         $content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
5898e6 878         $content = str_replace('{language}', $conf['language'], $content);
8cf78b 879         $content = str_replace('{timezone}', $conf['timezone'], $content);
41eaa8 880         $content = str_replace('{theme}', $conf['theme'], $content);
992797 881         $content = str_replace('{language_file_import_enabled}', ($conf['language_file_import_enabled'] == true)?'true':'false', $content);
5c4d55 882
0711af 883         wf("$install_dir/server/lib/$configfile", $content);
7fe908 884
fb3a98 885         //* Create the config file for remote-actions (but only, if it does not exist, because
T 886         //  the value is a autoinc-value and so changed by the remoteaction_core_module
887         if (!file_exists($install_dir.'/server/lib/remote_action.inc.php')) {
888             $content = '<?php' . "\n" . '$maxid_remote_action = 0;' . "\n" . '?>';
889             wf($install_dir.'/server/lib/remote_action.inc.php', $content);
890         }
7fe908 891
MC 892
0711af 893         //* Enable the server modules and plugins.
T 894         // TODO: Implement a selector which modules and plugins shall be enabled.
895         $dir = $install_dir.'/server/mods-available/';
896         if (is_dir($dir)) {
897             if ($dh = opendir($dir)) {
898                 while (($file = readdir($dh)) !== false) {
7fe908 899                     if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
MC 900                         include_once $install_dir.'/server/mods-available/'.$file;
901                         $module_name = substr($file, 0, -8);
392450 902                         $tmp = new $module_name;
T 903                         if($tmp->onInstall()) {
904                             if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
905                             if (strpos($file, '_core_module') !== false) {
906                                 if(!@is_link($install_dir.'/server/mods-core/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-core/'.$file);
907                             }
0d0cd9 908                         }
392450 909                         unset($tmp);
0711af 910                     }
T 911                 }
912                 closedir($dh);
913             }
914         }
7fe908 915
0711af 916         $dir = $install_dir.'/server/plugins-available/';
T 917         if (is_dir($dir)) {
918             if ($dh = opendir($dir)) {
919                 while (($file = readdir($dh)) !== false) {
1bd269 920                     if($conf['apache']['installed'] == true && $file == 'nginx_plugin.inc.php') continue;
F 921                     if($conf['nginx']['installed'] == true && $file == 'apache2_plugin.inc.php') continue;
7fe908 922                     if($file != '.' && $file != '..' && substr($file, -8, 8) == '.inc.php') {
MC 923                         include_once $install_dir.'/server/plugins-available/'.$file;
924                         $plugin_name = substr($file, 0, -8);
392450 925                         $tmp = new $plugin_name;
T 926                         if($tmp->onInstall()) {
927                             if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
928                             if (strpos($file, '_core_plugin') !== false) {
929                                 if(!@is_link($install_dir.'/server/plugins-core/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
930                             }
0d0cd9 931                         }
392450 932                         unset($tmp);
0711af 933                     }
T 934                 }
935                 closedir($dh);
936             }
937         }
7fe908 938
392450 939         // Update the server config
T 940         $mail_server_enabled = ($conf['services']['mail'])?1:0;
941         $web_server_enabled = ($conf['services']['web'])?1:0;
942         $dns_server_enabled = ($conf['services']['dns'])?1:0;
943         $file_server_enabled = ($conf['services']['file'])?1:0;
944         $db_server_enabled = ($conf['services']['db'])?1:0;
945         $vserver_server_enabled = ($conf['services']['vserver'])?1:0;
946         $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 947
392450 948         if($conf['mysql']['master_slave_setup'] == 'y') {
T 949             $this->dbmaster->query($sql);
f66929 950             $this->db->query($sql);
392450 951         } else {
T 952             $this->db->query($sql);
953         }
7fe908 954
0711af 955         //* Chmod the files
T 956         $command = "chmod -R 750 $install_dir";
957         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
958
959         //* chown the files to the ispconfig user and group
960         $command = "chown -R ispconfig:ispconfig $install_dir";
961         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 962
0711af 963         //* Make the global language file directory group writable
T 964         exec("chmod -R 770 $install_dir/interface/lib/lang");
7fe908 965
0711af 966         //* Make the temp directory for language file exports writable
T 967         exec("chmod -R 770 $install_dir/interface/web/temp");
7fe908 968
0711af 969         //* Make all interface language file directories group writable
T 970         $handle = @opendir($install_dir.'/interface/web');
7fe908 971         while ($file = @readdir($handle)) {
MC 972             if ($file != '.' && $file != '..') {
973                 if(@is_dir($install_dir.'/interface/web'.'/'.$file.'/lib/lang')) {
0711af 974                     $handle2 = opendir($install_dir.'/interface/web'.'/'.$file.'/lib/lang');
7fe908 975                     chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang', 0770);
MC 976                     while ($lang_file = @readdir($handle2)) {
0711af 977                         if ($lang_file != '.' && $lang_file != '..') {
7fe908 978                             chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang/'.$lang_file, 0770);
0711af 979                         }
T 980                     }
981                 }
982             }
983         }
7fe908 984
477d4e 985         //* Make the APS directories group writable
T 986         exec("chmod -R 770 $install_dir/interface/web/sites/aps_meta_packages");
987         exec("chmod -R 770 $install_dir/server/aps_packages");
7fe908 988
0711af 989         //* make sure that the server config file (not the interface one) is only readable by the root user
bfcdef 990         chmod($install_dir.'/server/lib/config.inc.php', 0600);
T 991         chown($install_dir.'/server/lib/config.inc.php', 'root');
992         chgrp($install_dir.'/server/lib/config.inc.php', 'root');
7fe908 993
bfcdef 994         //* Make sure thet the interface config file is readable by user ispconfig only
T 995         chmod($install_dir.'/interface/lib/config.inc.php', 0600);
996         chown($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
997         chgrp($install_dir.'/interface/lib/config.inc.php', 'ispconfig');
7fe908 998
0711af 999         if(@is_file("$install_dir/server/lib/mysql_clientdb.conf")) {
T 1000             exec("chmod 600 $install_dir/server/lib/mysql_clientdb.conf");
1001             exec("chown root:root $install_dir/server/lib/mysql_clientdb.conf");
1002         }
7fe908 1003
0711af 1004         // TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
T 1005         // and must be fixed as this will allow the apache user to read the ispconfig files.
1006         // Later this must run as own apache server or via suexec!
63b369 1007         if($conf['apache']['installed'] == true){
F 1008             $command = 'usermod -a -G ispconfig '.$conf['apache']['user'];
1009             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
272aec 1010             if(is_group('ispapps')){
F 1011                 $command = 'usermod -a -G ispapps '.$conf['apache']['user'];
1012                 caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1013             }
63b369 1014         }
F 1015         if($conf['nginx']['installed'] == true){
1016             $command = 'usermod -a -G ispconfig '.$conf['nginx']['user'];
1017             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
8ab3cd 1018             //if(is_user('ispapps')){
7fe908 1019             // Allow the ispapps vhost access to /etc/squirrelmail
MC 1020             //$command = 'usermod -a -G '.$conf['apache']['group'].' ispapps';
1021             //caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
8ab3cd 1022             //}
272aec 1023             if(is_group('ispapps')){
F 1024                 $command = 'usermod -a -G ispapps '.$conf['nginx']['user'];
1025                 caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1026             }
63b369 1027         }
7fe908 1028
0711af 1029         //* Make the shell scripts executable
T 1030         $command = "chmod +x $install_dir/server/scripts/*.sh";
1031         caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
7fe908 1032
7e1cfb 1033         if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
1bd269 1034             //* Copy the ISPConfig vhost for the controlpanel
F 1035             // TODO: These are missing! should they be "vhost_dist_*_dir" ?
1036             $vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
1037             $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
7fe908 1038
MC 1039
1bd269 1040             // Dont just copy over the virtualhost template but add some custom settings
ccbf14 1041             $tpl = new tpl('apache_ispconfig.vhost.master');
TB 1042             $tpl->setVar('vhost_port',$conf['apache']['vhost_port']);
7fe908 1043
1bd269 1044             // comment out the listen directive if port is 80 or 443
F 1045             if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) {
ccbf14 1046                 $tpl->setVar('vhost_port_listen','#');
1bd269 1047             } else {
ccbf14 1048                 $tpl->setVar('vhost_port_listen','');
1bd269 1049             }
7fe908 1050
ccbf14 1051             if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
TB 1052                 $tpl->setVar('ssl_comment','');
1bd269 1053             } else {
ccbf14 1054                 $tpl->setVar('ssl_comment','#');
1bd269 1055             }
10b4c8 1056             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 1057                 $tpl->setVar('ssl_bundle_comment','');
10b4c8 1058             } else {
ccbf14 1059                 $tpl->setVar('ssl_bundle_comment','#');
10b4c8 1060             }
ccbf14 1061             
TB 1062             $tpl->setVar('apache_version',getapacheversion());
7fe908 1063
ccbf14 1064             wf($vhost_conf_dir.'/ispconfig.vhost', $tpl->grab());
7fe908 1065
1bd269 1066             //copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
F 1067             //* and create the symlink
cc6568 1068             //if($this->is_update == false) {
7fe908 1069             if(@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) unlink("$vhost_conf_enabled_dir/ispconfig.vhost");
MC 1070             if(!@is_link("$vhost_conf_enabled_dir/000-ispconfig.vhost")) {
1071                 exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/000-ispconfig.vhost");
1072             }
1073
1074             /*
1bd269 1075                 exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
F 1076                 exec('cp tpl/apache_ispconfig_fcgi_starter.master /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1077                 exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1078                 exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
1079                 exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
7fe908 1080
1bd269 1081                 replaceLine('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter','PHPRC=','PHPRC=/etc/',0,0);
526b99 1082                 */
7fe908 1083             //if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
MC 1084             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master');
1085             $content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
1086             $content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
1087             if(!is_dir('/var/www/php-fcgi-scripts/ispconfig')) exec('mkdir -p /var/www/php-fcgi-scripts/ispconfig');
1088             wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
1089             exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
1090             if(!is_link('/var/www/ispconfig')) exec('ln -s /usr/local/ispconfig/interface/web /var/www/ispconfig');
1091             exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
1092             //}
cc6568 1093             //}
f6d745 1094         }
7fe908 1095
7e1cfb 1096         if($conf['nginx']['installed'] == true && $this->install_ispconfig_interface == true){
1bd269 1097             //* Copy the ISPConfig vhost for the controlpanel
F 1098             $vhost_conf_dir = $conf['nginx']['vhost_conf_dir'];
1099             $vhost_conf_enabled_dir = $conf['nginx']['vhost_conf_enabled_dir'];
1100
1101             // Dont just copy over the virtualhost template but add some custom settings
615a0a 1102             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/nginx_ispconfig.vhost.master', 'tpl/nginx_ispconfig.vhost.master');
1bd269 1103             $content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
7fe908 1104
1bd269 1105             if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
10b4c8 1106                 $content = str_replace('{ssl_on}', ' on', $content);
1bd269 1107                 $content = str_replace('{ssl_comment}', '', $content);
F 1108                 $content = str_replace('{fastcgi_ssl}', 'on', $content);
1109             } else {
10b4c8 1110                 $content = str_replace('{ssl_on}', ' off', $content);
1bd269 1111                 $content = str_replace('{ssl_comment}', '#', $content);
F 1112                 $content = str_replace('{fastcgi_ssl}', 'off', $content);
0711af 1113             }
7fe908 1114
ca0b77 1115             $socket_dir = escapeshellcmd($conf['nginx']['php_fpm_socket_dir']);
7fe908 1116             if(substr($socket_dir, -1) != '/') $socket_dir .= '/';
ca0b77 1117             if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir);
F 1118             $fpm_socket = $socket_dir.'ispconfig.sock';
7fe908 1119
ca0b77 1120             //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
F 1121             $content = str_replace('{fpm_socket}', $fpm_socket, $content);
1bd269 1122
F 1123             wf($vhost_conf_dir.'/ispconfig.vhost', $content);
7fe908 1124
1bd269 1125             unset($content);
7fe908 1126
1bd269 1127             // PHP-FPM
F 1128             // Dont just copy over the php-fpm pool template but add some custom settings
615a0a 1129             $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/php_fpm_pool.conf.master', 'tpl/php_fpm_pool.conf.master');
1bd269 1130             $content = str_replace('{fpm_pool}', 'ispconfig', $content);
ca0b77 1131             //$content = str_replace('{fpm_port}', $conf['nginx']['php_fpm_start_port'], $content);
F 1132             $content = str_replace('{fpm_socket}', $fpm_socket, $content);
1bd269 1133             $content = str_replace('{fpm_user}', 'ispconfig', $content);
F 1134             $content = str_replace('{fpm_group}', 'ispconfig', $content);
1135             wf($conf['nginx']['php_fpm_pool_dir'].'/ispconfig.conf', $content);
1136
1137             //copy('tpl/nginx_ispconfig.vhost.master', $vhost_conf_dir.'/ispconfig.vhost');
1138             //* and create the symlink
7e1cfb 1139             if($this->is_update == false) {
1bd269 1140                 if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
F 1141                 if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
7fe908 1142                     symlink($vhost_conf_dir.'/ispconfig.vhost', $vhost_conf_enabled_dir.'/000-ispconfig.vhost');
1bd269 1143                 }
76f197 1144             }
7fe908 1145
3b273a 1146             // create symlink from /usr/share/phpmyadmin to /usr/share/phpMyAdmin, if it is installed
7fe908 1147             if(!@file_exists('/usr/share/phpmyadmin') && @is_dir('/usr/share/phpMyAdmin')) symlink('/usr/share/phpMyAdmin/', '/usr/share/phpmyadmin');
0711af 1148         }
7fe908 1149
0711af 1150         // Make the Clamav log files readable by ISPConfig
T 1151         //exec('chmod +r /var/log/clamav/clamav.log');
1152         //exec('chmod +r /var/log/clamav/freshclam.log');
7fe908 1153
66768a 1154         //* Install the update script
b34f99 1155         if(is_file('/usr/local/bin/ispconfig_update_from_dev.sh')) unlink('/usr/local/bin/ispconfig_update_from_dev.sh');
MC 1156         exec('chown root /usr/local/ispconfig/server/scripts/update_from_dev.sh');
1157         exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_dev.sh');
66768a 1158         exec('chown root /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
T 1159         exec('chmod 700 /usr/local/ispconfig/server/scripts/update_from_tgz.sh');
1160         exec('chown root /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
1161         exec('chmod 700 /usr/local/ispconfig/server/scripts/ispconfig_update.sh');
b34f99 1162         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 1163         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 1164
76f197 1165         // set the fast cgi starter script to executable
T 1166         // exec('chmod 755 '.$install_dir.'/interface/bin/php-fcgi');
7fe908 1167
0711af 1168         //* Make the logs readable for the ispconfig user
T 1169         if(@is_file('/var/log/maillog')) exec('chmod +r /var/log/maillog');
1170         //if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
1171         //if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
1172         if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
7fe908 1173
0711af 1174         //To enable apache to read the directories
T 1175         // exec('chmod a+rx /usr/local/ispconfig');
1176         // exec('chmod -R 751 /usr/local/ispconfig/interface');
1177         // exec('chmod a+rx /usr/local/ispconfig/interface/web');
7fe908 1178
d9c8a7 1179         //* Create the ispconfig log directory
e38d14 1180         if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir']);
J 1181         if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) exec('touch '.$conf['ispconfig_log_dir'].'/ispconfig.log');
7fe908 1182
0c5b42 1183         if(is_user('getmail')) {
T 1184             exec('mv /usr/local/ispconfig/server/scripts/run-getmail.sh /usr/local/bin/run-getmail.sh');
1185             exec('chown getmail /usr/local/bin/run-getmail.sh');
1186             exec('chmod 744 /usr/local/bin/run-getmail.sh');
1187         }
7fe908 1188
9f56bd 1189         // Edit the file Edit the file /etc/sudoers and comment out the requiregetty line, otherwise the backup function will fail
7fe908 1190         replaceLine('/etc/sudoers', 'Defaults    requiretty', '#Defaults    requiretty', 0, 0);
MC 1191
8cf78b 1192         if(is_dir($install_dir.'/interface/invoices')) {
e94a9f 1193             exec('chmod -R 770 '.escapeshellarg($install_dir.'/interface/invoices'));
T 1194             exec('chown -R ispconfig:ispconfig '.escapeshellarg($install_dir.'/interface/invoices'));
edf806 1195         }
7fe908 1196
0799f8 1197         //* Create the ispconfig auth log file and set uid/gid
T 1198         if(!is_file($conf['ispconfig_log_dir'].'/auth.log')) {
1199             touch($conf['ispconfig_log_dir'].'/auth.log');
1200         }
1201         exec('chown ispconfig:ispconfig '. $conf['ispconfig_log_dir'].'/auth.log');
1202         exec('chmod 660 '. $conf['ispconfig_log_dir'].'/auth.log');
7fe908 1203
d71bae 1204         //* Remove Domain module as its functions are available in the client module now
T 1205         if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
021aec 1206         
TB 1207         // Add symlink for patch tool
1208         if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
7fe908 1209
0711af 1210     }
7fe908 1211
0711af 1212     public function configure_dbserver()
T 1213     {
1214         global $conf;
7fe908 1215
0711af 1216         //* If this server shall act as database server for client DB's, we configure this here
T 1217         $install_dir = $conf['ispconfig_install_dir'];
7fe908 1218
MC 1219         // Create a file with the database login details which
0711af 1220         // are used to create the client databases.
7fe908 1221
0711af 1222         if(!is_dir("$install_dir/server/lib")) {
T 1223             $command = "mkdir $install_dir/server/lib";
1224             caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
1225         }
7fe908 1226
615a0a 1227         $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/mysql_clientdb.conf.master', "tpl/mysql_clientdb.conf.master");
7fe908 1228         $content = str_replace('{hostname}', $conf['mysql']['host'], $content);
MC 1229         $content = str_replace('{username}', $conf['mysql']['admin_user'], $content);
1230         $content = str_replace('{password}', $conf['mysql']['admin_password'], $content);
1231         wf("$install_dir/server/lib/mysql_clientdb.conf", $content);
0711af 1232         exec('chmod 600 '."$install_dir/server/lib/mysql_clientdb.conf");
T 1233         exec('chown root:root '."$install_dir/server/lib/mysql_clientdb.conf");
7fe908 1234
0711af 1235     }
7fe908 1236
0711af 1237     public function install_crontab()
7fe908 1238     {
0711af 1239         global $conf;
7fe908 1240
0711af 1241         //* Root Crontab
T 1242         exec('crontab -u root -l > crontab.txt');
1243         $existing_root_cron_jobs = file('crontab.txt');
7fe908 1244
a8a328 1245         // remove existing ispconfig cronjobs, in case the syntax has changed
T 1246         foreach($existing_root_cron_jobs as $key => $val) {
7fe908 1247             if(stristr($val, '/usr/local/ispconfig')) unset($existing_root_cron_jobs[$key]);
a8a328 1248         }
7fe908 1249
0711af 1250         $root_cron_jobs = array(
T 1251             '* * * * * /usr/local/ispconfig/server/server.sh &> /dev/null',
1252             '30 00 * * * /usr/local/ispconfig/server/cron_daily.sh &> /dev/null'
1253         );
7fe908 1254
b6a10a 1255         if ($conf['nginx']['installed'] == true) {
F 1256             $root_cron_jobs[] = "0 0 * * * /usr/local/ispconfig/server/scripts/create_daily_nginx_access_logs.sh &> /dev/null";
1257         }
7fe908 1258
0711af 1259         foreach($root_cron_jobs as $cron_job) {
T 1260             if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
1261                 $existing_root_cron_jobs[] = $cron_job."\n";
1262             }
1263         }
1264         file_put_contents('crontab.txt', $existing_root_cron_jobs);
1265         exec('crontab -u root crontab.txt &> /dev/null');
1266         unlink('crontab.txt');
7fe908 1267
0711af 1268         //* Getmail crontab
a8a328 1269         if(is_user('getmail')) {
7fe908 1270             $cf = $conf['getmail'];
a8a328 1271             exec('crontab -u getmail -l > crontab.txt');
T 1272             $existing_cron_jobs = file('crontab.txt');
7fe908 1273
27c3a6 1274             $cron_jobs = array(
7fe908 1275                 '*/5 * * * * /usr/local/bin/run-getmail.sh > /dev/null 2>> /dev/null'
MC 1276             );
1277
a8a328 1278             // remove existing ispconfig cronjobs, in case the syntax has changed
9b30b0 1279             foreach($existing_cron_jobs as $key => $val) {
7fe908 1280                 if(stristr($val, 'getmail')) unset($existing_cron_jobs[$key]);
0711af 1281             }
7fe908 1282
a8a328 1283             foreach($cron_jobs as $cron_job) {
T 1284                 if(!in_array($cron_job."\n", $existing_cron_jobs)) {
1285                     $existing_cron_jobs[] = $cron_job."\n";
1286                 }
1287             }
1288             file_put_contents('crontab.txt', $existing_cron_jobs);
1289             exec('crontab -u getmail crontab.txt &> /dev/null');
1290             unlink('crontab.txt');
0711af 1291         }
7fe908 1292
00d730 1293         exec('touch /var/log/ispconfig/cron.log');
cc6568 1294         exec('chmod 660 /var/log/ispconfig/cron.log');
0711af 1295     }
T 1296
1297 }
1298
fd4cfd 1299 ?>