latham
2011-05-25 f99b37f56dad8e3a1f844f8d3b33ee1ba4b86d62
install/lib/install.lib.php
@@ -30,8 +30,7 @@
/*
   This function returns a string that describes the installed
   linux distribution. e.g. debian40 for Debian Linux 4.0
   Linux distribution. e.g. debian40 for Debian GNU/Linux 4.0
*/
@@ -56,16 +55,148 @@
$FILE = realpath('../install.php');
//** Get distribution identifier
//** IMPORTANT!
//   This is the same code as in server/lib/classes/monitor_tools.inc.php
//   So if you change it here, you also have to change it in there!
function get_distname() {
   global $conf; // TODO wtf ?
   $distname = $conf['distname'];
   return $distname;
   $distname = '';
   $distver = '';
   $distid = '';
   $distbaseid = '';
   //** 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");
      } elseif(strstr(trim(file_get_contents('/etc/debian_version')),'5.0')) {
         $distname = 'Debian';
         $distver = 'Lenny';
         $distid = 'debian40';
         $distbaseid = 'debian';
         swriteln("Operating System: Debian Lenny or compatible\n");
      } elseif(strstr(trim(file_get_contents('/etc/debian_version')),'6.0') || trim(file_get_contents('/etc/debian_version')) == 'squeeze/sid') {
         $distname = 'Debian';
         $distver = 'Squeeze/Sid';
         $distid = 'debian60';
         $distbaseid = 'debian';
         swriteln("Operating System: Debian 6.0 (Squeeze/Sid) or compatible\n");
      }  else {
         $distname = 'Debian';
         $distver = 'Unknown';
         $distid = 'debian40';
         $distbaseid = 'debian';
         swriteln("Operating System: Debian or compatible, unknown version.\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");
      } elseif(stristr(file_get_contents('/etc/SuSE-release'),'11.1')) {
         $distname = 'openSUSE';
         $distver = '11.1';
         $distid = 'opensuse110';
         $distbaseid = 'opensuse';
         swriteln("Operating System: openSUSE 11.1 or compatible\n");
      } elseif(stristr(file_get_contents('/etc/SuSE-release'),'11.2')) {
         $distname = 'openSUSE';
         $distver = '11.2';
         $distid = 'opensuse112';
         $distbaseid = 'opensuse';
         swriteln("Operating System: openSUSE 11.2 or compatible\n");
      }  else {
         $distname = 'openSUSE';
         $distver = 'Unknown';
         $distid = 'opensuse112';
         $distbaseid = 'opensuse';
         swriteln("Operating System: openSUSE or compatible, unknown version.\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");
      } elseif(stristr($content,'Fedora release 10 (Cambridge)')) {
         $distname = 'Fedora';
         $distver = '10';
         $distid = 'fedora9';
         $distbaseid = 'fedora';
         swriteln("Operating System: Fedora 10 or compatible\n");
      } elseif(stristr($content,'Fedora release 10')) {
         $distname = 'Fedora';
         $distver = '11';
         $distid = 'fedora9';
         $distbaseid = 'fedora';
         swriteln("Operating System: Fedora 11 or compatible\n");
      } elseif(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");
      } elseif(stristr($content,'CentOS release 5.3 (Final)')) {
         $distname = 'CentOS';
         $distver = '5.3';
         $distid = 'centos53';
         $distbaseid = 'fedora';
         swriteln("Operating System: CentOS 5.3 or compatible\n");
      } elseif(stristr($content,'CentOS release 5')) {
         $distname = 'CentOS';
         $distver = 'Unknown';
         $distid = 'centos53';
         $distbaseid = 'fedora';
         swriteln("Operating System: CentOS 5 or compatible\n");
      } else {
         $distname = 'Redhat';
         $distver = 'Unknown';
         $distid = 'fedora9';
         $distbaseid = 'fedora';
         swriteln("Operating System: Redhat or compatible, unknown version.\n");
      }
   }
   //** Gentoo
    elseif(file_exists('/etc/gentoo-release')) {
       $content = file_get_contents('/etc/gentoo-release');
        preg_match_all('/([0-9]{1,2})/', $content, $version);
       $distname = 'Gentoo';
       $distver = $version[0][0].$version[0][1];
       $distid = 'gentoo';
       $distbaseid = 'gentoo';
       swriteln("Operating System: Gentoo $distver or compatible\n");
   } else {
      die('Unrecognized GNU/Linux distribution');
   }
   return array('name' => $distname, 'version' => $distver, 'id' => $distid, 'baseid' => $distbaseid);
}
function sread() {
    $f = fopen('/dev/stdin', 'r');
    $input = fgets($f, 255);
    fclose($f);
    $input = fgets(STDIN);
    return rtrim($input);
}
@@ -78,8 +209,7 @@
}
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){
@@ -119,7 +249,7 @@
}
function mkdirs($strPath, $mode = '0755'){
   if(isset($strPath) && $strPath != ""){
   if(isset($strPath) && $strPath != ''){
      //* Verzeichnisse rekursiv erzeugen
      if(is_dir($strPath)){
         return true;
@@ -138,10 +268,14 @@
function rf($file){
   clearstatcache();
   if(!$fp = fopen ($file, 'rb')){
      ilog('WARNING: could not open file '.$file);
   if(is_file($file)) {
      if(!$fp = fopen ($file, 'rb')){
         ilog('WARNING: could not open file '.$file);
      }
      return filesize($file) > 0 ? fread($fp, filesize($file)) : '';
   } else {
      return '';
   }
   return filesize($file) > 0 ? fread($fp, filesize($file)) : '';
}
function wf($file, $content){
@@ -225,61 +359,6 @@
   } else {
      return '';
   }
}
function find_includes($file){
  global $httpd_root;
  clearstatcache();
  if(is_file($file) && filesize($file) > 0){
    $includes[] = $file;
    $inhalt = unix_nl(no_comments($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(is_file($include_file)){
            if($further_includes = find_includes($include_file)){
              $includes = array_merge($includes, $further_includes);
            }
          } else {
            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){
                  if(is_file($more_file)){
                    if($further_includes = find_includes($more_file)){
                      $includes = array_merge($includes, $further_includes);
                    }
                  }
                }
              }
              unset($more_files);
              $more_files = explode("\n", shell_exec("ls -l $include_file | awk '{print \$10}'"));
              if(!empty($more_files)){
                foreach($more_files as $more_file){
                  if(is_file($more_file)){
                    if($further_includes = find_includes($more_file)){
                      $includes = array_merge($includes, $further_includes);
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  if(is_array($includes)){
    $includes = array_unique($includes);
    return $includes;
  } else {
    return false;
  }
}
function comment_out($file, $string){
@@ -385,4 +464,207 @@
   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;
      }
    }
  }
  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;
      }
    }
  }
  return false;
}
function replaceLine($filename,$search_pattern,$new_line,$strict = 0,$append = 1) {
   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) {
         //* add \n if the last line does not end with \n or \r
         if(substr($out,-1) != "\n" && substr($out,-1) != "\r") $out .= "\n";
         //* add the new line at the end of the file
         if($append == 1) $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).' 2> /dev/null',$out);
   if(isset($out[0]) && stristr($out[0],$appname)) {
      return true;
   } else {
      return false;
   }
}
/*
 * Compare ISPConfig version number.
 * return values:
 * -1 $current version is newer then $new version (downgrade)
 * 0 $current version = $new version
 * 1 $current version is older then new version (update)
*/
function compare_ispconfig_version($current,$new) {
   if( $current == $new) {
      return 0;
   }
   $p = explode('.',$current);
   $tmp = '';
   $tmp .= str_pad(intval($p[0]), 3, '0', STR_PAD_LEFT);
   $tmp .= (isset($p[1]))?str_pad(intval($p[1]), 3, '0', STR_PAD_LEFT):'000';
   $tmp .= (isset($p[2]))?str_pad(intval($p[2]), 3, '0', STR_PAD_LEFT):'000';
   $tmp .= (isset($p[3]))?str_pad(intval($p[3]), 3, '0', STR_PAD_LEFT):'000';
   $current = $tmp;
   $p = explode('.',$new);
   $tmp = '';
   $tmp .= str_pad(intval($p[0]), 3, '0', STR_PAD_LEFT);
   $tmp .= (isset($p[1]))?str_pad(intval($p[1]), 3, '0', STR_PAD_LEFT):'000';
   $tmp .= (isset($p[2]))?str_pad(intval($p[2]), 3, '0', STR_PAD_LEFT):'000';
   $tmp .= (isset($p[3]))?str_pad(intval($p[3]), 3, '0', STR_PAD_LEFT):'000';
   $new = $tmp;
   if($new > $current) {
      return 1;
   } else {
      return -1;
   }
}
/*
* Get the port number of the ISPConfig controlpanel vhost
*/
function get_ispconfig_port_number() {
   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);
      preg_match('/\<VirtualHost.*\:(\d{1,})\>/',$tmp,$matches);
      $port_number = intval($matches[1]);
      if($port_number > 0) {
         return $port_number;
      } else {
         return '8080';
      }
   }
}
/*
* 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);
      if(stristr($tmp,'SSLCertificateFile')) {
         return true;
      } else {
         return false;
      }
   }
}
?>