From b889edb33e4a09cc1f65d2fb9ad9f9ea16b1eae9 Mon Sep 17 00:00:00 2001 From: ftimme <ft@falkotimme.com> Date: Tue, 04 Sep 2012 11:42:42 -0400 Subject: [PATCH] - Ported changes from Apache plugin to nginx plugin. - Fixed errors in system.inc.php- --- server/lib/classes/system.inc.php | 157 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 145 insertions(+), 12 deletions(-) diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php index 8cebdc1..aa4498d 100644 --- a/server/lib/classes/system.inc.php +++ b/server/lib/classes/system.inc.php @@ -41,9 +41,9 @@ * @return system */ public function system(){ - global $go_info; - $this->server_id = $go_info['isp']['server_id']; - $this->server_conf = $go_info['isp']['server_conf']; + //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'; @@ -611,48 +611,73 @@ * */ 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; } - return chown($file, $owner); + 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; } - return chgrp($file, $group); + 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); return false; } - return chmod($file, $mode); + if(@chmod($file, $mode)) { + return true; + } else { + $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); return false; } - unlink($filename); + 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); return false; } - return file_put_contents($filename, $data); + 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); return false; @@ -661,15 +686,23 @@ } 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); return false; } - return mkdir($dirname); + if(@mkdir($dirname)) { + return true; + } else { + $app->log("mkdir failed: $dirname",LOGLEVEL_DEBUG); + return false; + } } - function unlink($file) { - return unlink($file); + function unlink($filename) { + if(file_exists($filename) || is_link($filename)) { + return unlink($filename); + } } function copy($file1,$file2) { @@ -685,7 +718,7 @@ 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; @@ -724,6 +757,7 @@ } } + /* function usermod($user, $groups){ global $app; if($this->is_user($user)){ @@ -763,6 +797,7 @@ return false; } } + */ /**boot autostart etc * @@ -1203,6 +1238,7 @@ } 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); return false; @@ -1242,6 +1278,7 @@ } 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; @@ -1381,6 +1418,102 @@ 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); + 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); + $app->uses('system'); + $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]); + 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); + } + } + } + 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]); + 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); + } + } + } + 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); + 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); + } + } + } + unset($shadow_file_array); + } + } } ?> -- Gitblit v1.9.1