From b1a6a5a3991cec5cd08873b01376e45d0b247f18 Mon Sep 17 00:00:00 2001
From: Marius Cramer <m.cramer@pixcept.de>
Date: Thu, 14 Nov 2013 09:05:33 -0500
Subject: [PATCH] Cleaning up code to match coding guidelines
---
server/lib/classes/system.inc.php | 2085 +++++++++++++++++++++++++++++++----------------------------
1 files changed, 1,098 insertions(+), 987 deletions(-)
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index a1e7c00..a393384 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -34,21 +34,25 @@
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';
+ //$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
*
@@ -56,68 +60,74 @@
*/
public function hostname(){
$dist = $this->server_conf['dist'];
-
- ob_start();
- passthru('hostname');
- $hostname = ob_get_contents();
- ob_end_clean();
+
+ 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;
+ 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);
+ 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");
+ $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->file->remove_blank_lines($shadow_datei);
$app->log->caselog("pwd_mkdb $shadow_datei &> /dev/null", $this->FILE, __LINE__);
- }
- return true;
- }
- }
+ }
+ return true;
+ }
+ }
}
-
+
+
+
+
+
/**
* Update users when someone edit it
*
@@ -126,344 +136,376 @@
//* First delete the users
$this->deluser($user_username);
//* Add the user again
- $this->adduser($user_username, $uid, $gid, $username, $homedir, $shell, $passwort);
+ $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);
+ $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;
- }
+ 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;
- }
+ 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);
+ $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;
- }
+ 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);
+ $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;
- }
+ 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)){
+ $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;
+ 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;
+ $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;
}
-
+
/*
// Alternative implementation of the is_group function. Should be faster then the old one To be tested.
function is_group($group) {
@@ -485,122 +527,142 @@
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;
+ $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 '';
+ $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;
- }
+ 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;
- }
+ 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 the group id from an group
*
*/
function getgid($group){
global $app;
- if($this->is_group($group)){
- $group_datei = $this->server_conf['group_datei'];
+ if($this->is_group($group)){
+ $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){
+ foreach($lines as $line){
if(trim($line) != ""){
list($f1, $f2, $f3, $f4) = explode(':', $line);
if($f1 == $group) return $f3;
}
}
}
- } else {
- return false;
- }
+ } else {
+ return false;
+ }
}
-
+
+
+
+
+
/**
- * Return info about a group by name
- *
- */
+ * Return info about a group by name
+ *
+ */
function posix_getgrnam($group) {
if(!function_exists('posix_getgrnam')){
$group_datei = $this->server_conf['group_datei'];
@@ -616,213 +678,225 @@
} else {
$members = array();
}
- $group_details = array( 'name' => $group,
- 'passwd' => $f2,
- 'members' => $members,
- 'gid' => $f3);
- return $group_details;
+ $group_details = array( 'name' => $group,
+ 'passwd' => $f2,
+ 'members' => $members,
+ 'gid' => $f3);
+ return $group_details;
} else {
return posix_getgrnam($group);
}
- }
-
+ }
+
+
+
+
+
/**
* 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;
- }
+ 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, $allow_symlink = false){
- global $app;
- if($allow_symlink == false && $this->checkpath($file) == false) {
- $app->log("Action aborted, file is a symlink: $file",LOGLEVEL_WARN);
- return false;
- }
- if(file_exists($file)) {
- if(@chown($file, $owner)) {
- return true;
- } else {
- $app->log("chown failed: $file : $owner",LOGLEVEL_DEBUG);
+ global $app;
+ if($allow_symlink == false && $this->checkpath($file) == false) {
+ $app->log("Action aborted, file is a symlink: $file", LOGLEVEL_WARN);
return false;
}
- }
+ if(file_exists($file)) {
+ if(@chown($file, $owner)) {
+ return true;
+ } else {
+ $app->log("chown failed: $file : $owner", LOGLEVEL_DEBUG);
+ return false;
+ }
+ }
}
-
+
function chgrp($file, $group = '', $allow_symlink = false){
- global $app;
- if($allow_symlink == false && $this->checkpath($file) == false) {
- $app->log("Action aborted, file is a symlink: $file",LOGLEVEL_WARN);
- return false;
- }
- if(file_exists($file)) {
- if(@chgrp($file, $group)) {
- return true;
- } else {
- $app->log("chgrp failed: $file : $group",LOGLEVEL_DEBUG);
+ global $app;
+ if($allow_symlink == false && $this->checkpath($file) == false) {
+ $app->log("Action aborted, file is a symlink: $file", LOGLEVEL_WARN);
return false;
}
- }
+ if(file_exists($file)) {
+ if(@chgrp($file, $group)) {
+ return true;
+ } else {
+ $app->log("chgrp failed: $file : $group", LOGLEVEL_DEBUG);
+ return false;
+ }
+ }
}
-
+
//* Change the mode of a file
function chmod($file, $mode, $allow_symlink = false) {
global $app;
if($allow_symlink == false && $this->checkpath($file) == false) {
- $app->log("Action aborted, file is a symlink: $file",LOGLEVEL_WARN);
+ $app->log("Action aborted, file is a symlink: $file", LOGLEVEL_WARN);
return false;
}
if(@chmod($file, $mode)) {
return true;
} else {
- $app->log("chmod failed: $file : $mode",LOGLEVEL_DEBUG);
+ $app->log("chmod failed: $file : $mode", LOGLEVEL_DEBUG);
return false;
}
}
-
+
function file_put_contents($filename, $data, $allow_symlink = false) {
global $app;
if($allow_symlink == false && $this->checkpath($filename) == false) {
- $app->log("Action aborted, file is a symlink: $filename",LOGLEVEL_WARN);
+ $app->log("Action aborted, file is a symlink: $filename", LOGLEVEL_WARN);
return false;
}
if(file_exists($filename)) unlink($filename);
return file_put_contents($filename, $data);
}
-
+
function file_get_contents($filename, $allow_symlink = false) {
global $app;
if($allow_symlink == false && $this->checkpath($filename) == false) {
- $app->log("Action aborted, file is a symlink: $filename",LOGLEVEL_WARN);
+ $app->log("Action aborted, file is a symlink: $filename", LOGLEVEL_WARN);
return false;
}
return file_get_contents($filename, $data);
}
-
+
function rename($filename, $new_filename, $allow_symlink = false) {
global $app;
if($allow_symlink == false && $this->checkpath($filename) == false) {
- $app->log("Action aborted, file is a symlink: $filename",LOGLEVEL_WARN);
+ $app->log("Action aborted, file is a symlink: $filename", LOGLEVEL_WARN);
return false;
}
return rename($filename, $new_filename);
}
-
+
function mkdir($dirname, $allow_symlink = false) {
global $app;
if($allow_symlink == false && $this->checkpath($dirname) == false) {
- $app->log("Action aborted, file is a symlink: $dirname",LOGLEVEL_WARN);
+ $app->log("Action aborted, file is a symlink: $dirname", LOGLEVEL_WARN);
return false;
}
if(@mkdir($dirname)) {
return true;
} else {
- $app->log("mkdir failed: $dirname",LOGLEVEL_DEBUG);
+ $app->log("mkdir failed: $dirname", LOGLEVEL_DEBUG);
return false;
}
}
-
+
function unlink($filename) {
if(file_exists($filename) || is_link($filename)) {
return unlink($filename);
}
}
-
- function copy($file1,$file2) {
- return copy($file1,$file2);
+
+ function copy($file1, $file2) {
+ return copy($file1, $file2);
}
-
+
function touch($file, $allow_symlink = false){
- global $app;
- if($allow_symlink == false && @file_exists($file) && $this->checkpath($file) == false) {
- $this->unlink($file);
- }
- if(@touch($file)) {
+ global $app;
+ if($allow_symlink == false && @file_exists($file) && $this->checkpath($file) == false) {
+ $this->unlink($file);
+ }
+ if(@touch($file)) {
return true;
- } else {
- $app->log("touch failed: $file",LOGLEVEL_DEBUG);
+ } else {
+ $app->log("touch failed: $file", LOGLEVEL_DEBUG);
return false;
- }
+ }
}
-
+
function checkpath($path) {
$path = trim($path);
//* We allow only absolute paths
- if(substr($path,0,1) != '/') return false;
-
+ if(substr($path, 0, 1) != '/') return false;
+
//* We allow only some characters in the path
// * is allowed, for example it is part of wildcard certificates/keys: *.example.com.crt
- if(!preg_match('@^/[-a-zA-Z0-9_/.*~]{1,}$@',$path)) return false;
-
+ if(!preg_match('@^/[-a-zA-Z0-9_/.*~]{1,}$@', $path)) return false;
+
//* Check path for symlinks
- $path_parts = explode('/',$path);
+ $path_parts = explode('/', $path);
$testpath = '';
foreach($path_parts as $p) {
$testpath .= '/'.$p;
if(is_link($testpath)) return false;
}
-
+
return true;
}
-
+
+
+
+
+
/**
* 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__);
- }
+ $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;
@@ -864,449 +938,485 @@
}
}
*/
-
+
/**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 {
- rename($dist_init_scripts.'/'.$service.'.sh',$dist_init_scripts.'/'.$service);
- }
- }
- } 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);
- }
- }
- }
- }
- }
- }
+ 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 {
+ rename($dist_init_scripts.'/'.$service.'.sh', $dist_init_scripts.'/'.$service);
+ }
+ }
+ } 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;
- }
+ // 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;
- }
+ $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);
+ 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__);
- }
- }
- }
- }
- }
+ 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);
+ 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');
+ 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);
+ $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);
+ $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;
- }
+ 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;
- }
- }
- }
- }
- }
+ 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;
- }
+ 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);
-
- chmod($datei, 0755);
- chown($datei,'admispconfig');
- chgrp($datei,'admispconfig');
+ //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);
+
+ chmod($datei, 0755);
+ chown($datei, 'admispconfig');
+ chgrp($datei, 'admispconfig');
}
-
+
+
+
+
+
/**
* 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;
- }
+ $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;
+ }
}
-
- function replaceLine($filename,$search_pattern,$new_line,$strict = 0,$append = 1) {
+
+ function replaceLine($filename, $search_pattern, $new_line, $strict = 0, $append = 1) {
global $app;
if($this->checkpath($filename) == false) {
- $app->log("Action aborted, file is a symlink: $filename",LOGLEVEL_WARN);
+ $app->log("Action aborted, file is a symlink: $filename", LOGLEVEL_WARN);
return false;
}
$lines = @file($filename);
@@ -1315,7 +1425,7 @@
if(is_array($lines)) {
foreach($lines as $line) {
if($strict == 0) {
- if(stristr($line,$search_pattern)) {
+ if(stristr($line, $search_pattern)) {
$out .= $new_line."\n";
$found = 1;
} else {
@@ -1331,64 +1441,64 @@
}
}
}
-
+
if($found == 0) {
//* add \n if the last line does not end with \n or \r
- if(substr($out,-1) != "\n" && substr($out,-1) != "\r" && filesize($filename) > 0) $out .= "\n";
+ if(substr($out, -1) != "\n" && substr($out, -1) != "\r" && filesize($filename) > 0) $out .= "\n";
//* add the new line at the end of the file
if($append == 1) {
$out .= $new_line."\n";
}
}
- file_put_contents($filename,$out);
+ file_put_contents($filename, $out);
}
-
- function removeLine($filename,$search_pattern,$strict = 0) {
- global $app;
- if($this->checkpath($filename) == false) {
- $app->log("Action aborted, file is a symlink: $filename",LOGLEVEL_WARN);
- return false;
- }
- if($lines = @file($filename)) {
- $out = '';
- foreach($lines as $line) {
- if($strict == 0) {
- if(!stristr($line,$search_pattern)) {
- $out .= $line;
- }
- } else {
- if(!trim($line) == $search_pattern) {
- $out .= $line;
+
+ function removeLine($filename, $search_pattern, $strict = 0) {
+ global $app;
+ if($this->checkpath($filename) == false) {
+ $app->log("Action aborted, file is a symlink: $filename", LOGLEVEL_WARN);
+ return false;
+ }
+ if($lines = @file($filename)) {
+ $out = '';
+ foreach($lines as $line) {
+ if($strict == 0) {
+ if(!stristr($line, $search_pattern)) {
+ $out .= $line;
+ }
+ } else {
+ if(!trim($line) == $search_pattern) {
+ $out .= $line;
+ }
}
}
+ file_put_contents($filename, $out);
}
- file_put_contents($filename,$out);
}
- }
-
+
function maildirmake($maildir_path, $user = '', $subfolder = '') {
-
+
global $app;
-
+
if($subfolder != '') {
$dir = escapeshellcmd($maildir_path.'/.'.$subfolder);
} else {
$dir = escapeshellcmd($maildir_path);
}
-
+
if(!is_dir($dir)) mkdir($dir, 0700, true);
if($user != '' && $user != 'root' && $this->is_user($user)) {
$user = escapeshellcmd($user);
// I assume that the name of the (vmail group) is the same as the name of the mail user in ISPConfig 3
$group = $user;
- if(is_dir($dir)) $this->chown($dir,$user);
- if(is_dir($dir)) $this->chgrp($dir,$group);
+ if(is_dir($dir)) $this->chown($dir, $user);
+ if(is_dir($dir)) $this->chgrp($dir, $group);
$chown_mdsub = true;
}
-
- $maildirsubs = array('cur','new','tmp');
+
+ $maildirsubs = array('cur', 'new', 'tmp');
foreach ($maildirsubs as $mdsub) {
if(!is_dir($dir.'/'.$mdsub)) mkdir($dir.'/'.$mdsub, 0700, true);
@@ -1399,7 +1509,7 @@
}
chmod($dir, 0700);
-
+
/*
if($user != '' && $this->is_user($user) && $user != 'root') {
$user = escapeshellcmd($user);
@@ -1408,7 +1518,7 @@
exec("chown $user:$group $dir $dir_cur $dir_new $dir_tmp");
}
*/
-
+
//* Add the subfolder to the subscriptions and courierimapsubscribed files
if($subfolder != '') {
// Courier
@@ -1416,188 +1526,188 @@
$tmp_file = escapeshellcmd($maildir_path.'/courierimapsubscribed');
touch($tmp_file);
chmod($tmp_file, 0744);
- chown($tmp_file,'vmail');
- chgrp($tmp_file,'vmail');
+ chown($tmp_file, 'vmail');
+ chgrp($tmp_file, 'vmail');
}
- $this->replaceLine($maildir_path.'/courierimapsubscribed','INBOX.'.$subfolder,'INBOX.'.$subfolder,1,1);
-
+ $this->replaceLine($maildir_path.'/courierimapsubscribed', 'INBOX.'.$subfolder, 'INBOX.'.$subfolder, 1, 1);
+
// Dovecot
if(!is_file($maildir_path.'/subscriptions')) {
$tmp_file = escapeshellcmd($maildir_path.'/subscriptions');
touch($tmp_file);
chmod($tmp_file, 0744);
- chown($tmp_file,'vmail');
- chgrp($tmp_file,'vmail');
+ chown($tmp_file, 'vmail');
+ chgrp($tmp_file, 'vmail');
}
- $this->replaceLine($maildir_path.'/subscriptions',$subfolder,$subfolder,1,1);
+ $this->replaceLine($maildir_path.'/subscriptions', $subfolder, $subfolder, 1, 1);
}
-
- $app->log('Created Maildir '.$maildir_path.' with subfolder: '.$subfolder,LOGLEVEL_DEBUG);
-
+
+ $app->log('Created Maildir '.$maildir_path.' with subfolder: '.$subfolder, LOGLEVEL_DEBUG);
+
}
-
+
//* Function to create directory paths and chown them to a user and group
function mkdirpath($path, $mode = 0755, $user = '', $group = '') {
- $path_parts = explode('/',$path);
+ $path_parts = explode('/', $path);
$new_path = '';
if(is_array($path_parts)) {
foreach($path_parts as $part) {
$new_path .= '/'.$part;
if(!@is_dir($new_path)) {
$this->mkdir($new_path);
- $this->chmod($new_path,$mode);
- if($user != '') $this->chown($new_path,$user);
- if($group != '') $this->chgrp($new_path,$group);
+ $this->chmod($new_path, $mode);
+ if($user != '') $this->chown($new_path, $user);
+ if($group != '') $this->chgrp($new_path, $group);
}
}
}
-
+
}
-
+
//* Check if a application is installed
function is_installed($appname) {
- exec('which '.escapeshellcmd($appname).' 2> /dev/null',$out,$returncode);
- if(isset($out[0]) && stristr($out[0],$appname) && $returncode == 0) {
+ exec('which '.escapeshellcmd($appname).' 2> /dev/null', $out, $returncode);
+ if(isset($out[0]) && stristr($out[0], $appname) && $returncode == 0) {
return true;
} else {
return false;
}
}
-
- function web_folder_protection($document_root,$protect) {
- global $app,$conf;
-
+
+ function web_folder_protection($document_root, $protect) {
+ global $app, $conf;
+
if($this->checkpath($document_root) == false) {
- $app->log("Action aborted, target is a symlink: $document_root",LOGLEVEL_DEBUG);
+ $app->log("Action aborted, target is a symlink: $document_root", LOGLEVEL_DEBUG);
return false;
}
-
+
//* load the server configuration options
$app->uses('getconf');
$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
-
+
if($protect == true && $web_config['web_folder_protection'] == 'y') {
//* Add protection
- if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root,'..')) exec('chattr +i '.escapeshellcmd($document_root));
+ if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root, '..')) exec('chattr +i '.escapeshellcmd($document_root));
} else {
//* Remove protection
- if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root,'..')) exec('chattr -i '.escapeshellcmd($document_root));
+ if($document_root != '' && $document_root != '/' && strlen($document_root) > 6 && !stristr($document_root, '..')) exec('chattr -i '.escapeshellcmd($document_root));
}
}
-
+
function usermod($username, $uid = 0, $gid = 0, $home = '', $shell = '', $password = '', $login = '') {
global $app;
-
+
if($login == '') $login = $username;
-
+
//* Change values in /etc/passwd
$passwd_file_array = file('/etc/passwd');
if(is_array($passwd_file_array)) {
foreach($passwd_file_array as $line) {
$line = trim($line);
- $parts = explode(':',$line);
+ $parts = explode(':', $line);
if($parts[0] == $username) {
if(trim($login) != '' && trim($login) != trim($username)) $parts[0] = trim($login);
if(!empty($uid)) $parts[2] = trim($uid);
if(!empty($gid)) $parts[3] = trim($gid);
if(trim($home) != '') $parts[5] = trim($home);
if(trim($shell) != '') $parts[6] = trim($shell);
- $new_line = implode(':',$parts);
- copy('/etc/passwd','/etc/passwd~');
- chmod('/etc/passwd~',0600);
+ $new_line = implode(':', $parts);
+ copy('/etc/passwd', '/etc/passwd~');
+ chmod('/etc/passwd~', 0600);
$app->uses('system');
- $app->system->replaceLine('/etc/passwd',$line,$new_line,1,0);
+ $app->system->replaceLine('/etc/passwd', $line, $new_line, 1, 0);
}
}
unset($passwd_file_array);
}
-
+
//* If username != login, change username in group and gshadow file
if($username != $login) {
$group_file_array = file('/etc/group');
if(is_array($group_file_array)) {
foreach($group_file_array as $line) {
$line = trim($line);
- $parts = explode(':',$line);
- if(strstr($parts[3],$username)) {
- $uparts = explode(',',$parts[3]);
+ $parts = explode(':', $line);
+ if(strstr($parts[3], $username)) {
+ $uparts = explode(',', $parts[3]);
if(is_array($uparts)) {
foreach($uparts as $key => $val) {
if($val == $username) $uparts[$key] = $login;
}
}
- $parts[3] = implode(',',$uparts);
- $new_line = implode(':',$parts);
- copy('/etc/group','/etc/group~');
- chmod('/etc/group~',0600);
- $app->system->replaceLine('/etc/group',$line,$new_line,1,0);
+ $parts[3] = implode(',', $uparts);
+ $new_line = implode(':', $parts);
+ copy('/etc/group', '/etc/group~');
+ chmod('/etc/group~', 0600);
+ $app->system->replaceLine('/etc/group', $line, $new_line, 1, 0);
}
}
}
unset($group_file_array);
-
+
$gshadow_file_array = file('/etc/gshadow');
if(is_array($gshadow_file_array)) {
foreach($gshadow_file_array as $line) {
$line = trim($line);
- $parts = explode(':',$line);
- if(strstr($parts[3],$username)) {
- $uparts = explode(',',$parts[3]);
+ $parts = explode(':', $line);
+ if(strstr($parts[3], $username)) {
+ $uparts = explode(',', $parts[3]);
if(is_array($uparts)) {
foreach($uparts as $key => $val) {
if($val == $username) $uparts[$key] = $login;
}
}
- $parts[3] = implode(',',$uparts);
- $new_line = implode(':',$parts);
- copy('/etc/gshadow','/etc/gshadow~');
- chmod('/etc/gshadow~',0600);
- $app->system->replaceLine('/etc/gshadow',$line,$new_line,1,0);
+ $parts[3] = implode(',', $uparts);
+ $new_line = implode(':', $parts);
+ copy('/etc/gshadow', '/etc/gshadow~');
+ chmod('/etc/gshadow~', 0600);
+ $app->system->replaceLine('/etc/gshadow', $line, $new_line, 1, 0);
}
}
}
unset($group_file_array);
}
-
-
+
+
//* When password or login name has been changed
if($password != '' || $username != $login) {
$shadow_file_array = file('/etc/shadow');
if(is_array($shadow_file_array)) {
foreach($shadow_file_array as $line) {
$line = trim($line);
- $parts = explode(':',$line);
+ $parts = explode(':', $line);
if($parts[0] == $username) {
if(trim($login) != '' && trim($login) != trim($username)) $parts[0] = trim($login);
if(trim($password) != '') $parts[1] = trim($password);
- $new_line = implode(':',$parts);
- copy('/etc/shadow','/etc/shadow~');
- chmod('/etc/shadow~',0600);
- $app->system->replaceLine('/etc/shadow',$line,$new_line,1,0);
+ $new_line = implode(':', $parts);
+ copy('/etc/shadow', '/etc/shadow~');
+ chmod('/etc/shadow~', 0600);
+ $app->system->replaceLine('/etc/shadow', $line, $new_line, 1, 0);
}
}
}
unset($shadow_file_array);
}
}
-
+
function intval($string, $force_numeric = false) {
- if(intval($string) == 2147483647) {
- if($force_numeric == true) return floatval($string);
- elseif(preg_match('/^([-]?)[0]*([1-9][0-9]*)([^0-9].*)*$/', $string, $match)) return $match[1].$match[2];
- else return 0;
- } else {
- return intval($string);
- }
- }
-
+ if(intval($string) == 2147483647) {
+ if($force_numeric == true) return floatval($string);
+ elseif(preg_match('/^([-]?)[0]*([1-9][0-9]*)([^0-9].*)*$/', $string, $match)) return $match[1].$match[2];
+ else return 0;
+ } else {
+ return intval($string);
+ }
+ }
+
function is_mounted($mountpoint){
//$cmd = 'df 2>/dev/null | grep " '.$mountpoint.'$"';
$cmd = 'mount 2>/dev/null | grep " on '.$mountpoint.' type "';
exec($cmd, $output, $return_var);
- return $return_var == 0 ? true : false;
+ return $return_var == 0 ? true : false;
}
-
+
function getinitcommand($servicename, $action, $init_script_directory = ''){
global $conf;
// systemd
@@ -1616,4 +1726,5 @@
}
}
+
?>
--
Gitblit v1.9.1