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