From 55da9053f974c69bb888892714e8d0f09403734d Mon Sep 17 00:00:00 2001
From: bpssoft <bpssoft@ispconfig3>
Date: Sun, 11 Nov 2007 11:05:37 -0500
Subject: [PATCH] - Add comments to system.inc.php (PEAR) and cleanup wrong tabs - Add some functionallity to MySQL class

---
 TODO.txt                               |    3 
 interface/lib/classes/db_mysql.inc.php |   13 
 server/lib/classes/system.inc.php      | 2041 ++++++++++++++++++++++++++++++---------------------------
 3 files changed, 1,089 insertions(+), 968 deletions(-)

diff --git a/TODO.txt b/TODO.txt
index 277c754..5b409f9 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -73,6 +73,3 @@
 
 - Add, extend or modify comments in PEAR syntax so that they can be read with phpdocumentor.
 
-- Add a function to prevent brute force password attacks to the login script. E.g. by
-  logging all login attempts and allowing only 5 logins every 15 minutes.
-  Task assigned to: BPSsoft
diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php
index 2a2d640..eeb7c59 100644
--- a/interface/lib/classes/db_mysql.inc.php
+++ b/interface/lib/classes/db_mysql.inc.php
@@ -217,10 +217,21 @@
        
     public function closeConn()
     {
+    	if($this->linkId)
+    	{
+    		mysql_close($this->linkId);
+    		return true;
+    	} else { return false; }
     }
        
-    public function freeResult() 
+    public function freeResult($query) 
     {
+    	if(mysql_free_result($query))
+    	{
+    		return true;
+    	} else {
+    		return false;
+    	}
     }
        
     public function delete()
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 977ed33..f6fce77 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -30,970 +30,1083 @@
 
 class system{
 
-var $FILE = "/root/ispconfig/scripts/lib/classes/ispconfig_system.lib.php";
-var $server_id;
-var $server_conf;
-var $data;
-
-function system(){
-  global $go_info;
-  $this->server_id = $go_info["isp"]["server_id"];
-  $this->server_conf = $go_info["isp"]["server_conf"];
-  $this->server_conf["passwd_datei"] = '/etc/passwd';
-  $this->server_conf["shadow_datei"] = '/etc/shadow';
-  $this->server_conf["group_datei"] = '/etc/group';
-}
-
-function hostname(){
-  $dist = $this->server_conf["dist"];
-
-  ob_start();
-  passthru("hostname");
-  $hostname = ob_get_contents();
-  ob_end_clean();
-  $hostname = trim($hostname);
-  ob_start();
-  if(!strstr($dist, "freebsd")){
-    passthru("dnsdomainname");
-  } else {
-    passthru("domainname");
-  }
-  $domainname = ob_get_contents();
-  ob_end_clean();
-  $domainname = trim($domainname);
-  if($domainname != ""){
-    if(!strstr($hostname, $domainname)) $hostname .= ".".$domainname;
-  }
-  return $hostname;
-}
-
-function adduser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort = '*'){
-  global $app;
-  if($this->is_user($user_username)){
-    return false;
-  } else {
-          if(trim($user_username) != '') {
-                $user_datei = $this->server_conf["passwd_datei"];
-            $shadow_datei = $this->server_conf["shadow_datei"];
-            $shell = realpath($shell);
-            if(trim($passwort) == "") $passwort = '*';
-            $new_user = "\n$user_username:x:$uid:$gid:$username:$homedir:$shell\n";
-                $app->log->msg("USER: $new_user");
-            $app->file->af($user_datei, $new_user);
-            if($shadow_datei == "/etc/shadow"){
-                      $datum = time();
-                      $tage = floor($datum/86400);
-                      $new_passwd = "\n$user_username:$passwort:$tage:0:99999:7:::\n";
-            } else {
-                      $new_passwd = "\n$user_username:$passwort:$uid:$gid::0:0:$username:$homedir:$shell\n";
-            }
-            $app->file->af($shadow_datei, $new_passwd);
-
-                // TB: leere Zeilen entfernen
-                $app->file->remove_blank_lines($shadow_datei);
-                $app->file->remove_blank_lines($user_datei);
-            // TB: user Sortierung deaktiviert
-                //$this->order_users_groups();
-            if($shadow_datei != "/etc/shadow"){
-                      $app->file->af($shadow_datei, "\n");
-
-                        // TB: leere Zeilen entfernen
-                        $app->file->remove_blank_lines($shadow_datei);
-
-                      $app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
-            }
-
-            return true;
-        }
-  }
-}
-
-function updateuser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort = '*'){
-  $this->deluser($user_username);
-  $this->adduser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort);
-}
-
-function deactivateuser($user_username){
-  $passwort = str_rot13($this->getpasswd($user_username));
-  $user_attr = $this->get_user_attributes($user_username);
-  $uid = $user_attr["uid"];
-  $gid = $user_attr["gid"];
-  $username = $user_attr["name"];
-  $homedir = $user_attr["homedir"];
-  $shell = "/dev/null";
-  $this->deluser($user_username);
-  $this->adduser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort);
-}
-
-function deluser($user_username){
-  global $app;
-  if($this->is_user($user_username)){
-    $user_datei = $this->server_conf["passwd_datei"];
-    $shadow_datei = $this->server_conf["shadow_datei"];
-    $users = $app->file->rf($user_datei);
-    $lines = explode("\n", $users);
-    if(is_array($lines)){
-      $num_lines = sizeof($lines);
-      for($i=0;$i<$num_lines;$i++){
-        if(trim($lines[$i]) != ""){
-          list($f1,) = explode(":", $lines[$i]);
-          if($f1 != $user_username) $new_lines[] = $lines[$i];
-        }
-      }
-      $new_users = implode("\n", $new_lines);
-      $app->file->wf($user_datei, $new_users);
-      unset($new_lines);
-      unset($lines);
-      unset($new_users);
-    }
-    $app->file->remove_blank_lines($user_datei);
-
-    $passwds = $app->file->rf($shadow_datei);
-    $lines = explode("\n", $passwds);
-    if(is_array($lines)){
-      $num_lines = sizeof($lines);
-      for($i=0;$i<$num_lines;$i++){
-        if(trim($lines[$i]) != ""){
-          list($f1,) = explode(":", $lines[$i]);
-          if($f1 != $user_username) $new_lines[] = $lines[$i];
-        }
-      }
-      $new_passwds = implode("\n", $new_lines);
-      $app->file->wf($shadow_datei, $new_passwds);
-      unset($new_lines);
-      unset($lines);
-      unset($new_passwds);
-    }
-    $app->file->remove_blank_lines($shadow_datei);
-
-    $group_file = $app->file->rf($this->server_conf["group_datei"]);
-    $group_file_lines = explode("\n", $group_file);
-    foreach($group_file_lines as $group_file_line){
-      if(trim($group_file_line) != ""){
-        list($f1, $f2, $f3, $f4) = explode(":", $group_file_line);
-        $group_users = explode(",", str_replace(" ", "", $f4));
-        if(in_array($user_username, $group_users)){
-          $g_users = array();
-          foreach($group_users as $group_user){
-            if($group_user != $user_username) $g_users[] = $group_user;
-          }
-          $f4 = implode(",", $g_users);
-        }
-        $new_group_file[] = $f1.":".$f2.":".$f3.":".$f4;
-      }
-    }
-    $new_group_file = implode("\n", $new_group_file);
-    $app->file->wf($this->server_conf["group_datei"], $new_group_file);
-    // TB: auskommentiert
-        //$this->order_users_groups();
-
-    if($shadow_datei != "/etc/shadow"){
-      $app->file->af($shadow_datei, "\n");
-      $app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
-    }
-    return true;
-  } else {
-    return false;
-  }
-}
-
-function addgroup($group, $gid, $members = ''){
-  global $app;
-  if($this->is_group($group)){
-    return false;
-  } else {
-    $group_datei = $this->server_conf["group_datei"];
-    $shadow_datei = $this->server_conf["shadow_datei"];
-    $new_group = "\n$group:x:$gid:$members\n";
-    $app->file->af($group_datei, $new_group);
-
-        // TB: auskommentiert
-        //$this->order_users_groups();
-    if($shadow_datei != "/etc/shadow"){
-      $app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
-    }
-    return true;
-  }
-}
-
-function updategroup($group, $gid, $members = ''){
-  $this->delgroup($group);
-  $this->addgroup($group, $gid, $members);
-}
-
-function delgroup($group){
-  global $app;
-  if($this->is_group($group)){
-    $group_datei = $this->server_conf["group_datei"];
-    $shadow_datei = $this->server_conf["shadow_datei"];
-    $groups = $app->file->rf($group_datei);
-    $lines = explode("\n", $groups);
-    if(is_array($lines)){
-      $num_lines = sizeof($lines);
-      for($i=0;$i<$num_lines;$i++){
-        if(trim($lines[$i]) != ""){
-          list($f1,) = explode(":", $lines[$i]);
-          if($f1 != $group) $new_lines[] = $lines[$i];
-        }
-      }
-      $new_groups = implode("\n", $new_lines);
-      $app->file->wf($group_datei, $new_groups);
-      unset($new_lines);
-      unset($lines);
-      unset($new_groups);
-    }
-        // TB: auskommentiert
-    //$this->order_users_groups();
-    if($shadow_datei != "/etc/shadow"){
-      $app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
-    }
-    return true;
-  } else {
-    return false;
-  }
-}
-
-function order_users_groups(){
-  global $app;
-  $user_datei = $this->server_conf["passwd_datei"];
-  $shadow_datei = $this->server_conf["shadow_datei"];
-  $group_datei = $this->server_conf["group_datei"];
-
-  $groups = $app->file->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);
-        $arr[$f3] = $line;
-      }
-    }
-  }
-  ksort($arr);
-  reset($arr);
-  if($shadow_datei != "/etc/shadow"){
-    $app->file->wf($group_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0)."\n");
-  }else {
-    $app->file->wf($group_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0));
-  }
-  unset($arr);
-
-  $users = $app->file->no_comments($user_datei);
-  $lines = explode("\n", $users);
-  if(is_array($lines)){
-    foreach($lines as $line){
-      if(trim($line) != ""){
-        list($f1, $f2, $f3,) = explode(":", $line);
-        if($f1 != "toor"){
-          $arr[$f3] = $line;
-        } else {
-          $arr[70000] = $line;
-        }
-      }
-    }
-  }
-  ksort($arr);
-  reset($arr);
-  $app->file->wf($user_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0));
-  unset($arr);
-
-  $passwds = $app->file->no_comments($shadow_datei);
-  $lines = explode("\n", $passwds);
-  if(is_array($lines)){
-    foreach($lines as $line){
-      if(trim($line) != ""){
-        list($f1, $f2, $f3,) = explode(":", $line);
-        if($f1 != "toor"){
-          $uid = $this->getuid($f1);
-          if(!is_bool($uid)) $arr[$uid] = $line;
-        } else {
-          $arr[70000] = $line;
-        }
-      }
-    }
-  }
-  ksort($arr);
-  reset($arr);
-  $app->file->wf($shadow_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0));
-  unset($arr);
-}
-
-function find_uid_gid($min, $max){
-  global $app;
-  if($min < $max && $min >= 0 && $max >= 0 && $min <= 65536 && $max <= 65536 && is_int($min) && is_int($max)){
-    for($i=$min;$i<=$max;$i++){
-      $uid_arr[$i] = $gid_arr[$i] = 1;
-    }
-    $user_datei = $this->server_conf["passwd_datei"];
-    $group_datei = $this->server_conf["group_datei"];
-
-    $users = $app->file->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($f3 >= $min && $f3 <= $max) unset($uid_arr[$f3]);
-        }
-      }
-      if(!empty($uid_arr)){
-        foreach($uid_arr as $key => $val){
-          $uids[] = $key;
-        }
-        $min_uid = min($uids);
-        unset($uid_arr);
-      } else {
-        return false;
-      }
-    }
-
-    $groups = $app->file->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($f3 >= $min && $f3 <= $max) unset($gid_arr[$f3]);
-        }
-      }
-      if(!empty($gid_arr)){
-        foreach($gid_arr as $key => $val){
-          $gids[] = $key;
-        }
-        $min_gid = min($gids);
-        unset($gid_arr);
-      } else {
-        return false;
-      }
-    }
-
-    $result = array_intersect($uids, $gids);
-    $new_id = (max($result));
-    unset($uids);
-    unset($gids);
-    unset($result);
-    if($new_id <= $max){
-      return $new_id;
-    } else {
-      return false;
-    }
-  } else {
-    return false;
-  }
-}
-
-function is_user($user){
-  global $app;
-  $user_datei = $this->server_conf["passwd_datei"];
-  $users = $app->file->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 $app;
-  $group_datei = $this->server_conf["group_datei"];
-  $groups = $app->file->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 root_group(){
-  global $app;
-  $group_datei = $this->server_conf["group_datei"];
-  $groups = $app->file->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($f3 == 0) return $f1;
-      }
-    }
-  }
-  return false;
-}
-
-function get_user_groups($username){
-  global $app;
-  $user_groups = array();
-  $group_datei = $this->server_conf["group_datei"];
-  $groups = $app->file->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(intval($f3) < intval($this->server_conf["groupid_von"]) && trim($f1) != 'users'){
-          $tmp_group_users = explode(',', str_replace(' ', '', $f4));
-          if(in_array($username, $tmp_group_users) && trim($f1) != '') $user_groups[] = $f1;
-          unset($tmp_group_users);
-        }
-      }
-    }
-  }
-  if(!empty($user_groups)) return implode(',', $user_groups);
-  return '';
-}
-
-function getpasswd($user){
-  global $app;
-  if($this->is_user($user)){
-    $shadow_datei = $this->server_conf["shadow_datei"];
-    $passwds = $app->file->no_comments($shadow_datei);
-    $lines = explode("\n", $passwds);
-    if(is_array($lines)){
-      foreach($lines as $line){
-        if(trim($line) != ""){
-          list($f1, $f2,) = explode(":", $line);
-          if($f1 == $user) return $f2;
-        }
-      }
-    }
-  } else {
-    return false;
-  }
-}
-
-function getuid($user){
-  global $app;
-  if($this->is_user($user)){
-    $user_datei = $this->server_conf["passwd_datei"];
-    $users = $app->file->no_comments($user_datei);
-    $lines = explode("\n", $users);
-    if(is_array($lines)){
-      foreach($lines as $line){
-        if(trim($line) != ""){
-          list($f1, $f2, $f3,) = explode(":", $line);
-          if($f1 == $user) return $f3;
-        }
-      }
-    }
-  } else {
-    return false;
-  }
-}
-
-function get_user_attributes($user){
-  global $app;
-  if($this->is_user($user)){
-    $user_datei = $this->server_conf["passwd_datei"];
-    $users = $app->file->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){
-            $user_attr["username"] = $f1;
-            $user_attr["x"] = $f2;
-            $user_attr["uid"] = $f3;
-            $user_attr["gid"] = $f4;
-            $user_attr["name"] = $f5;
-            $user_attr["homedir"] = $f6;
-            $user_attr["shell"] = $f7;
-            return $user_attr;
-          }
-        }
-      }
-    }
-  } else {
-    return false;
-  }
-}
-
-function chown($file, $owner, $group = ''){
-  $owner_change = @chown($file, $owner);
-  if($group != ""){
-    $group_change = @chgrp($file, $group);
-  } else {
-    $group_change = 1;
-  }
-  if($owner_change && $group_change){
-    return true;
-  } else {
-    return false;
-  }
-}
-
-function add_user_to_group($group, $user = 'admispconfig'){
-  global $app;
-  $group_file = $app->file->rf($this->server_conf["group_datei"]);
-  $group_file_lines = explode("\n", $group_file);
-  foreach($group_file_lines as $group_file_line){
-    list($group_name,$group_x,$group_id,$group_users) = explode(":",$group_file_line);
-    if($group_name == $group){
-      $group_users = explode(",", str_replace(" ", "", $group_users));
-      if(!in_array($user, $group_users)){
-        $group_users[] = $user;
-      }
-      $group_users = implode(",", $group_users);
-      if(substr($group_users,0,1) == ",") $group_users = substr($group_users,1);
-      $group_file_line = $group_name.":".$group_x.":".$group_id.":".$group_users;
-    }
-    $new_group_file[] = $group_file_line;
-  }
-  $new_group_file = implode("\n", $new_group_file);
-  $app->file->wf($this->server_conf["group_datei"], $new_group_file);
-  $app->file->remove_blank_lines($this->server_conf["group_datei"]);
-  if($this->server_conf["shadow_datei"] != "/etc/shadow"){
-    $app->log->caselog("pwd_mkdb ".$this->server_conf["shadow_datei"]." &> /dev/null", $this->FILE, __LINE__);
-  }
-}
-
-function usermod($user, $groups){
-  global $app;
-  if($this->is_user($user)){
-    $groups = explode(",", str_replace(" ", "", $groups));
-    $group_file = $app->file->rf($this->server_conf["group_datei"]);
-    $group_file_lines = explode("\n", $group_file);
-    foreach($group_file_lines as $group_file_line){
-      if(trim($group_file_line) != ""){
-        list($f1, $f2, $f3, $f4) = explode(":", $group_file_line);
-        $group_users = explode(",", str_replace(" ", "", $f4));
-        if(!in_array($f1, $groups)){
-          if(in_array($user, $group_users)){
-            $g_users = array();
-            foreach($group_users as $group_user){
-              if($group_user != $user) $g_users[] = $group_user;
-            }
-            $f4 = implode(",", $g_users);
-          }
-        } else {
-          if(!in_array($user, $group_users)){
-            if(trim($group_users[0]) == "") unset($group_users);
-            $group_users[] = $user;
-          }
-          $f4 = implode(",", $group_users);
-        }
-        $new_group_file[] = $f1.":".$f2.":".$f3.":".$f4;
-      }
-    }
-    $new_group_file = implode("\n", $new_group_file);
-    $app->file->wf($this->server_conf["group_datei"], $new_group_file);
-    $app->file->remove_blank_lines($this->server_conf["group_datei"]);
-    if($this->server_conf["shadow_datei"] != "/etc/shadow"){
-      $app->log->caselog("pwd_mkdb ".$this->server_conf["shadow_datei"]." &> /dev/null", $this->FILE, __LINE__);
-    }
-    return true;
-  } else {
-    return false;
-  }
-}
-
-function rc_edit($service, $rl, $action){
-  // $action = "on|off";
-  global $app;
-  $dist_init_scripts = $app->system->server_conf["dist_init_scripts"];
-  $dist_runlevel = $app->system->server_conf["dist_runlevel"];
-  $dist = $app->system->server_conf["dist"];
-  if(trim($dist_runlevel) == ""){ // falls es keine runlevel gibt (FreeBSD)
-    if($action == "on"){
-      @symlink($dist_init_scripts."/".$service, $dist_init_scripts."/".$service.".sh");
-    }
-    if($action == "off"){
-      if(is_link($dist_init_scripts."/".$service.".sh")){
-        unlink($dist_init_scripts."/".$service.".sh");
-      } else {
-        exec("mv -f ".$dist_init_scripts."/".$service.".sh ".$dist_init_scripts."/".$service." &> /dev/null");
-      }
-    }
-  } else { // Linux
-    if(substr($dist, 0,4) == 'suse'){
-      if($action == "on"){
-        exec("chkconfig --add $service &> /dev/null");
-      }
-      if($action == "off"){
-        exec("chkconfig --del $service &> /dev/null");
-      }
-    } else {
-      $runlevels = explode(",", $rl);
-      foreach($runlevels as $runlevel){
-        $runlevel = trim($runlevel);
-        if($runlevel != "" && is_dir($dist_runlevel."/rc".$runlevel.".d")){
-          $handle=opendir($dist_runlevel."/rc".$runlevel.".d");
-          while($file = readdir($handle)){
-            if($file != "." && $file != ".."){
-              $target = @readlink($dist_runlevel."/rc".$runlevel.".d/".$file);
-              if(strstr($file, $service) && strstr($target, $service) && substr($file,0,1) == "S") $ln_arr[$runlevel][] = $dist_runlevel."/rc".$runlevel.".d/".$file;
-            }
-          }
-          closedir($handle);
-        }
-        if($action == "on"){
-          if(!is_array($ln_arr[$runlevel])) @symlink($dist_init_scripts."/".$service, $dist_runlevel."/rc".$runlevel.".d/S99".$service);
-        }
-        if($action == "off"){
-          if(is_array($ln_arr[$runlevel])){
-            foreach($ln_arr[$runlevel] as $link){
-              unlink($link);
-            }
-          }
-        }
-      }
-    }
-  }
-}
-
-function grep($content, $string, $params = ''){
-  global $app;
-  // params: i, v, w
-  $content = $app->file->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(!$app->string->is_word($string, $line, 'i')) $find[] = $line;
-        } else {
-          if($app->string->is_word($string, $line, 'i')) $find[] = $line;
-        }
-      } else {
-        if(strstr($params, 'v')){
-          if(!$app->string->is_word($string, $line)) $find[] = $line;
-        } else {
-          if($app->string->is_word($string, $line)) $find[] = $line;
-        }
-      }
-    }
-  }
-  if(is_array($find)){
-    $ret_val = implode("\n", $find);
-    if(substr($ret_val,-1) != "\n") $ret_val .= "\n";
-    $find = NULL;
-    return $ret_val;
-  } else {
-    return false;
-  }
-}
-
-function cut($content, $field, $delimiter = ':'){
-  global $app;
-  $content = $app->file->unix_nl($content);
-  $lines = explode("\n", $content);
-  foreach($lines as $line){
-    $elms = explode($delimiter, $line);
-    $find[] = $elms[($field-1)];
-  }
-  if(is_array($find)){
-    $ret_val = implode("\n", $find);
-    if(substr($ret_val,-1) != "\n") $ret_val .= "\n";
-    $find = NULL;
-    return $ret_val;
-  } else {
-    return false;
-  }
-}
-
-function cat($file){
-  global $app;
-  return $app->file->rf($file);
-}
-
-function daemon_init($daemon, $action){
-  // $action = start|stop|restart|reload
-  global $app;
-  $dist = $this->server_conf["dist"];
-  $dist_init_scripts = $this->server_conf["dist_init_scripts"];
-  if(!strstr($dist, "freebsd")){
-    $app->log->caselog("$dist_init_scripts/$daemon $action &> /dev/null", $this->FILE, __LINE__);
-  } else {
-    if(is_file($dist_init_scripts."/".$daemon.".sh") || is_link($dist_init_scripts."/".$daemon.".sh")){
-      if($action == "start" || $action == "stop"){
-        $app->log->caselog($dist_init_scripts."/".$daemon.".sh ".$action." &> /dev/null", $this->FILE, __LINE__);
-      } else {
-        $app->log->caselog($dist_init_scripts."/".$daemon.".sh stop &> /dev/null", $this->FILE, __LINE__);
-        sleep(3);
-        $app->log->caselog($dist_init_scripts."/".$daemon.".sh start &> /dev/null", $this->FILE, __LINE__);
-      }
-    } else {
-      if(is_file($dist_init_scripts."/".$daemon) || is_link($dist_init_scripts."/".$daemon)){
-        if($action == "start" || $action == "stop"){
-          $app->log->caselog($dist_init_scripts."/".$daemon." ".$action." &> /dev/null", $this->FILE, __LINE__);
-        } else {
-          $app->log->caselog($dist_init_scripts."/".$daemon." stop &> /dev/null", $this->FILE, __LINE__);
-          sleep(3);
-          $app->log->caselog($dist_init_scripts."/".$daemon." start &> /dev/null", $this->FILE, __LINE__);
-        }
-      } else {
-        if(is_file("/etc/rc.d/".$daemon) || is_link("/etc/rc.d/".$daemon)){
-          if($action == "start" || $action == "stop"){
-            $app->log->caselog("/etc/rc.d/".$daemon." ".$action." &> /dev/null", $this->FILE, __LINE__);
-          } else {
-            $app->log->caselog("/etc/rc.d/".$daemon." stop &> /dev/null", $this->FILE, __LINE__);
-            sleep(3);
-            $app->log->caselog("/etc/rc.d/".$daemon." start &> /dev/null", $this->FILE, __LINE__);
-          }
-        }
-      }
-    }
-  }
-}
-
-function netmask($netmask){
-  list($f1,$f2,$f3,$f4) = explode(".", trim($netmask));
-  $bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT);
-  $parts = explode("0", $bin);
-  $bin = str_pad($parts[0], 32, "0", STR_PAD_RIGHT);
-  $bin = wordwrap($bin, 8, ".", 1);
-  list($f1,$f2,$f3,$f4) = explode(".", trim($bin));
-  return bindec($f1).".".bindec($f2).".".bindec($f3).".".bindec($f4);
-}
-
-function binary_netmask($netmask){
-  list($f1,$f2,$f3,$f4) = explode(".", trim($netmask));
-  $bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT);
-  $parts = explode("0", $bin);
-  return substr_count($parts[0], "1");
-}
-
-function network($ip, $netmask){
-  $netmask = $this->netmask($netmask);
-  list($f1,$f2,$f3,$f4) = explode(".", $netmask);
-  $netmask_bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT);
-  list($f1,$f2,$f3,$f4) = explode(".", $ip);
-  $ip_bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT);
-  for($i=0;$i<32;$i++){
-    $network_bin .= substr($netmask_bin,$i,1) * substr($ip_bin,$i,1);
-  }
-  $network_bin = wordwrap($network_bin, 8, ".", 1);
-  list($f1,$f2,$f3,$f4) = explode(".", trim($network_bin));
-  return bindec($f1).".".bindec($f2).".".bindec($f3).".".bindec($f4);
-}
-
-function broadcast($ip, $netmask){
-  $netmask = $this->netmask($netmask);
-  $binary_netmask = $this->binary_netmask($netmask);
-  list($f1,$f2,$f3,$f4) = explode(".", $ip);
-  $ip_bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT);
-  $broadcast_bin = str_pad(substr($ip_bin, 0, $binary_netmask),32,"1",STR_PAD_RIGHT);
-  $broadcast_bin = wordwrap($broadcast_bin, 8, ".", 1);
-  list($f1,$f2,$f3,$f4) = explode(".", trim($broadcast_bin));
-  return bindec($f1).".".bindec($f2).".".bindec($f3).".".bindec($f4);
-}
-
-function network_info(){
-  $dist = $this->server_conf["dist"];
-  ob_start();
-  passthru("ifconfig");
-  $output = ob_get_contents();
-  ob_end_clean();
-  $lines = explode("\n", $output);
-  foreach($lines as $line){
-    $elms = explode(" ", $line);
-    if(trim($elms[0]) != "" && substr($elms[0],0,1) != "\t"){
-      $elms[0] = trim($elms[0]);
-      if(strstr($dist, "freebsd")) $elms[0] = substr($elms[0],0,-1);
-      $interfaces[] = $elms[0];
-    }
-  }
-  if(!empty($interfaces)){
-    foreach($interfaces as $interface){
-      ob_start();
-      if(!strstr($dist, "freebsd")){
-        passthru("ifconfig ".$interface." | grep -iw 'inet' | cut -f2 -d: | cut -f1 -d' '");
-      }else {
-        passthru("ifconfig ".$interface." | grep -iw 'inet' | grep -iv 'inet6' | cut -f2 -d' '");
-      }
-      $output = trim(ob_get_contents());
-      ob_end_clean();
-      if($output != ""){
-        $ifconfig["INTERFACE"][$interface] = $output;
-        $ifconfig["IP"][$output] = $interface;
-      }
-    }
-    if(!empty($ifconfig)){
-      return $ifconfig;
-    } else {
-      return false;
-    }
-  } else {
-    return false;
-  }
-}
-
-function network_config(){
-  $ifconfig = $this->network_info();
-  if($ifconfig){
-    $main_interface = $ifconfig["IP"][$this->server_conf["server_ip"]];
-    if(strstr($main_interface, ":")){
-      $parts = explode(":", $main_interface);
-      $main_interface = trim($parts[0]);
-    }
-    if($main_interface != ""){
-      $ips = $this->data["isp_server_ip"];
-      if(!empty($ips)){
-        foreach($ips as $ip){
-          if(!isset($ifconfig["IP"][$ip["server_ip"]])){
-            $to_set[] = $ip["server_ip"];
-          } else {
-            unset($ifconfig["IP"][$ip["server_ip"]]);
-          }
-        }
-        if(!empty($ifconfig["IP"])){
-          foreach($ifconfig["IP"] as $key => $val){
-            if(!strstr($val, "lo") && !strstr($val, "lp") && strstr($val, $main_interface)){
-              exec("ifconfig ".$val." down &> /dev/null");
-              unset($ifconfig["INTERFACE"][$val]);
-            }
-          }
-        }
-        if(!empty($to_set)){
-         foreach($to_set as $to){
-           $i = 0;
-           while($i >= 0){
-             if(isset($ifconfig["INTERFACE"][$main_interface.":".$i])){
-               $i++;
-             } else {
-               $new_interface = $main_interface.":".$i;
-               $i = -1;
-             }
-           }
-           exec("ifconfig ".$new_interface." ".$to." netmask ".$this->server_conf["server_netzmaske"]." up &> /dev/null");
-           $ifconfig["INTERFACE"][$new_interface] = $to;
-          }
-        }
-      }
-    }
-  }
-}
-
-function quota_dirs(){
-  global $app;
-  $content = $app->file->unix_nl($app->file->no_comments("/etc/fstab"));
-  $lines = explode("\n", $content);
-  foreach($lines as $line){
-    $line = trim($line);
-    if($line != ""){
-      $elms = explode("\t", $line);
-      foreach($elms as $elm){
-        if(trim($elm) != "") $f[] = $elm;
-      }
-      if(!empty($f) && stristr($f[3], "userquota") && stristr($f[3], "groupquota")){
-        $q_dirs[] = trim($f[1]);
-      }
-      unset($f);
-    }
-  }
-  if(!empty($q_dirs)){
-    return $q_dirs;
-  } else {
-    return false;
-  }
-}
-
-function make_trashscan(){
-  global $app;
-  //trashscan erstellen
-  // Template �ffnen
-  $app->tpl->clear_all();
-  $app->tpl->define( array(table    => "trashscan.master"));
-
-  if(!isset($this->server_conf["virusadmin"]) || trim($this->server_conf["virusadmin"]) == "") $this->server_conf["virusadmin"] = "admispconfig@localhost";
-  if(substr($this->server_conf["virusadmin"],0,1) == "#"){
-    $notify = "no";
-  } else {
-    $notify = "yes";
-  }
-
-  // Variablen zuweisen
-  $app->tpl->assign( array(VIRUSADMIN => $this->server_conf["virusadmin"],
-                           NOTIFICATION => $notify));
-
-  $app->tpl->parse(TABLE, table);
-
-  $trashscan_text = $app->tpl->fetch();
-
-  $datei = "/home/admispconfig/ispconfig/tools/clamav/bin/trashscan";
-  $app->file->wf($datei, $trashscan_text);
-
-  exec("chown admispconfig:admispconfig $datei &> /dev/null");
-  exec("chmod 755 $datei");
-}
-
-function get_time(){
-  $addr = "http://www.ispconfig.org/";
-  $timeout = 1;
-  $url_parts = parse_url($addr);
-  $path = $url_parts["path"];
-  $port = 80;
-  $urlHandle = @fsockopen($url_parts["host"], $port, $errno, $errstr, $timeout);
-  if ($urlHandle){
-    socket_set_timeout($urlHandle, $timeout);
-
-    $urlString = "GET $path HTTP/1.0\r\nHost: ".$url_parts["host"]."\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
-    if ($user) $urlString .= "Authorization: Basic ".base64_encode("$user:$pass")."\r\n";
-    $urlString .= "\r\n";
-    fputs($urlHandle, $urlString);
-
-    $month["Jan"] = "01";
-    $month["Feb"] = "02";
-    $month["Mar"] = "03";
-    $month["Apr"] = "04";
-    $month["May"] = "05";
-    $month["Jun"] = "06";
-    $month["Jul"] = "07";
-    $month["Aug"] = "08";
-    $month["Sep"] = "09";
-    $month["Oct"] = "10";
-    $month["Nov"] = "11";
-    $month["Dec"] = "12";
-    $c = 0;
-    $l = 0;
-    $startzeit = time();
-    while(!feof($urlHandle) && $c < 2 && $l == 0){
-      $line = trim(fgets($urlHandle,128));
-      $response .= $line;
-      $c = time() - $startzeit;
-      if($line == "" || substr($line, 0, 5) == "Date:") $l += 1; // nur den Header auslesen
-      if(substr($line, 0, 5) == "Date:"){
-        $parts = explode(" ", $line);
-        $tag = $parts[2];
-        $monat = $month[$parts[3]];
-        $jahr = $parts[4];
-        list($stunde, $minute, $sekunde) = explode(":", $parts[5]);
-        $timestamp = mktime($stunde,$minute,$sekunde,$monat,$tag,$jahr);
-      }
-    }
-
-    @fclose($urlHandle);
-
-    return $timestamp;
-  } else {
-    @fclose($urlHandle);
-    return false;
-  }
-}
+	var $FILE = "/root/ispconfig/scripts/lib/classes/ispconfig_system.lib.php";
+	var $server_id;
+	var $server_conf;
+	var $data;
+	
+	/**
+	 * Construct for this class
+	 *
+	 * @return system
+	 */
+	public function system(){
+		global $go_info;
+	  	$this->server_id = $go_info["isp"]["server_id"];
+	  	$this->server_conf = $go_info["isp"]["server_conf"];
+	  	$this->server_conf["passwd_datei"] = '/etc/passwd';
+	  	$this->server_conf["shadow_datei"] = '/etc/shadow';
+	  	$this->server_conf["group_datei"] = '/etc/group';
+	}
+	
+	/**
+	 * Get the hostname from the server
+	 *
+	 * @return string
+	 */
+	public function hostname(){
+		$dist = $this->server_conf["dist"];
+	
+	 	ob_start();
+	  	passthru("hostname");
+	  	$hostname = ob_get_contents();
+	  	ob_end_clean();
+		$hostname = trim($hostname);
+	  	ob_start();
+	  	if(!strstr($dist, "freebsd")){
+	    	passthru("dnsdomainname");
+	  	} else {
+	    	passthru("domainname");
+	  	}
+	  	$domainname = ob_get_contents();
+	  	ob_end_clean();
+	  	$domainname = trim($domainname);
+	  	if($domainname != ""){
+		    if(!strstr($hostname, $domainname)) $hostname .= ".".$domainname;
+	  	}
+	  	return $hostname;
+	}
+	
+	/**
+	 * Add an user to the system
+	 * 
+	 */
+	public function adduser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort = '*'){
+		global $app;
+	  	if($this->is_user($user_username)){
+	    	return false;
+	  	} else {
+	    	if(trim($user_username) != '') {
+	        	$user_datei = $this->server_conf["passwd_datei"];
+	            $shadow_datei = $this->server_conf["shadow_datei"];
+	            $shell = realpath($shell);
+	            if(trim($passwort) == "") $passwort = '*';
+	            $new_user = "\n$user_username:x:$uid:$gid:$username:$homedir:$shell\n";
+	            $app->log->msg("USER: $new_user");
+	            $app->file->af($user_datei, $new_user);
+	            if($shadow_datei == "/etc/shadow"){
+	            	$datum = time();
+	                $tage = floor($datum/86400);
+	                $new_passwd = "\n$user_username:$passwort:$tage:0:99999:7:::\n";
+	            } else {
+	                $new_passwd = "\n$user_username:$passwort:$uid:$gid::0:0:$username:$homedir:$shell\n";
+	            }
+	            $app->file->af($shadow_datei, $new_passwd);
+				// TB: leere Zeilen entfernen
+	            $app->file->remove_blank_lines($shadow_datei);
+	            $app->file->remove_blank_lines($user_datei);
+	            // TB: user Sortierung deaktiviert
+	            //$this->order_users_groups();
+	            if($shadow_datei != "/etc/shadow"){
+	            	$app->file->af($shadow_datei, "\n");
+					// TB: leere Zeilen entfernen
+	                $app->file->remove_blank_lines($shadow_datei);
+					$app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
+	            }
+	            return true;
+	        }
+	  }
+	}
+	
+	/**
+	 * Update users when someone edit it
+	 *
+	 */
+	function updateuser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort = '*'){
+		//* First delete the users
+		$this->deluser($user_username);
+		//* Add the user again
+	  	$this->adduser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort);
+	}
+	
+	/**
+	 * Lock the user
+	 *
+	 */
+	function deactivateuser($user_username){
+		$passwort = str_rot13($this->getpasswd($user_username));
+	  	$user_attr = $this->get_user_attributes($user_username);
+	  	$uid = $user_attr["uid"];
+	  	$gid = $user_attr["gid"];
+	  	$username = $user_attr["name"];
+	  	$homedir = $user_attr["homedir"];
+	  	$shell = "/dev/null";
+	  	$this->deluser($user_username);
+	  	$this->adduser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort);
+	}
+	/**
+	 * Delete a user from the system
+	 *
+	 */
+	function deluser($user_username){
+		global $app;
+	  	if($this->is_user($user_username)){
+	    	$user_datei = $this->server_conf["passwd_datei"];
+	    	$shadow_datei = $this->server_conf["shadow_datei"];
+	    	$users = $app->file->rf($user_datei);
+	    	$lines = explode("\n", $users);
+	    	if(is_array($lines)){
+	      		$num_lines = sizeof($lines);
+	      		for($i=0;$i<$num_lines;$i++){
+	        		if(trim($lines[$i]) != ""){
+	          			list($f1,) = explode(":", $lines[$i]);
+	          			if($f1 != $user_username) $new_lines[] = $lines[$i];
+	        		}
+	      		}
+	      		$new_users = implode("\n", $new_lines);
+	      		$app->file->wf($user_datei, $new_users);
+	      		unset($new_lines);
+	      		unset($lines);
+	      		unset($new_users);
+	    	}
+	    	$app->file->remove_blank_lines($user_datei);
+	
+	    	$passwds = $app->file->rf($shadow_datei);
+	    	$lines = explode("\n", $passwds);
+	    	if(is_array($lines)){
+	      		$num_lines = sizeof($lines);
+	      		for($i=0;$i<$num_lines;$i++){
+	        		if(trim($lines[$i]) != ""){
+	          			list($f1,) = explode(":", $lines[$i]);
+	          			if($f1 != $user_username) $new_lines[] = $lines[$i];
+	        		}
+	      		}
+	      		$new_passwds = implode("\n", $new_lines);
+	      		$app->file->wf($shadow_datei, $new_passwds);
+	      		unset($new_lines);
+	      		unset($lines);
+	      		unset($new_passwds);
+	    	}
+	    	$app->file->remove_blank_lines($shadow_datei);
+	
+	    	$group_file = $app->file->rf($this->server_conf["group_datei"]);
+	    	$group_file_lines = explode("\n", $group_file);
+	    	foreach($group_file_lines as $group_file_line){
+	      		if(trim($group_file_line) != ""){
+	        		list($f1, $f2, $f3, $f4) = explode(":", $group_file_line);
+	        		$group_users = explode(",", str_replace(" ", "", $f4));
+	        		if(in_array($user_username, $group_users)){
+	          			$g_users = array();
+	          			foreach($group_users as $group_user){
+	            			if($group_user != $user_username) $g_users[] = $group_user;
+	          			}
+	          			$f4 = implode(",", $g_users);
+	        		}
+	        		$new_group_file[] = $f1.":".$f2.":".$f3.":".$f4;
+	      		}
+	    	}
+	    	$new_group_file = implode("\n", $new_group_file);
+	    	$app->file->wf($this->server_conf["group_datei"], $new_group_file);
+	    	// TB: auskommentiert
+	        //$this->order_users_groups();
+	
+	    	if($shadow_datei != "/etc/shadow"){
+	      		$app->file->af($shadow_datei, "\n");
+	      		$app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
+	    	}
+	    	return true;
+	  	} else {
+	    	return false;
+	  	}
+	}
+	
+	/**
+	 * Add a usergroup to the system
+	 *
+	 */
+	function addgroup($group, $gid, $members = ''){
+		global $app;
+	  	if($this->is_group($group)){
+		    return false;
+	  	} else {
+	    	$group_datei = $this->server_conf["group_datei"];
+	    	$shadow_datei = $this->server_conf["shadow_datei"];
+	    	$new_group = "\n$group:x:$gid:$members\n";
+	    	$app->file->af($group_datei, $new_group);
+	
+	        // TB: auskommentiert
+	        //$this->order_users_groups();
+	    	if($shadow_datei != "/etc/shadow"){
+	      		$app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
+	    	}
+	    	return true;
+	  	}
+	}
+	
+	/**
+	 * Update usersgroup in way to delete and add it again
+	 *
+	 */
+	function updategroup($group, $gid, $members = ''){
+		$this->delgroup($group);
+	  	$this->addgroup($group, $gid, $members);
+	}
+	
+	/**
+	 * Delete a usergroup from the system
+	 *
+	 */
+	function delgroup($group){
+		global $app;
+	  	if($this->is_group($group)){
+	    	$group_datei = $this->server_conf["group_datei"];
+	    	$shadow_datei = $this->server_conf["shadow_datei"];
+	    	$groups = $app->file->rf($group_datei);
+	    	$lines = explode("\n", $groups);
+	    	if(is_array($lines)){
+	      		$num_lines = sizeof($lines);
+	      		for($i=0;$i<$num_lines;$i++){
+	        		if(trim($lines[$i]) != ""){
+	          			list($f1,) = explode(":", $lines[$i]);
+	          			if($f1 != $group) $new_lines[] = $lines[$i];
+	        		}
+	      		}
+	      		$new_groups = implode("\n", $new_lines);
+	      		$app->file->wf($group_datei, $new_groups);
+	      		unset($new_lines);
+	      		unset($lines);
+	      		unset($new_groups);
+	    	}
+	        // TB: auskommentiert
+	    	//$this->order_users_groups();
+	    	if($shadow_datei != "/etc/shadow"){
+	      		$app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
+	    	}
+	    	return true;
+	  	} else {
+	    	return false;
+	  	}
+	}
+	/**
+	 * Order usergroups
+	 *
+	 */
+	function order_users_groups(){
+		global $app;
+	  	$user_datei = $this->server_conf["passwd_datei"];
+	  	$shadow_datei = $this->server_conf["shadow_datei"];
+	  	$group_datei = $this->server_conf["group_datei"];
+	
+	  	$groups = $app->file->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);
+	        		$arr[$f3] = $line;
+	      		}
+	    	}
+	  	}
+	  	ksort($arr);
+	  	reset($arr);
+	  	if($shadow_datei != "/etc/shadow"){
+	    	$app->file->wf($group_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0)."\n");
+	  	}else {
+		    $app->file->wf($group_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0));
+	  	}
+	  	unset($arr);
+	
+	  	$users = $app->file->no_comments($user_datei);
+	  	$lines = explode("\n", $users);
+	  	if(is_array($lines)){
+		    foreach($lines as $line){
+	      		if(trim($line) != ""){
+	        		list($f1, $f2, $f3,) = explode(":", $line);
+	        		if($f1 != "toor"){
+	          			$arr[$f3] = $line;
+	        		} else {
+	          			$arr[70000] = $line;
+	        		}
+	      		}
+	    	}
+	  	}
+	  	ksort($arr);
+	  	reset($arr);
+	  	$app->file->wf($user_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0));
+	  	unset($arr);
+	
+	  	$passwds = $app->file->no_comments($shadow_datei);
+	  	$lines = explode("\n", $passwds);
+	  	if(is_array($lines)){
+		    foreach($lines as $line){
+	    		if(trim($line) != ""){
+	        		list($f1, $f2, $f3,) = explode(":", $line);
+	        		if($f1 != "toor"){
+	          			$uid = $this->getuid($f1);
+	          			if(!is_bool($uid)) $arr[$uid] = $line;
+	        		} else {
+	          			$arr[70000] = $line;
+	        		}
+	      		}
+	    	}
+	  	}
+	  	ksort($arr);
+	  	reset($arr);
+	  	$app->file->wf($shadow_datei, $app->file->remove_blank_lines(implode("\n", $arr), 0));
+	  	unset($arr);
+	}
+	
+	/**
+	 * Find a user / group id
+	 *
+	 */
+	function find_uid_gid($min, $max){
+		global $app;
+	  	if($min < $max && $min >= 0 && $max >= 0 && $min <= 65536 && $max <= 65536 && is_int($min) && is_int($max)){
+	    	for($i=$min;$i<=$max;$i++){
+	      		$uid_arr[$i] = $gid_arr[$i] = 1;
+	    	}
+	    	$user_datei = $this->server_conf["passwd_datei"];
+	    	$group_datei = $this->server_conf["group_datei"];
+	
+	    	$users = $app->file->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($f3 >= $min && $f3 <= $max) unset($uid_arr[$f3]);
+	        		}
+	      		}
+	      		if(!empty($uid_arr)){
+	        		foreach($uid_arr as $key => $val){
+	          			$uids[] = $key;
+	        		}
+	        		$min_uid = min($uids);
+	        		unset($uid_arr);
+	      		} else {
+	        		return false;
+	      		}
+	    	}
+	
+	    	$groups = $app->file->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($f3 >= $min && $f3 <= $max) unset($gid_arr[$f3]);
+	        		}
+	      		}
+	      		if(!empty($gid_arr)){
+	        		foreach($gid_arr as $key => $val){
+	          			$gids[] = $key;
+	        		}
+	        		$min_gid = min($gids);
+	        		unset($gid_arr);
+	      		} else {
+	        		return false;
+	      		}
+	    	}
+	
+	    	$result = array_intersect($uids, $gids);
+	    	$new_id = (max($result));
+	    	unset($uids);
+	    	unset($gids);
+	    	unset($result);
+	    	if($new_id <= $max){
+	      		return $new_id;
+	    	} else {
+	      		return false;
+	    	}
+	  	} else {
+	    	return false;
+	  	}
+	}
+	
+	/**
+	 * Check if the users is really a user into the system
+	 *
+	 */
+	function is_user($user){
+		global $app;
+	  	$user_datei = $this->server_conf["passwd_datei"];
+	  	$users = $app->file->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;
+	}
+	
+	/**
+	 * Check if the group is on this system
+	 *
+	 */
+	function is_group($group){
+		global $app;
+	  	$group_datei = $this->server_conf["group_datei"];
+	  	$groups = $app->file->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 root_group(){
+		global $app;
+	  	$group_datei = $this->server_conf["group_datei"];
+	  	$groups = $app->file->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($f3 == 0) return $f1;
+	      		}
+	    	}
+	  	}
+	  	return false;
+	}
+	
+	/**
+	 * Get the groups of an user
+	 *
+	 */
+	function get_user_groups($username){
+		global $app;
+	  	$user_groups = array();
+	  	$group_datei = $this->server_conf["group_datei"];
+	  	$groups = $app->file->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(intval($f3) < intval($this->server_conf["groupid_von"]) && trim($f1) != 'users'){
+	          			$tmp_group_users = explode(',', str_replace(' ', '', $f4));
+	          			if(in_array($username, $tmp_group_users) && trim($f1) != '') $user_groups[] = $f1;
+	          			unset($tmp_group_users);
+	        		}
+	      		}
+	    	}
+	  	}
+	  	if(!empty($user_groups)) return implode(',', $user_groups);
+	  	return '';
+	}
+	
+	/**
+	 * Get a user password
+	 *
+	 */
+	function getpasswd($user){
+		global $app;
+	  	if($this->is_user($user)){
+		    $shadow_datei = $this->server_conf["shadow_datei"];
+	    	$passwds = $app->file->no_comments($shadow_datei);
+	    	$lines = explode("\n", $passwds);
+	    	if(is_array($lines)){
+	      		foreach($lines as $line){
+	        		if(trim($line) != ""){
+	          			list($f1, $f2,) = explode(":", $line);
+	          			if($f1 == $user) return $f2;
+	        		}
+	      		}
+	    	}
+	  	} else {
+		    return false;
+	  	}
+	}
+	
+	/**
+	 * Get the user id from an user
+	 *
+	 */
+	function getuid($user){
+		global $app;
+	  	if($this->is_user($user)){
+		    $user_datei = $this->server_conf["passwd_datei"];
+	    	$users = $app->file->no_comments($user_datei);
+	    	$lines = explode("\n", $users);
+	    	if(is_array($lines)){
+	      		foreach($lines as $line){
+	        		if(trim($line) != ""){
+	          			list($f1, $f2, $f3,) = explode(":", $line);
+	          			if($f1 == $user) return $f3;
+	        		}
+	      		}
+	    	}
+	  	} else {
+		    return false;
+	  	}
+	}
+	
+	/**
+	 * Get all information from a user
+	 *
+	 */
+	function get_user_attributes($user){
+		global $app;
+	  	if($this->is_user($user)){
+	    	$user_datei = $this->server_conf["passwd_datei"];
+	    	$users = $app->file->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){
+	            			$user_attr["username"] = $f1;
+	            			$user_attr["x"] = $f2;
+	            			$user_attr["uid"] = $f3;
+	            			$user_attr["gid"] = $f4;
+	            			$user_attr["name"] = $f5;
+	            			$user_attr["homedir"] = $f6;
+	            			$user_attr["shell"] = $f7;
+	            			return $user_attr;
+	          			}
+	        		}
+	      		}
+	    	}
+	  	} else {
+	    	return false;
+	  	}
+	}
+	
+	/**
+	 * Edit the owner of a file
+	 *
+	 */
+	function chown($file, $owner, $group = ''){
+	  $owner_change = @chown($file, $owner);
+	  if($group != ""){
+	    $group_change = @chgrp($file, $group);
+	  } else {
+	    $group_change = 1;
+	  }
+	  if($owner_change && $group_change){
+	    return true;
+	  } else {
+	    return false;
+	  }
+	}
+	
+	/**
+	 * Add an user to a specific group
+	 *
+	 */
+	function add_user_to_group($group, $user = 'admispconfig'){
+		global $app;
+	  	$group_file = $app->file->rf($this->server_conf["group_datei"]);
+	  	$group_file_lines = explode("\n", $group_file);
+	  	foreach($group_file_lines as $group_file_line){
+		    list($group_name,$group_x,$group_id,$group_users) = explode(":",$group_file_line);
+	    	if($group_name == $group){
+	      		$group_users = explode(",", str_replace(" ", "", $group_users));
+	      		if(!in_array($user, $group_users)){
+	        		$group_users[] = $user;
+	      		}
+	      		$group_users = implode(",", $group_users);
+	      		if(substr($group_users,0,1) == ",") $group_users = substr($group_users,1);
+	      		$group_file_line = $group_name.":".$group_x.":".$group_id.":".$group_users;
+	    	}
+	    	$new_group_file[] = $group_file_line;
+	  	}
+	  	$new_group_file = implode("\n", $new_group_file);
+	  	$app->file->wf($this->server_conf["group_datei"], $new_group_file);
+	  	$app->file->remove_blank_lines($this->server_conf["group_datei"]);
+	  	if($this->server_conf["shadow_datei"] != "/etc/shadow"){
+		    $app->log->caselog("pwd_mkdb ".$this->server_conf["shadow_datei"]." &> /dev/null", $this->FILE, __LINE__);
+	  	}
+	}
+	
+	function usermod($user, $groups){
+		global $app;
+	  	if($this->is_user($user)){
+		    $groups = explode(",", str_replace(" ", "", $groups));
+	    	$group_file = $app->file->rf($this->server_conf["group_datei"]);
+	    	$group_file_lines = explode("\n", $group_file);
+	    	foreach($group_file_lines as $group_file_line){
+	      		if(trim($group_file_line) != ""){
+	        		list($f1, $f2, $f3, $f4) = explode(":", $group_file_line);
+	        		$group_users = explode(",", str_replace(" ", "", $f4));
+	        		if(!in_array($f1, $groups)){
+	          			if(in_array($user, $group_users)){
+	            			$g_users = array();
+	            			foreach($group_users as $group_user){
+	              				if($group_user != $user) $g_users[] = $group_user;
+	            			}
+	            			$f4 = implode(",", $g_users);
+	          			}
+		        	} else {
+	          			if(!in_array($user, $group_users)){
+	            			if(trim($group_users[0]) == "") unset($group_users);
+	            			$group_users[] = $user;
+	          			}
+	          			$f4 = implode(",", $group_users);
+	        		}
+	        		$new_group_file[] = $f1.":".$f2.":".$f3.":".$f4;
+	      		}
+	    	}
+	    	$new_group_file = implode("\n", $new_group_file);
+	    	$app->file->wf($this->server_conf["group_datei"], $new_group_file);
+	    	$app->file->remove_blank_lines($this->server_conf["group_datei"]);
+	    	if($this->server_conf["shadow_datei"] != "/etc/shadow"){
+	      		$app->log->caselog("pwd_mkdb ".$this->server_conf["shadow_datei"]." &> /dev/null", $this->FILE, __LINE__);
+	    	}
+	    	return true;
+	  	} else {
+		    return false;
+	  	}
+	}
+	
+	/**boot autostart etc
+	 *
+	 */
+	function rc_edit($service, $rl, $action){
+		// $action = "on|off";
+	  	global $app;
+	  	$dist_init_scripts = $app->system->server_conf["dist_init_scripts"];
+	  	$dist_runlevel = $app->system->server_conf["dist_runlevel"];
+	  	$dist = $app->system->server_conf["dist"];
+	  	if(trim($dist_runlevel) == ""){ // falls es keine runlevel gibt (FreeBSD)
+		    if($action == "on"){
+	    		@symlink($dist_init_scripts."/".$service, $dist_init_scripts."/".$service.".sh");
+	    	}
+	    	if($action == "off"){
+	      		if(is_link($dist_init_scripts."/".$service.".sh")){
+	        		unlink($dist_init_scripts."/".$service.".sh");
+	      		} else {
+	        		exec("mv -f ".$dist_init_scripts."/".$service.".sh ".$dist_init_scripts."/".$service." &> /dev/null");
+	      		}
+	    	}
+	  	} else { // Linux
+	    	if(substr($dist, 0,4) == 'suse'){
+	      		if($action == "on"){
+	        		exec("chkconfig --add $service &> /dev/null");
+	      		}
+	      		if($action == "off"){
+	        		exec("chkconfig --del $service &> /dev/null");
+	      		}
+	    	} else {
+	      		$runlevels = explode(",", $rl);
+	      		foreach($runlevels as $runlevel){
+	        		$runlevel = trim($runlevel);
+	        		if($runlevel != "" && is_dir($dist_runlevel."/rc".$runlevel.".d")){
+	          			$handle=opendir($dist_runlevel."/rc".$runlevel.".d");
+	          			while($file = readdir($handle)){
+	            			if($file != "." && $file != ".."){
+	              				$target = @readlink($dist_runlevel."/rc".$runlevel.".d/".$file);
+	              				if(strstr($file, $service) && strstr($target, $service) && substr($file,0,1) == "S") $ln_arr[$runlevel][] = $dist_runlevel."/rc".$runlevel.".d/".$file;
+	            			}
+	          			}
+	          			closedir($handle);
+	        		}
+	        		if($action == "on"){
+	          			if(!is_array($ln_arr[$runlevel])) @symlink($dist_init_scripts."/".$service, $dist_runlevel."/rc".$runlevel.".d/S99".$service);
+	        		}
+	        		if($action == "off"){
+	          			if(is_array($ln_arr[$runlevel])){
+	            			foreach($ln_arr[$runlevel] as $link){
+	              				unlink($link);
+	            			}
+	          			}
+	        		}
+	      		}
+	    	}
+	  	}
+	}
+	
+	/**
+	 * Filter information from the commands
+	 *
+	 */
+	function grep($content, $string, $params = ''){
+		global $app;
+	  	// params: i, v, w
+	  	$content = $app->file->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(!$app->string->is_word($string, $line, 'i')) $find[] = $line;
+	        		} else {
+	          			if($app->string->is_word($string, $line, 'i')) $find[] = $line;
+	        		}
+	      		} else {
+	        		if(strstr($params, 'v')){
+	          			if(!$app->string->is_word($string, $line)) $find[] = $line;
+	        		} else {
+	          			if($app->string->is_word($string, $line)) $find[] = $line;
+	        		}
+	      		}
+	    	}
+	  	}
+	  	if(is_array($find)){
+		    $ret_val = implode("\n", $find);
+	    	if(substr($ret_val,-1) != "\n") $ret_val .= "\n";
+	    	$find = NULL;
+	    	return $ret_val;
+	  	} else {
+		    return false;
+	  	}
+	}
+	
+	/**
+	 * Strip content from fields
+	 *
+	 */
+	function cut($content, $field, $delimiter = ':'){
+		global $app;
+	  	$content = $app->file->unix_nl($content);
+	  	$lines = explode("\n", $content);
+	  	foreach($lines as $line){
+	    	$elms = explode($delimiter, $line);
+	    	$find[] = $elms[($field-1)];
+	  	}
+	  	if(is_array($find)){
+		    $ret_val = implode("\n", $find);
+		    if(substr($ret_val,-1) != "\n") $ret_val .= "\n";
+		    $find = NULL;
+	    	return $ret_val;
+	  	} else {
+		    return false;
+	  	}
+	}
+	
+	/**
+	 * Get the content off a file
+	 *
+	 */
+	function cat($file){
+		global $app;
+	  	return $app->file->rf($file);
+	}
+	
+	/**
+	 * Control services to restart etc
+	 *
+	 */
+	function daemon_init($daemon, $action){
+		//* $action = start|stop|restart|reload
+	  	global $app;
+	  	$dist = $this->server_conf["dist"];
+	  	$dist_init_scripts = $this->server_conf["dist_init_scripts"];
+	  	if(!strstr($dist, "freebsd")){
+		    $app->log->caselog("$dist_init_scripts/$daemon $action &> /dev/null", $this->FILE, __LINE__);
+	  	} else {
+		    if(is_file($dist_init_scripts."/".$daemon.".sh") || is_link($dist_init_scripts."/".$daemon.".sh")){
+	      		if($action == "start" || $action == "stop"){
+	        		$app->log->caselog($dist_init_scripts."/".$daemon.".sh ".$action." &> /dev/null", $this->FILE, __LINE__);
+	      		} else {
+	        		$app->log->caselog($dist_init_scripts."/".$daemon.".sh stop &> /dev/null", $this->FILE, __LINE__);
+	        		sleep(3);
+	        		$app->log->caselog($dist_init_scripts."/".$daemon.".sh start &> /dev/null", $this->FILE, __LINE__);
+	      		}
+	    	} else {
+	      		if(is_file($dist_init_scripts."/".$daemon) || is_link($dist_init_scripts."/".$daemon)){
+	        		if($action == "start" || $action == "stop"){
+	          			$app->log->caselog($dist_init_scripts."/".$daemon." ".$action." &> /dev/null", $this->FILE, __LINE__);
+	        		} else {
+	          			$app->log->caselog($dist_init_scripts."/".$daemon." stop &> /dev/null", $this->FILE, __LINE__);
+	          			sleep(3);
+	          			$app->log->caselog($dist_init_scripts."/".$daemon." start &> /dev/null", $this->FILE, __LINE__);
+	        		}
+	      		} else {
+	        		if(is_file("/etc/rc.d/".$daemon) || is_link("/etc/rc.d/".$daemon)){
+	          			if($action == "start" || $action == "stop"){
+	            			$app->log->caselog("/etc/rc.d/".$daemon." ".$action." &> /dev/null", $this->FILE, __LINE__);
+	          			} else {
+	            			$app->log->caselog("/etc/rc.d/".$daemon." stop &> /dev/null", $this->FILE, __LINE__);
+	            			sleep(3);
+	            			$app->log->caselog("/etc/rc.d/".$daemon." start &> /dev/null", $this->FILE, __LINE__);
+	          			}
+	        		}
+		      	}
+	    	}
+	  	}
+	}
+	
+	function netmask($netmask){
+	  list($f1,$f2,$f3,$f4) = explode(".", trim($netmask));
+	  $bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT);
+	  $parts = explode("0", $bin);
+	  $bin = str_pad($parts[0], 32, "0", STR_PAD_RIGHT);
+	  $bin = wordwrap($bin, 8, ".", 1);
+	  list($f1,$f2,$f3,$f4) = explode(".", trim($bin));
+	  return bindec($f1).".".bindec($f2).".".bindec($f3).".".bindec($f4);
+	}
+	
+	function binary_netmask($netmask){
+	  list($f1,$f2,$f3,$f4) = explode(".", trim($netmask));
+	  $bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT);
+	  $parts = explode("0", $bin);
+	  return substr_count($parts[0], "1");
+	}
+	
+	function network($ip, $netmask){
+	  $netmask = $this->netmask($netmask);
+	  list($f1,$f2,$f3,$f4) = explode(".", $netmask);
+	  $netmask_bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT);
+	  list($f1,$f2,$f3,$f4) = explode(".", $ip);
+	  $ip_bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT);
+	  for($i=0;$i<32;$i++){
+	    $network_bin .= substr($netmask_bin,$i,1) * substr($ip_bin,$i,1);
+	  }
+	  $network_bin = wordwrap($network_bin, 8, ".", 1);
+	  list($f1,$f2,$f3,$f4) = explode(".", trim($network_bin));
+	  return bindec($f1).".".bindec($f2).".".bindec($f3).".".bindec($f4);
+	}
+	
+	/**
+	 * Make a broadcast address from an IP number in combination with netmask
+	 *
+	 */
+	function broadcast($ip, $netmask){
+		$netmask = $this->netmask($netmask);
+	  	$binary_netmask = $this->binary_netmask($netmask);
+	  	list($f1,$f2,$f3,$f4) = explode(".", $ip);
+	  	$ip_bin = str_pad(decbin($f1),8,"0",STR_PAD_LEFT).str_pad(decbin($f2),8,"0",STR_PAD_LEFT).str_pad(decbin($f3),8,"0",STR_PAD_LEFT).str_pad(decbin($f4),8,"0",STR_PAD_LEFT);
+	  	$broadcast_bin = str_pad(substr($ip_bin, 0, $binary_netmask),32,"1",STR_PAD_RIGHT);
+	  	$broadcast_bin = wordwrap($broadcast_bin, 8, ".", 1);
+	  	list($f1,$f2,$f3,$f4) = explode(".", trim($broadcast_bin));
+	  	return bindec($f1).".".bindec($f2).".".bindec($f3).".".bindec($f4);
+	}
+	
+	/**
+	 * Get the network address information
+	 *
+	 */
+	function network_info(){
+		$dist = $this->server_conf["dist"];
+	  	ob_start();
+	  	passthru("ifconfig");
+	  	$output = ob_get_contents();
+	  	ob_end_clean();
+	  	$lines = explode("\n", $output);
+	  	foreach($lines as $line){
+		    $elms = explode(" ", $line);
+	    	if(trim($elms[0]) != "" && substr($elms[0],0,1) != "\t"){
+	      		$elms[0] = trim($elms[0]);
+	      		if(strstr($dist, "freebsd")) $elms[0] = substr($elms[0],0,-1);
+	      		$interfaces[] = $elms[0];
+	    	}
+	  	}
+	  	if(!empty($interfaces)){
+		    foreach($interfaces as $interface){
+	    		ob_start();
+	      		if(!strstr($dist, "freebsd")){
+	        		passthru("ifconfig ".$interface." | grep -iw 'inet' | cut -f2 -d: | cut -f1 -d' '");
+	      		} else {
+	        		passthru("ifconfig ".$interface." | grep -iw 'inet' | grep -iv 'inet6' | cut -f2 -d' '");
+	      		}
+	      		$output = trim(ob_get_contents());
+	      		ob_end_clean();
+	      		if($output != ""){
+	        		$ifconfig["INTERFACE"][$interface] = $output;
+	        		$ifconfig["IP"][$output] = $interface;
+	      		}
+	    	}
+	    	if(!empty($ifconfig)){
+	      		return $ifconfig;
+	    	} else {
+	      		return false;
+	    	}
+	  	} else {
+	    	return false;
+	  	}
+	}
+	
+	/**
+	 * Configure the network settings from the system
+	 *
+	 */
+	function network_config(){
+		$ifconfig = $this->network_info();
+	  	if($ifconfig){
+	    	$main_interface = $ifconfig["IP"][$this->server_conf["server_ip"]];
+	    	if(strstr($main_interface, ":")){
+	      		$parts = explode(":", $main_interface);
+	      		$main_interface = trim($parts[0]);
+	    	}
+	    	if($main_interface != ""){
+	      		$ips = $this->data["isp_server_ip"];
+	      		if(!empty($ips)){
+	        		foreach($ips as $ip){
+	          			if(!isset($ifconfig["IP"][$ip["server_ip"]])){
+	            			$to_set[] = $ip["server_ip"];
+	          			} else {
+	            			unset($ifconfig["IP"][$ip["server_ip"]]);
+	          			}
+	        		}
+	        		if(!empty($ifconfig["IP"])){
+	          			foreach($ifconfig["IP"] as $key => $val){
+	            			if(!strstr($val, "lo") && !strstr($val, "lp") && strstr($val, $main_interface)){
+	              				exec("ifconfig ".$val." down &> /dev/null");
+	              				unset($ifconfig["INTERFACE"][$val]);
+	            			}
+	          			}
+	        		}
+	        		if(!empty($to_set)){
+	         			foreach($to_set as $to){
+	           				$i = 0;
+	           				while($i >= 0){
+	             				if(isset($ifconfig["INTERFACE"][$main_interface.":".$i])){
+	               					$i++;
+					             } else {
+	               					$new_interface = $main_interface.":".$i;
+	               					$i = -1;
+	             				}
+	           				}
+	           				exec("ifconfig ".$new_interface." ".$to." netmask ".$this->server_conf["server_netzmaske"]." up &> /dev/null");
+	           				$ifconfig["INTERFACE"][$new_interface] = $to;
+	          			}
+	        		}
+	      		}
+	    	}
+	  	}
+	}
+	
+	function quota_dirs(){
+	  global $app;
+	  $content = $app->file->unix_nl($app->file->no_comments("/etc/fstab"));
+	  $lines = explode("\n", $content);
+	  foreach($lines as $line){
+	    $line = trim($line);
+	    if($line != ""){
+	      $elms = explode("\t", $line);
+	      foreach($elms as $elm){
+	        if(trim($elm) != "") $f[] = $elm;
+	      }
+	      if(!empty($f) && stristr($f[3], "userquota") && stristr($f[3], "groupquota")){
+	        $q_dirs[] = trim($f[1]);
+	      }
+	      unset($f);
+	    }
+	  }
+	  if(!empty($q_dirs)){
+	    return $q_dirs;
+	  } else {
+	    return false;
+	  }
+	}
+	
+	/**
+	 * Scan the trash for virusses infection
+	 *
+	 */
+	function make_trashscan(){
+		global $app;
+	  	//trashscan erstellen
+	  	// Template �ffnen
+	  	$app->tpl->clear_all();
+	  	$app->tpl->define( array(table    => "trashscan.master"));
+	
+	  	if(!isset($this->server_conf["virusadmin"]) || trim($this->server_conf["virusadmin"]) == "") $this->server_conf["virusadmin"] = "admispconfig@localhost";
+	  	if(substr($this->server_conf["virusadmin"],0,1) == "#"){
+		    $notify = "no";
+	  	} else {
+		    $notify = "yes";
+	  	}
+	
+	  	// Variablen zuweisen
+	  	$app->tpl->assign( array(VIRUSADMIN => $this->server_conf["virusadmin"],
+	                           NOTIFICATION => $notify));
+	
+	  	$app->tpl->parse(TABLE, table);
+	
+	  	$trashscan_text = $app->tpl->fetch();
+	
+	  	$datei = "/home/admispconfig/ispconfig/tools/clamav/bin/trashscan";
+	  	$app->file->wf($datei, $trashscan_text);
+	
+	  	exec("chown admispconfig:admispconfig $datei &> /dev/null");
+	  	exec("chmod 755 $datei");
+	}
+	
+	/**
+	 * Get the current time
+	 *
+	 */
+	function get_time(){
+	  $addr = "http://www.ispconfig.org/";
+	  $timeout = 1;
+	  $url_parts = parse_url($addr);
+	  $path = $url_parts["path"];
+	  $port = 80;
+	  $urlHandle = @fsockopen($url_parts["host"], $port, $errno, $errstr, $timeout);
+	  if ($urlHandle){
+	    socket_set_timeout($urlHandle, $timeout);
+	
+	    $urlString = "GET $path HTTP/1.0\r\nHost: ".$url_parts["host"]."\r\nConnection: Keep-Alive\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n";
+	    if ($user) $urlString .= "Authorization: Basic ".base64_encode("$user:$pass")."\r\n";
+	    $urlString .= "\r\n";
+	    fputs($urlHandle, $urlString);
+	
+	    $month["Jan"] = "01";
+	    $month["Feb"] = "02";
+	    $month["Mar"] = "03";
+	    $month["Apr"] = "04";
+	    $month["May"] = "05";
+	    $month["Jun"] = "06";
+	    $month["Jul"] = "07";
+	    $month["Aug"] = "08";
+	    $month["Sep"] = "09";
+	    $month["Oct"] = "10";
+	    $month["Nov"] = "11";
+	    $month["Dec"] = "12";
+	    $c = 0;
+	    $l = 0;
+	    $startzeit = time();
+	    while(!feof($urlHandle) && $c < 2 && $l == 0){
+	      $line = trim(fgets($urlHandle,128));
+	      $response .= $line;
+	      $c = time() - $startzeit;
+	      if($line == "" || substr($line, 0, 5) == "Date:") $l += 1; // nur den Header auslesen
+	      if(substr($line, 0, 5) == "Date:"){
+	        $parts = explode(" ", $line);
+	        $tag = $parts[2];
+	        $monat = $month[$parts[3]];
+	        $jahr = $parts[4];
+	        list($stunde, $minute, $sekunde) = explode(":", $parts[5]);
+	        $timestamp = mktime($stunde,$minute,$sekunde,$monat,$tag,$jahr);
+	      }
+	    }
+	
+	    @fclose($urlHandle);
+	
+	    return $timestamp;
+	  } else {
+	    @fclose($urlHandle);
+	    return false;
+	  }
+	}
 
 }
 ?>
\ No newline at end of file

--
Gitblit v1.9.1