installer_base.lib.php 38.3 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php

/*
Copyright (c) 2007, Till Brehm, projektfarm Gmbh
All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
      this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    * Neither the name of ISPConfig nor the names of its contributors
      may be used to endorse or promote products derived from this software without
      specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

class installer_base {
	
	var $wb = array();
	var $language = 'en';
	var $db;
oliver's avatar
oliver committed
36
	public $conf;
tbrehm's avatar
tbrehm committed
37
	public $install_ispconfig_interface = true;
38
39


pedro_morgan's avatar
pedro_morgan committed
40
    public function __construct()
41
    {
pedro_morgan's avatar
pedro_morgan committed
42
        global $conf; //TODO: maybe $conf  should be passed to constructor
43
        //$this->conf = $conf;
44
    }
45
	
46
    //: TODO  Implement the translation function and language files for the installer.
pedro_morgan's avatar
pedro_morgan committed
47
48
	public function lng($text)
    {
tbrehm's avatar
tbrehm committed
49
		return $text;
50
51
	}
	
pedro_morgan's avatar
pedro_morgan committed
52
53
	public function error($msg)
    {
54
55
56
		die("ERROR: ".$msg."\n");
	}
	
pedro_morgan's avatar
pedro_morgan committed
57
58
	public function simple_query($query, $answers, $default)
    {		
tbrehm's avatar
tbrehm committed
59
60
		$finished = false;
		do {
pedro_morgan's avatar
pedro_morgan committed
61
			$answers_str = implode(',', $answers);
tbrehm's avatar
tbrehm committed
62
			swrite($this->lng($query).' ('.$answers_str.') ['.$default.']: ');
tbrehm's avatar
tbrehm committed
63
64
			$input = sread();
			
pedro_morgan's avatar
pedro_morgan committed
65
			//* Stop the installation
tbrehm's avatar
tbrehm committed
66
			if($input == 'quit') {
pedro_morgan's avatar
pedro_morgan committed
67
				swriteln($this->lng("Installation terminated by user.\n"));
tbrehm's avatar
tbrehm committed
68
				die();
tbrehm's avatar
tbrehm committed
69
70
			}
			
pedro_morgan's avatar
pedro_morgan committed
71
			//* Select the default
tbrehm's avatar
tbrehm committed
72
73
74
75
76
			if($input == '') {
				$answer = $default;
				$finished = true;
			}
			
pedro_morgan's avatar
pedro_morgan committed
77
78
            //* Set answer id valid
			if(in_array($input, $answers)) {
tbrehm's avatar
tbrehm committed
79
80
81
82
83
				$answer = $input;
				$finished = true;
			}
			
		} while ($finished == false);
tbrehm's avatar
tbrehm committed
84
		swriteln();
tbrehm's avatar
tbrehm committed
85
86
87
		return $answer;
	}
	
pedro_morgan's avatar
pedro_morgan committed
88
89
	public function free_query($query,$default)
    {		
tbrehm's avatar
tbrehm committed
90
		swrite($this->lng($query).' ['.$default.']: ');
tbrehm's avatar
tbrehm committed
91
92
		$input = sread();
			
pedro_morgan's avatar
pedro_morgan committed
93
		//* Stop the installation
tbrehm's avatar
tbrehm committed
94
		if($input == 'quit') {
pedro_morgan's avatar
pedro_morgan committed
95
96
            swriteln($this->lng("Installation terminated by user.\n"));
            die();
tbrehm's avatar
tbrehm committed
97
98
		}
			
pedro_morgan's avatar
pedro_morgan committed
99
        $answer =  ($input == '') ? $default : $input;
tbrehm's avatar
tbrehm committed
100
		swriteln();
tbrehm's avatar
tbrehm committed
101
102
103
		return $answer;
	}
	
104
	/*
pedro_morgan's avatar
pedro_morgan committed
105
106
	// TODO: this function is not used atmo I think - pedro
	function request_language(){
107
108
109
110
111
		
		swriteln(lng('Enter your language'));
		swriteln(lng('de, en'));
		
	}
112
	*/
113
	
114
115
116
	/** Create the database for ISPConfig */ 
	public function configure_database()
    {
117
		global $conf;
tbrehm's avatar
tbrehm committed
118
		
119
120
121
122
		$cf = $conf['mysql']; // make $conf['mysql'] more accessible
		//** Create the database
		if(!$this->db->query('CREATE DATABASE IF NOT EXISTS '.$cf['database'])) {
			$this->error('Unable to create MySQL database: '.$cf['database'].'.');
123
124
		}
		
125
126
		//* Set the database name in the DB library
		$this->db->dbName = $cf['database'];
127
		
128
		//* Load the database dump into the database, if database contains no tables
129
130
		$db_tables = $this->db->getTables();
		if(count($db_tables) > 0) {
131
			$this->error('Stopped: Database already contains some tables.');
132
		} else {
133
134
			if($cf['admin_password'] == '') {
				caselog("mysql -h '".$cf['host']."' -u '".$cf['admin_user']."' '".$cf['database']."' < 'sql/ispconfig3.sql' &> /dev/null", 
135
                        __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
136
			} else {
137
				caselog("mysql -h '".$cf['host']."' -u '".$cf['admin_user']."' -p'".$cf['admin_password']."' '".$cf['database']."' < 'sql/ispconfig3.sql' &> /dev/null", 
138
                        __FILE__, __LINE__, 'read in ispconfig3.sql', 'could not read in ispconfig3.sql');
139
140
141
142
143
144
145
146
			}
			$db_tables = $this->db->getTables();
			if(count($db_tables) == 0) {
				$this->error('Unable to load SQL-Dump into database table.');
			}
		}
	}
	
147
	//** Create the server record in the database
148
149
	public function add_database_server_record() {
		
150
		global $conf;
tbrehm's avatar
tbrehm committed
151
		
152
153
		$cf = $conf['mysql']; // make $conf['mysql'] more accessible
		
tbrehm's avatar
tbrehm committed
154
155
156
		if($cf['host'] == 'localhost') {
			$from_host = 'localhost';
		} else {
157
			$from_host = $conf['hostname'];
tbrehm's avatar
tbrehm committed
158
159
		}
		
160
161
		//* Create the ISPConfig database user
        $query = 'GRANT SELECT, INSERT, UPDATE, DELETE ON '.$cf['database'].".* "
tbrehm's avatar
tbrehm committed
162
                ."TO '".$cf['ispconfig_user']."'@'".$from_host."' "
163
164
165
166
167
168
169
170
                ."IDENTIFIED BY '".$cf['ispconfig_password']."';";
		if(!$this->db->query($query)) {
			$this->error('Unable to create database user: '.$cf['ispconfig_user']);
		}
		
		//* Reload database privelages
		$this->db->query('FLUSH PRIVILEGES;');
		
tbrehm's avatar
tbrehm committed
171
172
		//* Set the database name in the DB library
		$this->db->dbName = $cf['database'];
173
		
174
175
		$server_ini_content = rf("tpl/server.ini.master");
		$server_ini_content = addslashes($server_ini_content);
176
		
177
		$sql = "INSERT INTO `server` (`sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `server_name`, `mail_server`, `web_server`, `dns_server`, `file_server`, `db_server`, `vserver_server`, `config`, `updated`, `active`) VALUES (1, 1, 'riud', 'riud', 'r', '".$conf['hostname']."', 1, 1, 1, 1, 1, 1, '$server_ini_content', 0, 1);";
178
		$this->db->query($sql);
tbrehm's avatar
tbrehm committed
179
		$conf['server_id'] = $this->db->insertID();
180
		$conf['server_id'] = $conf['server_id'];
181
182
	}
	
183

184
    //** writes postfix configuration files
185
    private function process_postfix_config($configfile)
tbrehm's avatar
tbrehm committed
186
187
188
    {	
		global $conf;
		
189
        $config_dir = $conf['postfix']['config_dir'].'/';
190
191
192
193
194
195
        $full_file_name = $config_dir.$configfile; 
        //* Backup exiting file
        if(is_file($full_file_name)){
            copy($full_file_name, $config_dir.$configfile.'~');
        }
        $content = rf('tpl/'.$configfile.'.master');
196
197
198
199
200
        $content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
        $content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
        $content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
        $content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
        $content = str_replace('{server_id}', $conf['server_id'], $content);
201
202
203
        wf($full_file_name, $content);
    }

204
205
	public function configure_jailkit()
    {
tbrehm's avatar
tbrehm committed
206
207
208
        global $conf;
		
		$cf = $conf['jailkit'];
209
210
211
212
		$config_dir = $cf['config_dir'];
		$jk_init = $cf['jk_init'];
		$jk_chrootsh = $cf['jk_chrootsh'];
		
213
		if (is_dir($config_dir))
214
		{
215
216
			if(is_file($config_dir.'/'.$jk_init)) copy($config_dir.'/'.$jk_init, $config_dir.'/'.$jk_init.'~');
			if(is_file($config_dir.'/'.$jk_chrootsh.".master")) copy($config_dir.'/'.$jk_chrootsh.".master", $config_dir.'/'.$jk_chrootsh.'~');
217
218
219
220
221
222
223
			
			copy('tpl/'.$jk_init.".master", $config_dir.'/'.$jk_init);
			copy('tpl/'.$jk_chrootsh.".master", $config_dir.'/'.$jk_chrootsh);
		}
		
    }
        
224
225
	public function configure_postfix($options = '')
    {
226
227
        global $conf;
		$cf = $conf['postfix'];
228
229
		$config_dir = $cf['config_dir'];
        
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
		if(!is_dir($config_dir)){
            $this->error("The postfix configuration directory '$config_dir' does not exist.");
        }
        
		//* mysql-virtual_domains.cf
        $this->process_postfix_config('mysql-virtual_domains.cf');

		//* mysql-virtual_forwardings.cf
        $this->process_postfix_config('mysql-virtual_forwardings.cf');

		//* mysql-virtual_mailboxes.cf
        $this->process_postfix_config('mysql-virtual_mailboxes.cf');

		//* mysql-virtual_email2email.cf
        $this->process_postfix_config('mysql-virtual_email2email.cf');

		//* mysql-virtual_transports.cf
        $this->process_postfix_config('mysql-virtual_transports.cf');

		//* mysql-virtual_recipient.cf
        $this->process_postfix_config('mysql-virtual_recipient.cf');

		//* mysql-virtual_sender.cf
        $this->process_postfix_config('mysql-virtual_sender.cf');

		//* mysql-virtual_client.cf
        $this->process_postfix_config('mysql-virtual_client.cf');
257
258
259
		
		//* mysql-virtual_relaydomains.cf
        $this->process_postfix_config('mysql-virtual_relaydomains.cf');
260
261

		//* Changing mode and group of the new created config files.
262
263
264
265
266
267
268
269
270
271
272
		caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
                 __FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null', 
                __FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
		
		//* Creating virtual mail user and group
		$command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");

		$command = 'useradd -g '.$cf['vmail_groupname'].' -u '.$cf['vmail_userid'].' '.$cf['vmail_username'].' -d '.$cf['vmail_mailbox_base'].' -m';
		caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");		
273
274

		$postconf_commands = array (
275
276
			'myhostname = '.$conf['hostname'],
			'mydestination = '.$conf['hostname'].', localhost, localhost.localdomain',
277
278
			'mynetworks = 127.0.0.0/8',
			'virtual_alias_domains =',
pedro_morgan's avatar
pedro_morgan committed
279
280
			'virtual_alias_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_forwardings.cf, mysql:'.$config_dir.'/mysql-virtual_email2email.cf',
			'virtual_mailbox_domains = proxy:mysql:'.$config_dir.'/mysql-virtual_domains.cf',
281
282
283
284
			'virtual_mailbox_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_mailboxes.cf',
			'virtual_mailbox_base = '.$cf['vmail_mailbox_base'],
			'virtual_uid_maps = static:'.$cf['vmail_userid'],
			'virtual_gid_maps = static:'.$cf['vmail_groupid'],
285
286
			'smtpd_sasl_auth_enable = yes',
			'broken_sasl_auth_clients = yes',
pedro_morgan's avatar
pedro_morgan committed
287
			'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:'.$config_dir.'/mysql-virtual_recipient.cf, reject_unauth_destination',
288
			'smtpd_use_tls = yes',
pedro_morgan's avatar
pedro_morgan committed
289
290
291
			'smtpd_tls_cert_file = '.$config_dir.'/smtpd.cert',
			'smtpd_tls_key_file = '.$config_dir.'/smtpd.key',
			'transport_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_transports.cf',
292
			'relay_domains = mysql:'.$config_dir.'/mysql-virtual_relaydomains.cf',
293
294
			'virtual_create_maildirsize = yes',
			'virtual_mailbox_extended = yes',
pedro_morgan's avatar
pedro_morgan committed
295
			'virtual_mailbox_limit_maps = proxy:mysql:'.$config_dir.'/mysql-virtual_mailbox_limit_maps.cf',
296
297
298
299
			'virtual_mailbox_limit_override = yes',
			'virtual_maildir_limit_message = "The user you are trying to reach is over quota."',
			'virtual_overquota_bounce = yes',
			'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps',
pedro_morgan's avatar
pedro_morgan committed
300
301
			'smtpd_sender_restrictions = check_sender_access mysql:'.$config_dir.'/mysql-virtual_sender.cf',
			'smtpd_client_restrictions = check_client_access mysql:'.$config_dir.'/mysql-virtual_client.cf',
302
303
			'maildrop_destination_concurrency_limit = 1',
			'maildrop_destination_recipient_limit   = 1',
304
			'virtual_transport = maildrop',
pedro_morgan's avatar
pedro_morgan committed
305
306
307
308
			'header_checks = regexp:'.$config_dir.'/header_checks',
			'mime_header_checks = regexp:'.$config_dir.'/mime_header_checks',
			'nested_header_checks = regexp:'.$config_dir.'/nested_header_checks',
			'body_checks = regexp:'.$config_dir.'/body_checks'
309
310
		);
		
pedro_morgan's avatar
pedro_morgan committed
311
312
313
314
315
		//* Create the header and body check files
		touch($config_dir.'/header_checks');
		touch($config_dir.'/mime_header_checks');
		touch($config_dir.'/nested_header_checks');
		touch($config_dir.'/body_checks');
316
317
		
		
pedro_morgan's avatar
pedro_morgan committed
318
319
		//* Make a backup copy of the main.cf file
		copy($config_dir.'/main.cf', $config_dir.'/main.cf~');
320
		
pedro_morgan's avatar
pedro_morgan committed
321
		//* Executing the postconf commands
322
323
		foreach($postconf_commands as $cmd) {
			$command = "postconf -e '$cmd'";
pedro_morgan's avatar
pedro_morgan committed
324
			caselog($command." &> /dev/null", __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
325
326
327
328
329
		}
		
		// TODO: Change the master.cf file
		/*
		Add:
330
331
        maildrop  unix  -       n       n       -       -       pipe
        flags=R user=vmail argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}
332
		*/
tbrehm's avatar
tbrehm committed
333
		if(!stristr($options,'dont-create-certs')) {
pedro_morgan's avatar
pedro_morgan committed
334
335
336
337
			//* Create the SSL certificate
			$command = 'cd '.$config_dir.'; '
                      .'openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout '
                      .'smtpd.key -keyform PEM -days 365 -x509';
tbrehm's avatar
tbrehm committed
338
			exec($command);
339
		
pedro_morgan's avatar
pedro_morgan committed
340
341
			$command = 'chmod o= '.$config_dir.'/smtpd.key';
			caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
tbrehm's avatar
tbrehm committed
342
		}
343
		
344
		//** We have to change the permissions of the courier authdaemon directory to make it accessible for maildrop.
pedro_morgan's avatar
pedro_morgan committed
345
346
		$command = 'chmod 755  /var/run/courier/authdaemon/';
		caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
347
		
pedro_morgan's avatar
pedro_morgan committed
348
349
350
351
352
353
354
355
		//* Changing maildrop lines in posfix master.cf
		if(is_file($config_dir.'/master.cf')){
            copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
        }
		if(is_file($config_dir.'/master.cf~')){
            exec('chmod 400 '.$config_dir.'/master.cf~');
        }
		$configfile = $config_dir.'/master.cf';
356
		$content = rf($configfile);
357
358
359
360
		$content = str_replace('  flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}', 
                   '  flags=R user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d ${recipient} ${extension} ${recipient} ${user} ${nexthop} ${sender}',
                     $content);
		wf($configfile, $content);
361
		
pedro_morgan's avatar
pedro_morgan committed
362
		//* Writing the Maildrop mailfilter file
363
		$configfile = 'mailfilter';
364
365
366
367
368
369
		if(is_file($cf['vmail_mailbox_base'].'/.'.$configfile)){
            copy($cf['vmail_mailbox_base'].'/.'.$configfile, $cf['vmail_mailbox_base'].'/.'.$configfile.'~');
        }
		$content = rf("tpl/$configfile.master");
		$content = str_replace('{dist_postfix_vmail_mailbox_base}', $cf['vmail_mailbox_base'], $content);
		wf($cf['vmail_mailbox_base'].'/.'.$configfile, $content);
370
		
371
372
373
		//* Create the directory for the custom mailfilters
		$command = 'mkdir '.$cf['vmail_mailbox_base'].'/mailfilters';
		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
374
		
375
376
377
		//* Chmod and chown the .mailfilter file
		$command = 'chown -R '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base'].'/.mailfilter';
		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
378
		
379
380
		$command = 'chmod -R 600 '.$cf['vmail_mailbox_base'].'/.mailfilter';
		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
381
382
383
384
385
386
		
	}
	
	function configure_saslauthd() {
		global $conf;
		
387
	
388
		$configfile = 'sasl_smtpd.conf';
oliver's avatar
oliver committed
389
390
		if(is_file($conf["postfix"]["config_dir"].'/sasl/smtpd.conf')) copy($conf["postfix"]["config_dir"].'/sasl/smtpd.conf',$conf["postfix"]["config_dir"].'/sasl/smtpd.conf~');
		if(is_file($conf["postfix"]["config_dir"].'/sasl/smtpd.conf~')) exec('chmod 400 '.$conf["postfix"]["config_dir"].'/sasl/smtpd.conf~');
391
		$content = rf("tpl/".$configfile.".master");
392
393
394
395
		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
		$content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content);
		$content = str_replace('{mysql_server_database}',$conf['mysql']['database'],$content);
		$content = str_replace('{mysql_server_ip}',$conf['mysql']['ip'],$content);
oliver's avatar
oliver committed
396
		wf($conf["postfix"]["config_dir"].'/sasl/smtpd.conf',$content);
397
398
399
400
		
		// TODO: Chmod and chown on the config file
		
		
401
402
		
		// Create the spool directory
403
		exec('mkdir -p /var/spool/postfix/var/run/saslauthd');
404
405
		
		// Edit the file /etc/default/saslauthd
oliver's avatar
oliver committed
406
		$configfile = $conf["saslauthd"]["config"];
407
		if(is_file($configfile)) copy($configfile,$configfile.'~');
408
		if(is_file($configfile.'~')) exec('chmod 400 '.$configfile.'~');
409
410
411
412
413
		$content = rf($configfile);
		$content = str_replace('START=no','START=yes',$content);
		$content = str_replace('OPTIONS="-c"','OPTIONS="-m /var/spool/postfix/var/run/saslauthd -r"',$content);
		wf($configfile,$content);
		
414
		// Edit the file /etc/init.d/saslauthd
oliver's avatar
oliver committed
415
		$configfile = $conf["init_scripts"].'/'.$conf["saslauthd"]["init_script"];
416
417
418
419
420
		$content = rf($configfile);
		$content = str_replace('PIDFILE=$RUN_DIR/saslauthd.pid','PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"',$content);
		wf($configfile,$content);
		
		
421
422
	}
	
423
424
	public function configure_pam()
    {
425
426
		global $conf;
		$pam = $conf['pam'];
427
		//* configure pam for SMTP authentication agains the ispconfig database
428
		$configfile = 'pamd_smtp';
429
430
431
432
		if(is_file("$pam/smtp"))    copy("$pam/smtp", "$pam/smtp~");
		if(is_file("$pam/smtp~"))   exec("chmod 400 $pam/smtp~");

		$content = rf("tpl/$configfile.master");
433
434
435
436
		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
		$content = str_replace('{mysql_server_ip}', $conf['mysql']['ip'], $content);
437
438
439
		wf("$pam/smtp", $content);
		exec("chmod 660 $pam/smtp");
		exec("chown daemon:daemon $pam/smtp");
440
441
442
	
	}
	
443
444
	public function configure_courier()
    {
445
446
		global $conf;
		$config_dir = $conf['courier']['config_dir'];
447
		//* authmysqlrc
448
		$configfile = 'authmysqlrc';
449
450
451
452
453
		if(is_file("$config_dir/$configfile")){
            copy("$config_dir/$configfile", "$config_dir/$configfile~");
        }
		exec("chmod 400 $config_dir/$configfile~");
		$content = rf("tpl/$configfile.master");
454
455
456
457
		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
		$content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content);
		$content = str_replace('{mysql_server_database}',$conf['mysql']['database'],$content);
		$content = str_replace('{mysql_server_host}',$conf['mysql']['host'],$content);
458
		wf("$config_dir/$configfile", $content);
459
		
460
461
		exec("chmod 660 $config_dir/$configfile");
		exec("chown daemon:daemon $config_dir/$configfile");
462
		
463
		//* authdaemonrc
464
		$configfile = $conf['courier']['config_dir'].'/authdaemonrc';
465
466
467
468
469
470
		if(is_file($configfile)){
            copy($configfile, $configfile.'~');
        }
		if(is_file($configfile.'~')){
            exec('chmod 400 '.$configfile.'~');
        }
471
		$content = rf($configfile);
472
473
		$content = str_replace('authmodulelist="authpam"', 'authmodulelist="authmysql"', $content);
		wf($configfile, $content);
474
475
476
477
478
479
480
	}
	
	function configure_amavis() {
		global $conf;
		
		// amavisd user config file
		$configfile = 'amavisd_user_config';
oliver's avatar
oliver committed
481
482
		if(is_file($conf["amavis"]["config_dir"].'/conf.d/50-user')) copy($conf["amavis"]["config_dir"].'/conf.d/50-user',$conf["courier"]["config_dir"].'/50-user~');
		if(is_file($conf["amavis"]["config_dir"].'/conf.d/50-user~')) exec('chmod 400 '.$conf["amavis"]["config_dir"].'/conf.d/50-user~');
483
		$content = rf("tpl/".$configfile.".master");
484
485
486
		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
		$content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content);
		$content = str_replace('{mysql_server_database}',$conf['mysql']['database'],$content);
487
		$content = str_replace('{mysql_server_port}',$conf["mysql"]["port"],$content);
488
		$content = str_replace('{mysql_server_ip}',$conf['mysql']['ip'],$content);
oliver's avatar
oliver committed
489
		wf($conf["amavis"]["config_dir"].'/conf.d/50-user',$content);
490
491
492
493
494
495
496
497
498
499
500
		
		// TODO: chmod and chown on the config file
		
		
		// Adding the amavisd commands to the postfix configuration
		$postconf_commands = array (
			'content_filter = amavis:[127.0.0.1]:10024',
			'receive_override_options = no_address_mappings'
		);
		
		// Make a backup copy of the main.cf file
oliver's avatar
oliver committed
501
		copy($conf["postfix"]["config_dir"].'/main.cf',$conf["postfix"]["config_dir"].'/main.cf~2');
502
503
504
505
		
		// Executing the postconf commands
		foreach($postconf_commands as $cmd) {
			$command = "postconf -e '$cmd'";
506
			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
507
508
509
		}
		
		// Append the configuration for amavisd to the master.cf file
oliver's avatar
oliver committed
510
		if(is_file($conf["postfix"]["config_dir"].'/master.cf')) copy($conf["postfix"]["config_dir"].'/master.cf',$conf["postfix"]["config_dir"].'/master.cf~');
511
512
		$content = rf("tpl/master_cf_amavis.master");
		// Only add the content if we had not addded it before
513
		if(!stristr("127.0.0.1:10025",$content)) {
oliver's avatar
oliver committed
514
			af($conf["postfix"]["config_dir"].'/master.cf',$content);
515
516
517
518
519
520
521
522
		}
		
		// Add the clamav user to the amavis group
		exec('adduser clamav amavis');
		
		
	}
	
523
524
	public function configure_spamassassin()
    {
525
526
		global $conf;
		
527
		//* Enable spamasasssin on debian and ubuntu
528
		$configfile = '/etc/default/spamassassin';
529
		if(is_file($configfile)){
530
            copy($configfile, $configfile.'~');
531
        }
532
		$content = rf($configfile);
533
534
		$content = str_replace('ENABLED=0', 'ENABLED=1', $content);
		wf($configfile, $content);
535
536
	}
	
537
538
	public function configure_getmail()
    {
539
540
		global $conf;
		
541
		$config_dir = $conf['getmail']['config_dir'];
542
543
		
		if(!is_dir($config_dir)) exec("mkdir -p ".escapeshellcmd($config_dir));
544
545
546

		$command = "useradd -d $config_dir getmail";
		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
tbrehm's avatar
tbrehm committed
547
		
548
549
		$command = "chown -R getmail $config_dir";
		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
550
		
551
552
		$command = "chmod -R 700 $config_dir";
		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
553
554
	}
	
555
	
556
557
	public function configure_pureftpd()
    {
558
559
		global $conf;
		
560
		$config_dir = $conf['pureftpd']['config_dir'];
561
562

		//* configure pam for SMTP authentication agains the ispconfig database
563
		$configfile = 'db/mysql.conf';
564
565
566
567
568
569
570
		if(is_file("$config_dir/$configfile")){
            copy("$config_dir/$configfile", "$config_dir/$configfile~");
        }
		if(is_file("$config_dir/$configfile~")){
            exec("chmod 400 $config_dir/$configfile~");
        }
		$content = rf('tpl/pureftpd_mysql.conf.master');
571
572
573
574
575
		$content = str_replace('{mysql_server_ispconfig_user}', $conf["mysql"]["ispconfig_user"], $content);
		$content = str_replace('{mysql_server_ispconfig_password}', $conf["mysql"]["ispconfig_password"], $content);
		$content = str_replace('{mysql_server_database}', $conf["mysql"]["database"], $content);
		$content = str_replace('{mysql_server_ip}', $conf["mysql"]["ip"], $content);
		$content = str_replace('{server_id}', $conf["server_id"], $content);
576
577
578
579
		wf("$config_dir/$configfile", $content);
		exec("chmod 600 $config_dir/$configfile");
		exec("chown root:root $config_dir/$configfile");
		// **enable chrooting
580
		//exec('mkdir -p '.$config_dir.'/conf/ChrootEveryone');
581
		exec('echo "yes" > '.$config_dir.'/conf/ChrootEveryone');
tbrehm's avatar
tbrehm committed
582
583
	}
	
584
585
	public function configure_mydns()
    {
586
587
588
589
		global $conf;
		
		// configure pam for SMTP authentication agains the ispconfig database
		$configfile = 'mydns.conf';
oliver's avatar
oliver committed
590
591
		if(is_file($conf["mydns"]["config_dir"].'/'.$configfile)) copy($conf["mydns"]["config_dir"].'/'.$configfile,$conf["mydns"]["config_dir"].'/'.$configfile.'~');
		if(is_file($conf["mydns"]["config_dir"].'/'.$configfile.'~')) exec('chmod 400 '.$conf["mydns"]["config_dir"].'/'.$configfile.'~');
592
		$content = rf("tpl/".$configfile.".master");
593
594
595
		$content = str_replace('{mysql_server_ispconfig_user}',$conf['mysql']['ispconfig_user'],$content);
		$content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content);
		$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);
oliver's avatar
oliver committed
598
599
600
		wf($conf["mydns"]["config_dir"].'/'.$configfile,$content);
		exec('chmod 600 '.$conf["mydns"]["config_dir"].'/'.$configfile);
		exec('chown root:root '.$conf["mydns"]["config_dir"].'/'.$configfile);
601
602
603
	
	}
	
604
605
	public function configure_apache()
    {	
606
607
		global $conf;
		
608
609
		//* Create the logging directory for the vhost logfiles
		exec('mkdir -p /var/log/ispconfig/httpd');
610
611
612
		
	}
	
tbrehm's avatar
tbrehm committed
613
614
615
616
617
618
	public function configure_firewall()
	{
		global $conf;
		
		$dist_init_scripts = $conf['init_scripts'];
  		
619
		if(is_dir("/etc/Bastille.backup")) caselog("rm -rf /etc/Bastille.backup", __FILE__, __LINE__);
620
		if(is_dir("/etc/Bastille")) caselog("mv -f /etc/Bastille /etc/Bastille.backup", __FILE__, __LINE__);
tbrehm's avatar
tbrehm committed
621
  		@mkdir("/etc/Bastille", octdec($directory_mode));
622
623
624
  		if(is_dir("/etc/Bastille.backup/firewall.d")) caselog("cp -pfr /etc/Bastille.backup/firewall.d /etc/Bastille/", __FILE__, __LINE__);
  		caselog("cp -f tpl/bastille-firewall.cfg.master /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
  		caselog("chmod 644 /etc/Bastille/bastille-firewall.cfg", __FILE__, __LINE__);
tbrehm's avatar
tbrehm committed
625
626
627
628
629
630
  		$content = rf("/etc/Bastille/bastille-firewall.cfg");
  		$content = str_replace("{DNS_SERVERS}", "", $content);

  		$tcp_public_services = '';
  		$udp_public_services = '';
		
631
		$row = $this->db->queryOneRecord("SELECT * FROM firewall WHERE server_id = ".intval($conf['server_id']));
tbrehm's avatar
tbrehm committed
632
633
634
635
636
637
638
639
640
641
642
643
644
		
  		if(trim($row["tcp_port"]) != '' || trim($row["udp_port"]) != ''){
    		$tcp_public_services = trim(str_replace(',',' ',$row["tcp_port"]));
    		$udp_public_services = trim(str_replace(',',' ',$row["udp_port"]));
  		} else {
    		$tcp_public_services = '21 22 25 53 80 110 443 8080 10000';
    		$udp_public_services = '53';
  		}
  		$content = str_replace("{TCP_PUBLIC_SERVICES}", $tcp_public_services, $content);
  		$content = str_replace("{UDP_PUBLIC_SERVICES}", $udp_public_services, $content);

  		wf("/etc/Bastille/bastille-firewall.cfg", $content);

tbrehm's avatar
tbrehm committed
645
  		if(is_file($dist_init_scripts."/bastille-firewall")) caselog("mv -f $dist_init_scripts/bastille-firewall $dist_init_scripts/bastille-firewall.backup", __FILE__, __LINE__);
646
647
  		caselog("cp -f apps/bastille-firewall $dist_init_scripts", __FILE__, __LINE__);
  		caselog("chmod 700 $dist_init_scripts/bastille-firewall", __FILE__, __LINE__);
tbrehm's avatar
tbrehm committed
648

649
650
651
  		if(is_file("/sbin/bastille-ipchains")) caselog("mv -f /sbin/bastille-ipchains /sbin/bastille-ipchains.backup", __FILE__, __LINE__);
  		caselog("cp -f apps/bastille-ipchains /sbin", __FILE__, __LINE__);
  		caselog("chmod 700 /sbin/bastille-ipchains", __FILE__, __LINE__);
tbrehm's avatar
tbrehm committed
652

653
654
655
656
657
  		if(is_file("/sbin/bastille-netfilter")) caselog("mv -f /sbin/bastille-netfilter /sbin/bastille-netfilter.backup", __FILE__, __LINE__);
  		caselog("cp -f apps/bastille-netfilter /sbin", __FILE__, __LINE__);
  		caselog("chmod 700 /sbin/bastille-netfilter", __FILE__, __LINE__);
		
		if(!@is_dir('/var/lock/subsys')) caselog("mkdir /var/lock/subsys", __FILE__, __LINE__);
tbrehm's avatar
tbrehm committed
658
659

  		exec("which ipchains &> /dev/null", $ipchains_location, $ret_val);
660
  		if(!is_file("/sbin/ipchains") && !is_link("/sbin/ipchains") && $ret_val == 0) phpcaselog(@symlink(shell_exec("which ipchains"), "/sbin/ipchains"), 'create symlink', __FILE__, __LINE__);
tbrehm's avatar
tbrehm committed
661
662
  		unset($ipchains_location);
  		exec("which iptables &> /dev/null", $iptables_location, $ret_val);
663
  		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__);
tbrehm's avatar
tbrehm committed
664
665
666
667
  		unset($iptables_location);

	}
	
tbrehm's avatar
tbrehm committed
668
	
669
670
	public function install_ispconfig()
    {
671
672
		global $conf;
		
673
		$install_dir = $conf['ispconfig_install_dir'];
674
675

		//* Create the ISPConfig installation directory
676
		if(!@is_dir("$install_dir")) {
677
678
679
			$command = "mkdir $install_dir";
			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
		}
680
		
681
682
		//* Create a ISPConfig user and group
		$command = 'groupadd ispconfig';
683
		if(!is_group('vacp')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
684
		
685
		$command = "useradd -g ispconfig -d $install_dir ispconfig";
686
		if(!is_user('vacp')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
687
		
688
689
690
		//* copy the ISPConfig interface part
		$command = "cp -rf ../interface $install_dir";
		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
691
		
692
693
694
		//* copy the ISPConfig server part
		$command = "cp -rf ../server $install_dir";
		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
695
		
696
		//* Create a symlink, so ISPConfig is accessible via web
697
698
699
		// Replaced by a separate vhost definition for port 8080
		// $command = "ln -s $install_dir/interface/web/ /var/www/ispconfig";
		// caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
700
		
701
		//* Create the config file for ISPConfig interface
702
		$configfile = 'config.inc.php';
703
704
705
706
		if(is_file($install_dir.'/interface/lib/'.$configfile)){
            copy("$install_dir/interface/lib/$configfile", "$install_dir/interface/lib/$configfile~");
        }
		$content = rf("tpl/$configfile.master");
707
708
709
710
		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
		$content = str_replace('{mysql_server_ispconfig_password}',$conf['mysql']['ispconfig_password'], $content);
		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
tbrehm's avatar
tbrehm committed
711
		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
712
		wf("$install_dir/interface/lib/$configfile", $content);
713
		
714
		//* Create the config file for ISPConfig server
715
		$configfile = 'config.inc.php';
716
717
718
719
		if(is_file($install_dir.'/server/lib/'.$configfile)){
            copy("$install_dir/server/lib/$configfile", "$install_dir/interface/lib/$configfile~");
        }
		$content = rf("tpl/$configfile.master");
720
721
722
723
724
		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
		$content = str_replace('{server_id}', $conf['server_id'], $content);
725
		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
726
		wf("$install_dir/server/lib/$configfile", $content);
727
		
728
		
729
730
731
732
733
734
735
		//* Enable the server modules and plugins.
		// TODO: Implement a selector which modules and plugins shall be enabled.
		$dir = $install_dir.'/server/mods-available/';
		if (is_dir($dir)) {
			if ($dh = opendir($dir)) {
				while (($file = readdir($dh)) !== false) {
					if($file != '.' && $file != '..') {
736
						if(!@is_link($install_dir.'/server/mods-enabled/'.$file)) @symlink($install_dir.'/server/mods-available/'.$file, $install_dir.'/server/mods-enabled/'.$file);
737
738
739
740
741
742
743
744
745
746
747
					}
				}
				closedir($dh);
			}
		}
		
		$dir = $install_dir.'/server/plugins-available/';
		if (is_dir($dir)) {
			if ($dh = opendir($dir)) {
				while (($file = readdir($dh)) !== false) {
					if($file != '.' && $file != '..') {
748
						if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) @symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
749
750
751
752
753
					}
				}
				closedir($dh);
			}
		}
754
		
755
756
757
		//* Chmod the files
		$command = "chmod -R 750 $install_dir";
		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
758

759
760
761
		//* chown the files to the ispconfig user and group
		$command = "chown -R ispconfig:ispconfig $install_dir";
		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
762
		
763
		//* Make the global language file directory group writable
tbrehm's avatar
tbrehm committed
764
		exec("chmod -R 770 $install_dir/interface/lib/lang");
765
		
766
767
768
		//* Make the temp directory for language file exports writable
		exec("chmod -R 770 $install_dir/interface/web/temp");
		
769
770
771
772
773
774
		//* Make all interface language file directories group writable
		$handle = @opendir($install_dir.'/interface/web');
		while ($file = @readdir ($handle)) { 
	   		if ($file != '.' && $file != '..') {
	        	if(@is_dir($install_dir.'/interface/web'.'/'.$file.'/lib/lang')) {
					$handle2 = opendir($install_dir.'/interface/web'.'/'.$file.'/lib/lang');
tbrehm's avatar
tbrehm committed
775
					chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang',0770);
776
777
					while ($lang_file = @readdir ($handle2)) {
						if ($lang_file != '.' && $lang_file != '..') {
tbrehm's avatar
tbrehm committed
778
							chmod($install_dir.'/interface/web'.'/'.$file.'/lib/lang/'.$lang_file,0770);
779
780
781
782
783
784
						}
					}
				}
			}
		}
		
785
786
787
		//* make sure that the server config file (not the interface one) is only readable by the root user
		exec("chmod 600 $install_dir/server/lib/$configfile");
		exec("chown root:root $install_dir/server/lib/$configfile");
tbrehm's avatar
tbrehm committed
788
		if(@is_file("$install_dir/server/lib/mysql_clientdb.conf")) {
789
790
791
			exec("chmod 600 $install_dir/server/lib/mysql_clientdb.conf");
			exec("chown root:root $install_dir/server/lib/mysql_clientdb.conf");
		}
792
		
793
794
795
		// TODO: FIXME: add the www-data user to the ispconfig group. This is just for testing
		// and must be fixed as this will allow the apache user to read the ispconfig files.
		// Later this must run as own apache server or via suexec!
796
797
		$command = 'adduser www-data ispconfig';
		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
798
		
799
800
801
		//* Make the shell scripts executable
		$command = "chmod +x $install_dir/server/scripts/*.sh";
		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
802
		
803
		//* Copy the ISPConfig vhost for the controlpanel
804
        // TODO: These are missing! should they be "vhost_dist_*_dir" ?
805
806
        $vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
        $vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
daniel's avatar
daniel committed
807
808
809
810
811
        
        
        // Dont just copy over the virtualhost template but add some custom settings
         
        $content = rf("tpl/apache_ispconfig.vhost.master");
812
		$content = str_replace('{vhost_port}', $conf['apache']['vhost_port'], $content);
daniel's avatar
daniel committed
813
814
815
		wf("$vhost_conf_dir/ispconfig.vhost", $content);
		
		//copy('tpl/apache_ispconfig.vhost.master', "$vhost_conf_dir/ispconfig.vhost");
816
		//* and create the symlink
tbrehm's avatar
tbrehm committed
817
		if($this->install_ispconfig_interface == true) {
818
			if(!@is_link("$vhost_conf_enabled_dir/ispconfig.vhost")) {
tbrehm's avatar
tbrehm committed
819
820
				exec("ln -s $vhost_conf_dir/ispconfig.vhost $vhost_conf_enabled_dir/ispconfig.vhost");
			}
tbrehm's avatar
tbrehm committed
821
		}
822
823
824
825
		
		// Make the Clamav log files readable by ISPConfig
		exec('chmod +r /var/log/clamav/clamav.log');
		exec('chmod +r /var/log/clamav/freshclam.log');
826
827
828
829
830
831
		
		//* Install the SVN update script
		exec('cp ../helper_scripts/update_from_svn.sh /usr/local/bin/ispconfig_update_from_svn.sh');
		exec('chown root /usr/local/bin/ispconfig_update_from_svn.sh');
		exec('chmod 700 /usr/local/bin/ispconfig_update_from_svn.sh');
		
832
833
		//set the fast cgi starter script to executable
		exec('chmod 755 '.$install_dir.'/interface/bin/php-fcgi');
834
835
836
837
838
839
840
841
		
		//* Make the logs readable for the ispconfig user
		if(@is_file('/var/log/mail.log')) exec('chmod +r /var/log/mail.log');
		if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
		if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
		if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
		
		
842
843
	}
	
tbrehm's avatar
tbrehm committed
844
845
846
847
848
	public function configure_dbserver()
	{
		global $conf;
		
		//* If this server shall act as database server for client DB's, we configure this here
849
		$install_dir = $conf['ispconfig_install_dir'];
tbrehm's avatar
tbrehm committed
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
		
		// Create a file with the database login details which 
		// are used to create the client databases.
		
		if(!is_dir("$install_dir/server/lib")) {
			$command = "mkdir $install_dir/server/lib";
			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
		}
		
		$content = rf("tpl/mysql_clientdb.conf.master");
		$content = str_replace('{username}',$conf['mysql']['admin_user'],$content);
		$content = str_replace('{password}',$conf['mysql']['admin_password'], $content);
		wf("$install_dir/server/lib/mysql_clientdb.conf",$content);
		exec('chmod 600 '."$install_dir/server/lib/mysql_clientdb.conf");
		exec('chown root:root '."$install_dir/server/lib/mysql_clientdb.conf");
		
	}
	
868
	public function install_crontab()
869
    {		
870
871
		global $conf;
		
872
873
		//* Root Crontab
		exec('crontab -u root -l > crontab.txt');
tbrehm's avatar
tbrehm committed
874
875
		$existing_root_cron_jobs = file('crontab.txt');
		
tbrehm's avatar
tbrehm committed
876
877
878
879
		$root_cron_jobs = array(
			'* * * * * /usr/local/ispconfig/server/server.sh &> /dev/null',
			'30 00 * * * /usr/local/ispconfig/server/cron_daily.sh &> /dev/null'
		);
tbrehm's avatar
tbrehm committed
880
		foreach($root_cron_jobs as $cron_job) {
881
			if(!in_array($cron_job."\n", $existing_root_cron_jobs)) {
tbrehm's avatar
tbrehm committed
882
883
884
				$existing_root_cron_jobs[] = $cron_job."\n";
			}
		}
885
886
		file_put_contents('crontab.txt', $existing_root_cron_jobs);
		exec('crontab -u root crontab.txt &> /dev/null');
tbrehm's avatar
tbrehm committed
887
888
		unlink('crontab.txt');
		
889
		//* Getmail crontab
890
        $cf = $conf['getmail'];
891
		exec('crontab -u getmail -l > crontab.txt');
tbrehm's avatar
tbrehm committed
892
893
		$existing_cron_jobs = file('crontab.txt');
		
894
		$cron_jobs = array('*/5 * * * * '.$cf['program'].' -g '.$cf['config_dir'].' -r '.$cf['config_dir'].'/*.conf &> /dev/null');
tbrehm's avatar
tbrehm committed
895
		foreach($cron_jobs as $cron_job) {
896
			if(!in_array($cron_job."\n", $existing_cron_jobs)) {
tbrehm's avatar
tbrehm committed
897
898
899
				$existing_cron_jobs[] = $cron_job."\n";
			}
		}
900
901
		file_put_contents('crontab.txt', $existing_cron_jobs);
		exec('crontab -u getmail crontab.txt &> /dev/null');
tbrehm's avatar
tbrehm committed
902
903
904
		unlink('crontab.txt');
	}
	
905
906
}

907
?>