mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-23 16:33:17 +01:00
use stat values for uid, gid and mode only for EGroupware stream wrapper, for stock PHP ones use is_(readable|writable|executable), do NOT check urls with placeholders on mount
This commit is contained in:
parent
f95cdd8006
commit
16213a58a3
@ -276,10 +276,14 @@ class egw_vfs extends vfs_stream_wrapper
|
|||||||
*
|
*
|
||||||
* @param string $url=null url of the filesystem to mount, eg. oldvfs://default/
|
* @param string $url=null url of the filesystem to mount, eg. oldvfs://default/
|
||||||
* @param string $path=null path to mount the filesystem in the vfs, eg. /
|
* @param string $path=null path to mount the filesystem in the vfs, eg. /
|
||||||
* @return array/boolean array with fstab, if called without parameter or true on successful mount
|
* @param boolean $check_url=null check if url is an existing directory, before mounting it
|
||||||
|
* default null only checks if url does not contain a $ as used in $user or $pass
|
||||||
|
* @return array|boolean array with fstab, if called without parameter or true on successful mount
|
||||||
*/
|
*/
|
||||||
static function mount($url=null,$path=null)
|
static function mount($url=null,$path=null,$check_url=null)
|
||||||
{
|
{
|
||||||
|
if (is_null($check_url)) $check_url = strpos($url,'$') === false;
|
||||||
|
|
||||||
if (!isset($GLOBALS['egw_info']['server']['vfs_fstab'])) // happens eg. in setup
|
if (!isset($GLOBALS['egw_info']['server']['vfs_fstab'])) // happens eg. in setup
|
||||||
{
|
{
|
||||||
$api_config = config::read('phpgwapi');
|
$api_config = config::read('phpgwapi');
|
||||||
@ -306,7 +310,7 @@ class egw_vfs extends vfs_stream_wrapper
|
|||||||
}
|
}
|
||||||
self::load_wrapper(parse_url($url,PHP_URL_SCHEME));
|
self::load_wrapper(parse_url($url,PHP_URL_SCHEME));
|
||||||
|
|
||||||
if (!file_exists($url) || opendir($url) === false)
|
if ($check_url && (!file_exists($url) || opendir($url) === false))
|
||||||
{
|
{
|
||||||
if (self::LOG_LEVEL > 0) error_log(__METHOD__.'('.array2string($url).','.array2string($path).') url does NOT exist!');
|
if (self::LOG_LEVEL > 0) error_log(__METHOD__.'('.array2string($url).','.array2string($path).') url does NOT exist!');
|
||||||
return false; // url does not exist
|
return false; // url does not exist
|
||||||
@ -702,10 +706,11 @@ class egw_vfs extends vfs_stream_wrapper
|
|||||||
* which is wrong in case of our vfs, as we use the current users id and memberships
|
* which is wrong in case of our vfs, as we use the current users id and memberships
|
||||||
*
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @param int $check=4 mode to check: 4 = read, 2 = write, 1 = executable
|
* @param int $check mode to check: one or more or'ed together of: 4 = egw_vfs::READABLE,
|
||||||
|
* 2 = egw_vfs::WRITABLE, 1 = egw_vfs::EXECUTABLE
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
static function is_readable($path,$check = 4)
|
static function is_readable($path,$check = self::READABLE)
|
||||||
{
|
{
|
||||||
return self::check_access($path,$check);
|
return self::check_access($path,$check);
|
||||||
}
|
}
|
||||||
@ -715,7 +720,8 @@ class egw_vfs extends vfs_stream_wrapper
|
|||||||
* which is wrong in case of our vfs, as we use the current users id and memberships
|
* which is wrong in case of our vfs, as we use the current users id and memberships
|
||||||
*
|
*
|
||||||
* @param array/string $path stat array or path
|
* @param array/string $path stat array or path
|
||||||
* @param int $check mode to check: one or more or'ed together of: 4 = read, 2 = write, 1 = executable
|
* @param int $check mode to check: one or more or'ed together of: 4 = egw_vfs::READABLE,
|
||||||
|
* 2 = egw_vfs::WRITABLE, 1 = egw_vfs::EXECUTABLE
|
||||||
* @param array $stat=null stat array, to not query it again
|
* @param array $stat=null stat array, to not query it again
|
||||||
* @return boolean
|
* @return boolean
|
||||||
*/
|
*/
|
||||||
@ -743,6 +749,20 @@ class egw_vfs extends vfs_stream_wrapper
|
|||||||
//error_log(__METHOD__."(path=$path||stat[name]={$stat['name']},stat[mode]=".sprintf('%o',$stat['mode']).",$check) no stat array!");
|
//error_log(__METHOD__."(path=$path||stat[name]={$stat['name']},stat[mode]=".sprintf('%o',$stat['mode']).",$check) no stat array!");
|
||||||
return false; // file not found
|
return false; // file not found
|
||||||
}
|
}
|
||||||
|
// check if we use an EGroupwre stream wrapper, or a stock php one
|
||||||
|
// if it's not an EGroupware one, we can NOT use uid, gid and mode!
|
||||||
|
if (($scheme = parse_url($stat['url'],PHP_URL_SCHEME)) && !(class_exists(self::scheme2class($scheme))))
|
||||||
|
{
|
||||||
|
switch($check)
|
||||||
|
{
|
||||||
|
case self::READABLE:
|
||||||
|
return is_readable($stat['url']);
|
||||||
|
case self::WRITABLE:
|
||||||
|
return is_writable($stat['url']);
|
||||||
|
case self::EXECUTABLE:
|
||||||
|
return is_executable($stat['url']);
|
||||||
|
}
|
||||||
|
}
|
||||||
// check if other rights grant access
|
// check if other rights grant access
|
||||||
if (($stat['mode'] & $check) == $check)
|
if (($stat['mode'] & $check) == $check)
|
||||||
{
|
{
|
||||||
@ -785,7 +805,7 @@ class egw_vfs extends vfs_stream_wrapper
|
|||||||
*/
|
*/
|
||||||
static function is_writable($path)
|
static function is_writable($path)
|
||||||
{
|
{
|
||||||
return self::is_readable($path,2);
|
return self::is_readable($path,self::WRITABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -797,7 +817,7 @@ class egw_vfs extends vfs_stream_wrapper
|
|||||||
*/
|
*/
|
||||||
static function is_executable($path)
|
static function is_executable($path)
|
||||||
{
|
{
|
||||||
return self::is_readable($path,1);
|
return self::is_readable($path,self::EXECUTABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user