install.lib.php 20.7 KB
Newer Older
1
2
3
4
5
6
7
8
9
<?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:

10
11
12
13
14
15
16
17
		* 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.
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

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.
*/

/*
	This function returns a string that describes the installed
33
	Linux distribution. e.g. debian40 for Debian GNU/Linux 4.0
34
35
*/

36
37
38
39
40
41
42
43
44
45
46
47
48
49


/*
Comments to completion forever ;-)
commandline arguments
$argv[1]


<?
echo "Total argument passed are : $argc \n";
for( $i = 0 ; $i <= $argc -1 ;$i++)
{
echo "Argument $i : $argv[$i] \n";
}
50
?>
51
52
53
54
55
56
57

*/
error_reporting(E_ALL|E_STRICT);


$FILE = realpath('../install.php');

oliver's avatar
oliver committed
58
//** Get distribution identifier
59
//** IMPORTANT!
60
//   This is the same code as in server/lib/classes/monitor_tools.inc.php
61
//   So if you change it here, you also have to change it in there!
62
function get_distname() {
63

tbrehm's avatar
tbrehm committed
64
	$distname = '';
65
66
67
	$distver = '';
	$distid = '';
	$distbaseid = '';
68

tbrehm's avatar
tbrehm committed
69
	//** Debian or Ubuntu
oliver's avatar
oliver committed
70
	if(file_exists('/etc/debian_version')) {
tbrehm's avatar
tbrehm committed
71
72
73
74
75
76
77
78
79
80
81
		if (strstr(trim(file_get_contents('/etc/issue')), 'Ubuntu')) {
			if (strstr(trim(file_get_contents('/etc/issue')), 'LTS')) {
				$lts=" LTS";
			} else {
				$lts="";
			}

			$issue=file_get_contents('/etc/issue');
			$distname = 'Ubuntu';
			$distid = 'debian40';
			$distbaseid = 'debian';
82
			$ver = explode(' ', $issue);
tbrehm's avatar
tbrehm committed
83
84
			$ver = array_filter($ver);
			$ver = next($ver);
85
			$mainver = explode('.', $ver);
tbrehm's avatar
tbrehm committed
86
87
88
			$mainver = array_filter($mainver);
			$mainver = current($mainver).'.'.next($mainver);
			switch ($mainver){
89
90
			case "12.10":
				$relname = "(Quantal Quetzal)";
tbrehm's avatar
tbrehm committed
91
				break;
92
93
			case "12.04":
				$relname = "(Precise Pangolin)";
tbrehm's avatar
tbrehm committed
94
				break;
95
96
			case "11.10":
				$relname = "(Oneiric Ocelot)";
tbrehm's avatar
tbrehm committed
97
				break;
98
99
			case "11.14":
				$relname = "(Natty Narwhal)";
tbrehm's avatar
tbrehm committed
100
				break;
101
102
			case "10.10":
				$relname = "(Maverick Meerkat)";
tbrehm's avatar
tbrehm committed
103
				break;
104
105
			case "10.04":
				$relname = "(Lucid Lynx)";
tbrehm's avatar
tbrehm committed
106
				break;
107
108
			case "9.10":
				$relname = "(Karmic Koala)";
tbrehm's avatar
tbrehm committed
109
				break;
110
111
			case "9.04":
				$relname = "(Jaunty Jackpole)";
tbrehm's avatar
tbrehm committed
112
				break;
113
			case "8.10":
tbrehm's avatar
tbrehm committed
114
115
				$relname = "(Intrepid Ibex)";
				break;
116
117
			case "8.04":
				$relname = "(Hardy Heron)";
tbrehm's avatar
tbrehm committed
118
				break;
119
120
			case "7.10":
				$relname = "(Gutsy Gibbon)";
tbrehm's avatar
tbrehm committed
121
				break;
122
123
			case "7.04":
				$relname = "(Feisty Fawn)";
tbrehm's avatar
tbrehm committed
124
				break;
125
126
			case "6.10":
				$relname = "(Edgy Eft)";
tbrehm's avatar
tbrehm committed
127
				break;
128
129
			case "6.06":
				$relname = "(Dapper Drake)";
tbrehm's avatar
tbrehm committed
130
				break;
131
132
			case "5.10":
				$relname = "(Breezy Badger)";
tbrehm's avatar
tbrehm committed
133
				break;
134
135
			case "5.04":
				$relname = "(Hoary Hedgehog)";
tbrehm's avatar
tbrehm committed
136
				break;
137
138
			case "4.10":
				$relname = "(Warty Warthog)";
tbrehm's avatar
tbrehm committed
139
				break;
140
141
			default:
				$relname = "UNKNOWN";
tbrehm's avatar
tbrehm committed
142
143
			}
			$distver = $ver.$lts." ".$relname;
144
			swriteln("Operating System: ".$distver."\n");
tbrehm's avatar
tbrehm committed
145
		} elseif(trim(file_get_contents('/etc/debian_version')) == '4.0') {
tbrehm's avatar
tbrehm committed
146
147
148
			$distname = 'Debian';
			$distver = '4.0';
			$distid = 'debian40';
tbrehm's avatar
tbrehm committed
149
			$distbaseid = 'debian';
150
			swriteln("Operating System: Debian 4.0 or compatible\n");
151
		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '5.0')) {
tbrehm's avatar
tbrehm committed
152
			$distname = 'Debian';
Fantu's avatar
Fantu committed
153
			$distver = 'Lenny';
tbrehm's avatar
tbrehm committed
154
			$distid = 'debian40';
tbrehm's avatar
tbrehm committed
155
			$distbaseid = 'debian';
Fantu's avatar
Fantu committed
156
			swriteln("Operating System: Debian Lenny or compatible\n");
157
		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '6.0') || trim(file_get_contents('/etc/debian_version')) == 'squeeze/sid') {
Fantu's avatar
Fantu committed
158
159
			$distname = 'Debian';
			$distver = 'Squeeze/Sid';
160
			$distid = 'debian60';
Fantu's avatar
Fantu committed
161
			$distbaseid = 'debian';
162
			swriteln("Operating System: Debian 6.0 (Squeeze/Sid) or compatible\n");
163
		} elseif(strstr(trim(file_get_contents('/etc/debian_version')), '7.0') || strstr(trim(file_get_contents('/etc/debian_version')), '7.1') || trim(file_get_contents('/etc/debian_version')) == 'wheezy/sid') {
164
165
			$distname = 'Debian';
			$distver = 'Wheezy/Sid';
166
			$distid = 'debian60';
167
			$distbaseid = 'debian';
168
			swriteln("Operating System: Debian 7.0 (Wheezy/Sid) or compatible\n");
169
		} else {
170
171
172
173
174
			$distname = 'Debian';
			$distver = 'Unknown';
			$distid = 'debian40';
			$distbaseid = 'debian';
			swriteln("Operating System: Debian or compatible, unknown version.\n");
oliver's avatar
oliver committed
175
176
		}
	}
177

tbrehm's avatar
tbrehm committed
178
	//** OpenSuSE
179
	elseif(file_exists('/etc/SuSE-release')) {
180
		if(stristr(file_get_contents('/etc/SuSE-release'), '11.0')) {
tbrehm's avatar
tbrehm committed
181
182
183
			$distname = 'openSUSE';
			$distver = '11.0';
			$distid = 'opensuse110';
tbrehm's avatar
tbrehm committed
184
			$distbaseid = 'opensuse';
tbrehm's avatar
tbrehm committed
185
			swriteln("Operating System: openSUSE 11.0 or compatible\n");
186
		} elseif(stristr(file_get_contents('/etc/SuSE-release'), '11.1')) {
tbrehm's avatar
tbrehm committed
187
188
189
190
191
			$distname = 'openSUSE';
			$distver = '11.1';
			$distid = 'opensuse110';
			$distbaseid = 'opensuse';
			swriteln("Operating System: openSUSE 11.1 or compatible\n");
192
		} elseif(stristr(file_get_contents('/etc/SuSE-release'), '11.2')) {
193
			$distname = 'openSUSE';
194
195
			$distver = '11.2';
			$distid = 'opensuse112';
196
197
198
199
200
			$distbaseid = 'opensuse';
			swriteln("Operating System: openSUSE 11.2 or compatible\n");
		}  else {
			$distname = 'openSUSE';
			$distver = 'Unknown';
201
			$distid = 'opensuse112';
202
203
			$distbaseid = 'opensuse';
			swriteln("Operating System: openSUSE or compatible, unknown version.\n");
tbrehm's avatar
tbrehm committed
204
		}
tbrehm's avatar
tbrehm committed
205
	}
206
207


oliver's avatar
oliver committed
208
	//** Redhat
209
	elseif(file_exists('/etc/redhat-release')) {
210

tbrehm's avatar
tbrehm committed
211
		$content = file_get_contents('/etc/redhat-release');
212

213
		if(stristr($content, 'Fedora release 9 (Sulphur)')) {
tbrehm's avatar
tbrehm committed
214
215
216
			$distname = 'Fedora';
			$distver = '9';
			$distid = 'fedora9';
tbrehm's avatar
tbrehm committed
217
			$distbaseid = 'fedora';
tbrehm's avatar
tbrehm committed
218
			swriteln("Operating System: Fedora 9 or compatible\n");
219
		} elseif(stristr($content, 'Fedora release 10 (Cambridge)')) {
Falko Timme's avatar
Falko Timme committed
220
221
222
223
224
			$distname = 'Fedora';
			$distver = '10';
			$distid = 'fedora9';
			$distbaseid = 'fedora';
			swriteln("Operating System: Fedora 10 or compatible\n");
225
		} elseif(stristr($content, 'Fedora release 10')) {
226
227
228
229
230
			$distname = 'Fedora';
			$distver = '11';
			$distid = 'fedora9';
			$distbaseid = 'fedora';
			swriteln("Operating System: Fedora 11 or compatible\n");
231
		} elseif(stristr($content, 'CentOS release 5.2 (Final)')) {
tbrehm's avatar
tbrehm committed
232
233
234
235
236
			$distname = 'CentOS';
			$distver = '5.2';
			$distid = 'centos52';
			$distbaseid = 'fedora';
			swriteln("Operating System: CentOS 5.2 or compatible\n");
237
		} elseif(stristr($content, 'CentOS release 5.3 (Final)')) {
238
239
			$distname = 'CentOS';
			$distver = '5.3';
tbrehm's avatar
tbrehm committed
240
			$distid = 'centos53';
241
242
			$distbaseid = 'fedora';
			swriteln("Operating System: CentOS 5.3 or compatible\n");
243
		} elseif(stristr($content, 'CentOS release 5')) {
244
245
246
247
248
			$distname = 'CentOS';
			$distver = 'Unknown';
			$distid = 'centos53';
			$distbaseid = 'fedora';
			swriteln("Operating System: CentOS 5 or compatible\n");
249
250
251
252
253
254
		} else {
			$distname = 'Redhat';
			$distver = 'Unknown';
			$distid = 'fedora9';
			$distbaseid = 'fedora';
			swriteln("Operating System: Redhat or compatible, unknown version.\n");
tbrehm's avatar
tbrehm committed
255
		}
256
	}
257

258
	//** Gentoo
259
260
261
262
	elseif(file_exists('/etc/gentoo-release')) {

		$content = file_get_contents('/etc/gentoo-release');

263
		preg_match_all('/([0-9]{1,2})/', $content, $version);
264
265
266
267
268
269
		$distname = 'Gentoo';
		$distver = $version[0][0].$version[0][1];
		$distid = 'gentoo';
		$distbaseid = 'gentoo';
		swriteln("Operating System: Gentoo $distver or compatible\n");

tbrehm's avatar
tbrehm committed
270
	} else {
271
		die('Unrecognized GNU/Linux distribution');
oliver's avatar
oliver committed
272
	}
273

tbrehm's avatar
tbrehm committed
274
	return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'baseid' => $distbaseid);
275
276
277
}

function sread() {
278
279
	$input = fgets(STDIN);
	return rtrim($input);
280
281
}

tbrehm's avatar
tbrehm committed
282
function swrite($text = '') {
283
284
285
	echo $text;
}

tbrehm's avatar
tbrehm committed
286
function swriteln($text = '') {
287
288
289
290
	echo $text."\n";
}

function ilog($msg){
291
	exec("echo `date` \"- [ISPConfig] - \"".$msg.' >> '.ISPC_LOG_FILE);
292
293
294
}

function error($msg){
295
296
	ilog($msg);
	die($msg."\n");
297
298
299
}

function caselog($command, $file = '', $line = '', $success = '', $failure = ''){
300
	exec($command, $arr, $ret_val);
301
302
303
304
305
306
307
308
309
310
311
312
313
	$arr = NULL;
	if(!empty($file) && !empty($line)){
		$pre = $file.', Line '.$line.': ';
	} else {
		$pre = '';
	}
	if($ret_val != 0){
		if($failure == '') $failure = 'could not '.$command;
		ilog($pre.'WARNING: '.$failure);
	} else {
		if($success == '') $success = $command;
		ilog($pre.$success);
	}
314
315
316
}

function phpcaselog($ret_val, $msg, $file = '', $line = ''){
317
318
319
320
321
322
323
324
325
326
327
	if(!empty($file) && !empty($line)){
		$pre = $file.', Line '.$line.': ';
	} else {
		$pre = '';
	}
	if($ret_val == true){
		ilog($pre.$msg);
	} else {
		ilog($pre.'WARNING: could not '.$msg);
	}
	return $ret_val;
328
329
330
}

function mkdirs($strPath, $mode = '0755'){
pedro_morgan's avatar
pedro_morgan committed
331
	if(isset($strPath) && $strPath != ''){
332
333
334
335
336
337
338
339
340
341
342
343
344
345
		//* Verzeichnisse rekursiv erzeugen
		if(is_dir($strPath)){
			return true;
		}
		$pStrPath = dirname($strPath);
		if(!mkdirs($pStrPath, $mode)){
			return false;
		}
		$old_umask = umask(0);
		$ret_val = mkdir($strPath, octdec($mode));
		umask($old_umask);
		return $ret_val;
	}
	return false;
346
347
}

348
function rfsel($file, $file2) {
349
350
351
	clearstatcache();
	if(is_file($file)) return rf($file);
	else return rf($file2);
352
353
}

354
function rf($file){
355
	clearstatcache();
tbrehm's avatar
tbrehm committed
356
	if(is_file($file)) {
357
		if(!$fp = fopen($file, 'rb')){
tbrehm's avatar
tbrehm committed
358
359
360
361
362
			ilog('WARNING: could not open file '.$file);
		}
		return filesize($file) > 0 ? fread($fp, filesize($file)) : '';
	} else {
		return '';
363
	}
364
365
366
}

function wf($file, $content){
367
	mkdirs(dirname($file));
368
	if(!$fp = fopen($file, 'wb')){
369
370
371
372
		ilog('WARNING: could not open file '.$file);
	}
	fwrite($fp, $content);
	fclose($fp);
373
374
375
}

function af($file, $content){
376
	mkdirs(dirname($file));
377
	if(!$fp = fopen($file, 'ab')){
378
379
		ilog('WARNING: could not open file '.$file);
	}
380
	fwrite($fp, $content);
381
	fclose($fp);
382
383
384
}

function aftsl($file, $content){
385
	if(!$fp = fopen($file, 'ab')){
386
387
		ilog('WARNING: could not open file '.$file);
	}
388
	fwrite($fp, $content);
389
	fclose($fp);
390
391
392
}

function unix_nl($input){
393
394
395
	$output = str_replace("\r\n", "\n", $input);
	$output = str_replace("\r", "\n", $output);
	return $output;
396
397
398
}

function remove_blank_lines($input, $file = 1){
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
	//TODO ? Leerzeilen l�schen
	if($file){
		$content = unix_nl(rf($input)); // WTF -pedro !
	}else{
		$content = $input;
	}
	$lines = explode("\n", $content);
	if(!empty($lines)){
		foreach($lines as $line){
			if(trim($line) != '') $new_lines[] = $line;
		}
	}
	if(is_array($new_lines)){
		$content = implode("\n", $new_lines);
	} else {
		$content = '';
	}
	if($file){
		wf($input, $content);
	}else{
		return $content;
	}
421
422
423
}

function no_comments($file, $comment = '#'){
424
425
426
427
428
429
430
	$content = unix_nl(rf($file));
	$lines = explode("\n", $content);
	if(!empty($lines)){
		foreach($lines as $line){
			if(strstr($line, $comment)){
				$pos = strpos($line, $comment);
				if($pos != 0){
431
					$new_lines[] = substr($line, 0, $pos);
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
				}else{
					$new_lines[] = '';
				}
			}else{
				$new_lines[] = $line;
			}
		}
	}
	if(is_array($new_lines)){
		$content_without_comments = implode("\n", $new_lines);
		$new_lines = NULL;
		return $content_without_comments;
	} else {
		return '';
	}
447
448
449
}

function comment_out($file, $string){
450
451
452
453
454
455
456
457
458
459
	$inhalt = no_comments($file);
	$gesamt_inhalt = rf($file);
	$modules = explode(',', $string);
	foreach($modules as $val){
		$val = trim($val);
		if(strstr($inhalt, $val)){
			$gesamt_inhalt = str_replace($val, '##ISPConfig INSTALL## '.$val, $gesamt_inhalt);
		}
	}
	wf($file, $gesamt_inhalt);
460
461
462
}

function is_word($string, $text, $params = ''){
463
464
465
466
467
468
469
470
471
	//* params: i ??
	return preg_match("/\b$string\b/$params", $text);
	/*
	if(preg_match("/\b$string\b/$params", $text)) {
		return true;
	} else {
		return false;
	}
	*/
472
473
474
}

function grep($content, $string, $params = ''){
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
	// params: i, v, w
	$content = unix_nl($content);
	$lines = explode("\n", $content);
	foreach($lines as $line){
		if(!strstr($params, 'w')){
			if(strstr($params, 'i')){
				if(strstr($params, 'v')){
					if(!stristr($line, $string)) $find[] = $line;
				} else {
					if(stristr($line, $string)) $find[] = $line;
				}
			} else {
				if(strstr($params, 'v')){
					if(!strstr($line, $string)) $find[] = $line;
				} else {
					if(strstr($line, $string)) $find[] = $line;
				}
			}
		} else {
			if(strstr($params, 'i')){
				if(strstr($params, 'v')){
					if(!is_word($string, $line, 'i')) $find[] = $line;
				} else {
					if(is_word($string, $line, 'i')) $find[] = $line;
				}
			} else {
				if(strstr($params, 'v')){
					if(!is_word($string, $line)) $find[] = $line;
				} else {
					if(is_word($string, $line)) $find[] = $line;
				}
			}
		}
	}
	if(is_array($find)){
		$ret_val = implode("\n", $find);
511
		if(substr($ret_val, -1) != "\n") $ret_val .= "\n";
512
513
514
515
516
		$find = NULL;
		return $ret_val;
	} else {
		return false;
	}
517
518
519
}

function edit_xinetd_conf($service){
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
	$xinetd_conf = '/etc/xinetd.conf';
	$contents = unix_nl(rf($xinetd_conf));
	$lines = explode("\n", $contents);
	$j = sizeof($lines);
	for($i=0;$i<sizeof($lines);$i++){
		if(grep($lines[$i], $service, 'w')){
			$fundstelle_anfang = $i;
			$j = $i;
			$parts = explode($lines[$i], $contents);
		}
		if($j < sizeof($lines)){
			if(strstr($lines[$i], '}')){
				$fundstelle_ende = $i;
				$j = sizeof($lines);
			}
		}
	}
	if(isset($fundstelle_anfang) && isset($fundstelle_ende)){
		for($i=$fundstelle_anfang;$i<=$fundstelle_ende;$i++){
			if(strstr($lines[$i], 'disable')){
				$disable = explode('=', $lines[$i]);
				$disable[1] = ' yes';
				$lines[$i] = implode('=', $disable);
			}
		}
	}
	$fundstelle_anfang = NULL;
	$fundstelle_ende = NULL;
	$contents = implode("\n", $lines);
	wf($xinetd_conf, $contents);
550
551
}

552
553
554
555
556
557
//* Converts a ini string to array
function ini_to_array($ini) {
	$config = '';
	$ini = str_replace("\r\n", "\n", $ini);
	$lines = explode("\n", $ini);
	foreach($lines as $line) {
558
		$line = trim($line);
559
560
561
562
563
564
565
566
567
568
569
		if($line != '') {
			if(preg_match("/^\[([\w\d_]+)\]$/", $line, $matches)) {
				$section = strtolower($matches[1]);
			} elseif(preg_match("/^([\w\d_]+)=(.*)$/", $line, $matches) && $section != null) {
				$item = trim($matches[1]);
				$config[$section][$item] = trim($matches[2]);
			}
		}
	}
	return $config;
}
570
571


572
//* Converts a config array to a string
tbrehm's avatar
tbrehm committed
573
function array_to_ini($config_array = '') {
574
575
576
577
578
579
	if($config_array == '') $config_array = $this->config;
	$content = '';
	foreach($config_array as $section => $data) {
		$content .= "[$section]\n";
		foreach($data as $item => $value) {
			if($item != ''){
580
581
				$content .= "$item=$value\n";
			}
582
583
584
585
586
587
		}
		$content .= "\n";
	}
	return $content;
}

588
function is_user($user){
589
590
591
592
593
594
595
596
597
598
599
600
601
	global $mod;
	$user_datei = '/etc/passwd';
	$users = no_comments($user_datei);
	$lines = explode("\n", $users);
	if(is_array($lines)){
		foreach($lines as $line){
			if(trim($line) != ''){
				list($f1, $f2, $f3, $f4, $f5, $f6, $f7) = explode(':', $line);
				if($f1 == $user) return true;
			}
		}
	}
	return false;
602
603
604
}

function is_group($group){
605
606
607
608
609
610
611
612
613
614
615
616
617
	global $mod;
	$group_datei = '/etc/group';
	$groups = no_comments($group_datei);
	$lines = explode("\n", $groups);
	if(is_array($lines)){
		foreach($lines as $line){
			if(trim($line) != ''){
				list($f1, $f2, $f3, $f4) = explode(':', $line);
				if($f1 == $group) return true;
			}
		}
	}
	return false;
618
619
}

620
function replaceLine($filename, $search_pattern, $new_line, $strict = 0, $append = 1) {
tbrehm's avatar
tbrehm committed
621
	if($lines = @file($filename)) {
tbrehm's avatar
tbrehm committed
622
623
624
625
		$out = '';
		$found = 0;
		foreach($lines as $line) {
			if($strict == 0) {
626
				if(stristr($line, $search_pattern)) {
tbrehm's avatar
tbrehm committed
627
628
629
630
631
632
633
634
635
636
637
638
639
					$out .= $new_line."\n";
					$found = 1;
				} else {
					$out .= $line;
				}
			} else {
				if(trim($line) == $search_pattern) {
					$out .= $new_line."\n";
					$found = 1;
				} else {
					$out .= $line;
				}
			}
640
641
642
643
644
			if (!$found) {
				if (trim($line) == $new_line) {
					$found = 1;
				}
			}
tbrehm's avatar
tbrehm committed
645
646
		}
		if($found == 0) {
647
			//* add \n if the last line does not end with \n or \r
648
			if(substr($out, -1) != "\n" && substr($out, -1) != "\r") $out .= "\n";
649
			//* add the new line at the end of the file
tbrehm's avatar
tbrehm committed
650
			if($append == 1) $out .= $new_line."\n";
tbrehm's avatar
tbrehm committed
651
		}
652
		file_put_contents($filename, $out);
tbrehm's avatar
tbrehm committed
653
	}
tbrehm's avatar
tbrehm committed
654
}
655

656
function removeLine($filename, $search_pattern, $strict = 0) {
tbrehm's avatar
tbrehm committed
657
	if($lines = @file($filename)) {
tbrehm's avatar
tbrehm committed
658
659
660
		$out = '';
		foreach($lines as $line) {
			if($strict == 0) {
661
				if(!stristr($line, $search_pattern)) {
tbrehm's avatar
tbrehm committed
662
663
664
665
666
667
668
669
					$out .= $line;
				}
			} else {
				if(!trim($line) == $search_pattern) {
					$out .= $line;
				}
			}
		}
670
		file_put_contents($filename, $out);
tbrehm's avatar
tbrehm committed
671
	}
tbrehm's avatar
tbrehm committed
672
673
}

Marius Cramer's avatar
Marius Cramer committed
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
function hasLine($filename, $search_pattern, $strict = 0) {
	if($lines = @file($filename)) {
		foreach($lines as $line) {
			if($strict == 0) {
				if(stristr($line, $search_pattern)) {
					return true;
				}
			} else {
				if(trim($line) == $search_pattern) {
					return true;
				}
			}
		}
	}
	return false;
}

tbrehm's avatar
tbrehm committed
691
function is_installed($appname) {
692
693
	exec('which '.escapeshellcmd($appname).' 2> /dev/null', $out, $returncode);
	if(isset($out[0]) && stristr($out[0], $appname) && $returncode == 0) {
tbrehm's avatar
tbrehm committed
694
695
696
697
698
699
		return true;
	} else {
		return false;
	}
}

700
701
702
703
704
705
/*
* Get the port number of the ISPConfig controlpanel vhost
*/

function get_ispconfig_port_number() {
	global $conf;
706
707
708
709
710
711
712
	if($conf['nginx']['installed'] == true){
		$ispconfig_vhost_file = $conf['nginx']['vhost_conf_dir'].'/ispconfig.vhost';
		$regex = '/listen (\d+)/';
	} else {
		$ispconfig_vhost_file = $conf['apache']['vhost_conf_dir'].'/ispconfig.vhost';
		$regex = '/\<VirtualHost.*\:(\d{1,})\>/';
	}
713

714
715
	if(is_file($ispconfig_vhost_file)) {
		$tmp = file_get_contents($ispconfig_vhost_file);
716
		preg_match($regex, $tmp, $matches);
717
		$port_number = @intval($matches[1]);
718
719
720
721
722
723
724
725
		if($port_number > 0) {
			return $port_number;
		} else {
			return '8080';
		}
	}
}

726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
/*
* Get the port number of the ISPConfig apps vhost
*/

function get_apps_vhost_port_number() {
	global $conf;
	if($conf['nginx']['installed'] == true){
		$ispconfig_vhost_file = $conf['nginx']['vhost_conf_dir'].'/apps.vhost';
		$regex = '/listen (\d+)/';
	} else {
		$ispconfig_vhost_file = $conf['apache']['vhost_conf_dir'].'/apps.vhost';
		$regex = '/\<VirtualHost.*\:(\d{1,})\>/';
	}

	if(is_file($ispconfig_vhost_file)) {
		$tmp = file_get_contents($ispconfig_vhost_file);
		preg_match($regex, $tmp, $matches);
		$port_number = @intval($matches[1]);
		if($port_number > 0) {
			return $port_number;
		} else {
			return '8081';
		}
	}
}

752
753
754
755
756
757
758
759
760
761
/*
* Get the port number of the ISPConfig controlpanel vhost
*/

function is_ispconfig_ssl_enabled() {
	global $conf;
	$ispconfig_vhost_file = $conf['apache']['vhost_conf_dir'].'/ispconfig.vhost';

	if(is_file($ispconfig_vhost_file)) {
		$tmp = file_get_contents($ispconfig_vhost_file);
762
		if(stristr($tmp, 'SSLCertificateFile')) {
763
764
765
766
767
768
769
			return true;
		} else {
			return false;
		}
	}
}

770
771
772
773
774
775
/**
 Function to find the hash file for timezone detection
 (c) 2012 Marius Cramer, pixcept KG, m.cramer@pixcept.de
 */


776
function find_hash_file($hash, $dir, $basedir = '') {
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
	$res = opendir($dir);
	if(!$res) return false;

	if(substr($basedir, -1) === '/') $basedir = substr($basedir, 0, strlen($basedir) - 1);
	if(substr($dir, -1) === '/') $dir = substr($dir, 0, strlen($dir) - 1);
	if($basedir === '') $basedir = $dir;

	while($cur = readdir($res)) {
		if($cur == '.' || $cur == '..') continue;
		$entry = $dir.'/'.$cur;
		if(is_dir($entry)) {
			$result = find_hash_file($hash, $entry, $basedir);
			if($result !== false) return $result;
		} elseif(md5_file($entry) === $hash) {
			$entry = substr($entry, strlen($basedir) + 1);
			if(substr($entry, 0, 7) === '/posix/') $entry = substr($entry, 7);
			return $entry;
		}
	}
	closedir($res);
	return false;
}


/**
 Function to get the timezone of the Linux system
 (c) 2012 Marius Cramer, pixcept KG, m.cramer@pixcept.de
 */
805
function get_system_timezone() {
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
	$timezone = false;
	if(file_exists('/etc/timezone') && is_readable('/etc/timezone')) {
		$timezone = trim(file_get_contents('/etc/timezone'));
		if(file_exists('/usr/share/zoneinfo/' . $timezone) == false) $timezone = false;
	}

	if(!$timezone && is_link('/etc/localtime')) {
		$timezone = readlink('/etc/localtime');
		$timezone = str_replace('/usr/share/zoneinfo/', '', $timezone);
		if(substr($timezone, 0, 6) === 'posix/') $timezone = substr($timezone, 6);
	} elseif(!$timezone) {
		$hash = md5_file('/etc/localtime');
		$timezone = find_hash_file($hash, '/usr/share/zoneinfo');
	}

	if(!$timezone) {
		exec('date +%Z', $tzinfo);
		$timezone = $tzinfo[0];
	}
Marius Cramer's avatar
Marius Cramer committed
825
826
	
	if(substr($timezone, 0, 1) === '/') $timezone = substr($timezone, 1);
827
828

	return $timezone;
829
830
}

831

832
?>