From 7fe908c50c8dbc5cc05f571dbe11d66141caacd4 Mon Sep 17 00:00:00 2001 From: Marius Cramer <m.cramer@pixcept.de> Date: Thu, 14 Nov 2013 09:01:22 -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