From a9c5c19aee8db8f4aa301eb9c26a498f2fd3ec0c Mon Sep 17 00:00:00 2001 From: cfoe <cfoe@ispconfig3> Date: Wed, 11 Jul 2012 04:05:05 -0400 Subject: [PATCH] rc1 of default-v2 --- server/plugins-available/shelluser_base_plugin.inc.php | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+), 0 deletions(-) diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php index f411251..a56ec6d 100755 --- a/server/plugins-available/shelluser_base_plugin.inc.php +++ b/server/plugins-available/shelluser_base_plugin.inc.php @@ -72,7 +72,18 @@ $app->uses('system'); + //* Check if the resulting path is inside the docroot + $web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['new']['parent_domain_id'])); + if(substr(realpath($data['new']['dir']),0,strlen($web['document_root'])) != $web['document_root']) { + $app->log('Directory of the shell user is outside of website docroot.',LOGLEVEL_WARN); + return false; + } + if($app->system->is_user($data['new']['puser'])) { + + //* Remove webfolder protection + $app->system->web_folder_protection($web['document_root'],false); + // Get the UID of the parent user $uid = intval($app->system->getuid($data['new']['puser'])); if($uid > $this->min_uid) { @@ -107,6 +118,9 @@ exec($command); $app->log("Disabling shelluser temporarily: ".$command,LOGLEVEL_DEBUG); } + + //* Add webfolder protection again + $app->system->web_folder_protection($web['document_root'],true); } else { $app->log("UID = $uid for shelluser:".$data['new']['username']." not allowed.",LOGLEVEL_ERROR); @@ -121,6 +135,13 @@ $app->uses('system'); + //* Check if the resulting path is inside the docroot + $web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".intval($data['new']['parent_domain_id'])); + if(substr(realpath($data['new']['dir']),0,strlen($web['document_root'])) != $web['document_root']) { + $app->log('Directory of the shell user is outside of website docroot.',LOGLEVEL_WARN); + return false; + } + if($app->system->is_user($data['new']['puser'])) { // Get the UID of the parent user $uid = intval($app->system->getuid($data['new']['puser'])); -- Gitblit v1.9.1