| | |
| | | /* |
| | | This function returns a string that describes the installed |
| | | linux distribution. e.g. debian40 for Debian Linux 4.0 |
| | | |
| | | */ |
| | | |
| | | |
| | | |
| | | /* |
| | | 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"; |
| | | } |
| | | ?> |
| | | |
| | | */ |
| | | error_reporting(E_ALL|E_STRICT); |
| | | |
| | | |
| | | $FILE = realpath('../install.php'); |
| | | |
| | | //** Get distribution identifier |
| | | function get_distname() { |
| | | |
| | | $distname = 'debian40'; |
| | | $distname = ''; |
| | | |
| | | return $distname; |
| | | //** Debian or Ubuntu |
| | | if(file_exists('/etc/debian_version')) { |
| | | |
| | | if(trim(file_get_contents('/etc/debian_version')) == '4.0') { |
| | | $distname = 'Debian'; |
| | | $distver = '4.0'; |
| | | $distid = 'debian40'; |
| | | $distbaseid = 'debian'; |
| | | swriteln("Operating System: Debian 4.0 or compatible\n"); |
| | | } |
| | | if(trim(file_get_contents('/etc/debian_version')) == '5.0' || trim(file_get_contents('/etc/debian_version')) == 'lenny/sid') { |
| | | $distname = 'Debian'; |
| | | $distver = 'Lenny/Sid'; |
| | | $distid = 'debian40'; |
| | | $distbaseid = 'debian'; |
| | | swriteln("Operating System: Debian Lenny/Sid or compatible\n"); |
| | | } |
| | | } |
| | | |
| | | //** OpenSuSE |
| | | elseif(file_exists("/etc/SuSE-release")) { |
| | | if(stristr(file_get_contents('/etc/SuSE-release'),'11.0')) { |
| | | $distname = 'openSUSE'; |
| | | $distver = '11.0'; |
| | | $distid = 'opensuse110'; |
| | | $distbaseid = 'opensuse'; |
| | | swriteln("Operating System: openSUSE 11.0 or compatible\n"); |
| | | } |
| | | } |
| | | |
| | | |
| | | //** Redhat |
| | | elseif(file_exists("/etc/redhat-release")) { |
| | | |
| | | $content = file_get_contents('/etc/redhat-release'); |
| | | |
| | | if(stristr($content,'Fedora release 9 (Sulphur)')) { |
| | | $distname = 'Fedora'; |
| | | $distver = '9'; |
| | | $distid = 'fedora9'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: Fedora 9 or compatible\n"); |
| | | } |
| | | |
| | | if(stristr($content,'CentOS release 5.2 (Final)')) { |
| | | $distname = 'CentOS'; |
| | | $distver = '5.2'; |
| | | $distid = 'centos52'; |
| | | $distbaseid = 'fedora'; |
| | | swriteln("Operating System: CentOS 5.2 or compatible\n"); |
| | | } |
| | | |
| | | |
| | | } else { |
| | | die('unrecognized linux distribution'); |
| | | } |
| | | |
| | | return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'baseid' => $distbaseid); |
| | | } |
| | | |
| | | |
| | | function sread() { |
| | | $fp=fopen("/dev/stdin", "r"); |
| | | $input=fgets($fp, 255); |
| | | fclose($fp); |
| | | |
| | | $input = fgets(STDIN); |
| | | return rtrim($input); |
| | | } |
| | | |
| | | function swrite($text) { |
| | | function swrite($text = '') { |
| | | echo $text; |
| | | } |
| | | |
| | | function swriteln($text) { |
| | | function swriteln($text = '') { |
| | | echo $text."\n"; |
| | | } |
| | | |
| | | $FILE = realpath("../install.php"); |
| | | |
| | | function ilog($msg){ |
| | | $logfile = "/var/log/ispconfig_install.log"; |
| | | exec("echo `date` \"- [ISPConfig] - \"".$msg." >> ".$logfile); |
| | | exec("echo `date` \"- [ISPConfig] - \"".$msg." >> ".ISPC_LOG_FILE); |
| | | } |
| | | |
| | | function error($msg){ |
| | | ilog($msg); |
| | | die($msg."\n"); |
| | | ilog($msg); |
| | | die($msg."\n"); |
| | | } |
| | | |
| | | function caselog($command, $file = '', $line = '', $success = '', $failure = ''){ |
| | | exec($command,$arr,$ret_val); |
| | | $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); |
| | | } |
| | | exec($command,$arr,$ret_val); |
| | | $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); |
| | | } |
| | | } |
| | | |
| | | function phpcaselog($ret_val, $msg, $file = '', $line = ''){ |
| | | 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; |
| | | 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; |
| | | } |
| | | |
| | | function mkdirs($strPath, $mode = '0755'){ |
| | | if(isset($strPath) && $strPath != ""){ |
| | | // 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; |
| | | } else { |
| | | return false; |
| | | } |
| | | if(isset($strPath) && $strPath != ''){ |
| | | //* 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; |
| | | } |
| | | |
| | | function rf($file){ |
| | | clearstatcache(); |
| | | if(!$fp = fopen ($file, "rb")) ilog("WARNING: could not open file ".$file); |
| | | if(filesize($file) > 0){ |
| | | $content = fread($fp, filesize($file)); |
| | | } else { |
| | | $content = ""; |
| | | } |
| | | fclose($fp); |
| | | return $content; |
| | | clearstatcache(); |
| | | if(!$fp = fopen ($file, 'rb')){ |
| | | ilog('WARNING: could not open file '.$file); |
| | | } |
| | | return filesize($file) > 0 ? fread($fp, filesize($file)) : ''; |
| | | } |
| | | |
| | | function wf($file, $content){ |
| | | mkdirs(dirname($file)); |
| | | if(!$fp = fopen ($file, "wb")) ilog("WARNING: could not open file ".$file); |
| | | fwrite($fp,$content); |
| | | fclose($fp); |
| | | mkdirs(dirname($file)); |
| | | if(!$fp = fopen ($file, 'wb')){ |
| | | ilog('WARNING: could not open file '.$file); |
| | | } |
| | | fwrite($fp, $content); |
| | | fclose($fp); |
| | | } |
| | | |
| | | function af($file, $content){ |
| | | mkdirs(dirname($file)); |
| | | if(!$fp = fopen ($file, "ab")) ilog("WARNING: could not open file ".$file); |
| | | fwrite($fp,$content); |
| | | fclose($fp); |
| | | mkdirs(dirname($file)); |
| | | if(!$fp = fopen ($file, 'ab')){ |
| | | ilog('WARNING: could not open file '.$file); |
| | | } |
| | | fwrite($fp,$content); |
| | | fclose($fp); |
| | | } |
| | | |
| | | function aftsl($file, $content){ |
| | | if(!$fp = fopen ($file, "ab")) ilog("WARNING: could not open file ".$file); |
| | | fwrite($fp,$content); |
| | | fclose($fp); |
| | | if(!$fp = fopen ($file, 'ab')){ |
| | | ilog('WARNING: could not open file '.$file); |
| | | } |
| | | fwrite($fp,$content); |
| | | fclose($fp); |
| | | } |
| | | |
| | | function unix_nl($input){ |
| | | $output = str_replace("\r\n", "\n", $input); |
| | | $output = str_replace("\r", "\n", $output); |
| | | return $output; |
| | | $output = str_replace("\r\n", "\n", $input); |
| | | $output = str_replace("\r", "\n", $output); |
| | | return $output; |
| | | } |
| | | |
| | | function remove_blank_lines($input, $file = 1){ |
| | | //Leerzeilen l�schen |
| | | if($file){ |
| | | $content = unix_nl(rf($input)); |
| | | } 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; |
| | | } |
| | | //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; |
| | | } |
| | | } |
| | | |
| | | function no_comments($file, $comment = '#'){ |
| | | $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){ |
| | | $new_lines[] = substr($line,0,$pos); |
| | | } 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 ""; |
| | | } |
| | | $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){ |
| | | $new_lines[] = substr($line,0,$pos); |
| | | }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 ''; |
| | | } |
| | | } |
| | | |
| | | function find_includes($file){ |
| | |
| | | $lines = explode("\n", $inhalt); |
| | | if(!empty($lines)){ |
| | | foreach($lines as $line){ |
| | | if(stristr($line, "include ")){ |
| | | $include_file = str_replace("\n", "", trim(shell_exec("echo \"$line\" | awk '{print \$2}'"))); |
| | | if(substr($include_file,0,1) != "/"){ |
| | | $include_file = $httpd_root."/".$include_file; |
| | | if(stristr($line, 'include ')){ |
| | | $include_file = str_replace("\n", '', trim(shell_exec("echo \"$line\" | awk '{print \$2}'"))); |
| | | if(substr($include_file,0,1) != '/'){ |
| | | $include_file = $httpd_root.'/'.$include_file; |
| | | } |
| | | if(is_file($include_file)){ |
| | | if($further_includes = find_includes($include_file)){ |
| | | $includes = array_merge($includes, $further_includes); |
| | | } |
| | | } else { |
| | | if(strstr($include_file, "*")){ |
| | | if(strstr($include_file, '*')){ |
| | | $more_files = explode("\n", shell_exec("ls -l $include_file | awk '{print \$9}'")); |
| | | if(!empty($more_files)){ |
| | | foreach($more_files as $more_file){ |
| | |
| | | } |
| | | |
| | | function comment_out($file, $string){ |
| | | $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); |
| | | $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); |
| | | } |
| | | |
| | | function is_word($string, $text, $params = ''){ |
| | | // params: i |
| | | //* params: i ?? |
| | | return preg_match("/\b$string\b/$params", $text); |
| | | /* |
| | | if(preg_match("/\b$string\b/$params", $text)) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | */ |
| | | } |
| | | |
| | | function grep($content, $string, $params = ''){ |
| | |
| | | } |
| | | |
| | | function edit_xinetd_conf($service){ |
| | | $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); |
| | | $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); |
| | | } |
| | | |
| | | //* 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) { |
| | | $line = trim($line); |
| | | 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; |
| | | } |
| | | |
| | | |
| | | //* Converts a config array to a string |
| | | function array_to_ini($config_array = '') { |
| | | if($config_array == '') $config_array = $this->config; |
| | | $content = ''; |
| | | foreach($config_array as $section => $data) { |
| | | $content .= "[$section]\n"; |
| | | foreach($data as $item => $value) { |
| | | if($item != ''){ |
| | | $content .= "$item=$value\n"; |
| | | } |
| | | } |
| | | $content .= "\n"; |
| | | } |
| | | return $content; |
| | | } |
| | | |
| | | function is_user($user){ |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | 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); |
| | | return false; |
| | | } |
| | | |
| | | function is_group($group){ |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | $fundstelle_anfang = NULL; |
| | | $fundstelle_ende = NULL; |
| | | $contents = implode("\n", $lines); |
| | | wf($xinetd_conf, $contents); |
| | | return false; |
| | | } |
| | | |
| | | function replaceLine($filename,$search_pattern,$new_line,$strict = 0) { |
| | | if($lines = @file($filename)) { |
| | | $out = ''; |
| | | $found = 0; |
| | | foreach($lines as $line) { |
| | | if($strict == 0) { |
| | | if(stristr($line,$search_pattern)) { |
| | | $out .= $new_line."\n"; |
| | | $found = 1; |
| | | } else { |
| | | $out .= $line; |
| | | } |
| | | } else { |
| | | if(trim($line) == $search_pattern) { |
| | | $out .= $new_line."\n"; |
| | | $found = 1; |
| | | } else { |
| | | $out .= $line; |
| | | } |
| | | } |
| | | } |
| | | if($found == 0) { |
| | | $out .= $new_line."\n"; |
| | | } |
| | | file_put_contents($filename,$out); |
| | | } |
| | | } |
| | | |
| | | function removeLine($filename,$search_pattern,$strict = 0) { |
| | | if($lines = @file($filename)) { |
| | | $out = ''; |
| | | foreach($lines as $line) { |
| | | if($strict == 0) { |
| | | if(!stristr($line,$search_pattern)) { |
| | | $out .= $line; |
| | | } |
| | | } else { |
| | | if(!trim($line) == $search_pattern) { |
| | | $out .= $line; |
| | | } |
| | | } |
| | | } |
| | | file_put_contents($filename,$out); |
| | | } |
| | | } |
| | | |
| | | function is_installed($appname) { |
| | | exec('which '.escapeshellcmd($appname),$out); |
| | | if(isset($out[0]) && stristr($out[0],$appname)) { |
| | | return true; |
| | | } else { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | /* |
| | | |
| | | commandline arguments |
| | | $argv[1] |
| | | |
| | | |
| | | <? |
| | | echo "Total argument passed are : $argc \n"; |
| | | for( $i = 0 ; $i <= $argc -1 ;$i++) |
| | | { |
| | | echo "Argument $i : $argv[$i] \n"; |
| | | } |
| | | ?> |
| | | |
| | | */ |
| | | |
| | | |
| | | |
| | | ?> |
| | | ?> |