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; } } } ?>