forked from extern/egroupware
implement readonly mounts and use that for sharing
This commit is contained in:
parent
16c27de80a
commit
1affa826b1
@ -73,6 +73,11 @@ class egw_sharing
|
|||||||
common::egw_exit();
|
common::egw_exit();
|
||||||
}
|
}
|
||||||
$share['resolve_url'] = egw_vfs::resolve_url($share['share_path']);
|
$share['resolve_url'] = egw_vfs::resolve_url($share['share_path']);
|
||||||
|
// if share not writable append ro=1 to mount url to make it readonly
|
||||||
|
if (!$this->db->from_bool($share['share_writable']))
|
||||||
|
{
|
||||||
|
$share['resolve_url'] .= (strpos($share['resolve_url'], '?') ? '&' : '?').'ro=1';
|
||||||
|
}
|
||||||
//_debug_array($share);
|
//_debug_array($share);
|
||||||
|
|
||||||
// arrange vfs to only contain shared url
|
// arrange vfs to only contain shared url
|
||||||
|
@ -717,6 +717,7 @@ class egw_vfs extends vfs_stream_wrapper
|
|||||||
*
|
*
|
||||||
* @param string|array $urls url or array of url's
|
* @param string|array $urls url or array of url's
|
||||||
* @param boolean $allow_urls=false allow to use url's, default no only pathes (to stay within the vfs)
|
* @param boolean $allow_urls=false allow to use url's, default no only pathes (to stay within the vfs)
|
||||||
|
* @throws egw_exception_assertion_failed when trainig to remove /, /apps or /home
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function remove($urls,$allow_urls=false)
|
static function remove($urls,$allow_urls=false)
|
||||||
|
@ -293,6 +293,10 @@ class vfs_stream_wrapper implements iface_stream_wrapper
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if ($mode != 'r' && self::url_is_readonly($url))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!($this->opened_stream = fopen($url,$mode,$options)))
|
if (!($this->opened_stream = fopen($url,$mode,$options)))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -463,6 +467,10 @@ class vfs_stream_wrapper implements iface_stream_wrapper
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (self::url_is_readonly($url))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
$stat = self::url_stat($path, STREAM_URL_STAT_LINK);
|
$stat = self::url_stat($path, STREAM_URL_STAT_LINK);
|
||||||
|
|
||||||
self::symlinkCache_remove($path);
|
self::symlinkCache_remove($path);
|
||||||
@ -583,6 +591,10 @@ class vfs_stream_wrapper implements iface_stream_wrapper
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (self::url_is_readonly($url))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
$stat = self::url_stat($path, STREAM_URL_STAT_LINK);
|
$stat = self::url_stat($path, STREAM_URL_STAT_LINK);
|
||||||
|
|
||||||
self::symlinkCache_remove($path);
|
self::symlinkCache_remove($path);
|
||||||
@ -957,6 +969,10 @@ class vfs_stream_wrapper implements iface_stream_wrapper
|
|||||||
{
|
{
|
||||||
$stat['url'] = $url;
|
$stat['url'] = $url;
|
||||||
}
|
}
|
||||||
|
if (($stat['mode'] & 0222) && self::url_is_readonly($stat['url']))
|
||||||
|
{
|
||||||
|
$stat['mode'] &= ~0222;
|
||||||
|
}
|
||||||
if (self::LOG_LEVEL > 1) error_log(__METHOD__."('$path',$flags,try_create_home=$try_create_home,check_symlink_components=$check_symlink_components) returning ".array2string($stat));
|
if (self::LOG_LEVEL > 1) error_log(__METHOD__."('$path',$flags,try_create_home=$try_create_home,check_symlink_components=$check_symlink_components) returning ".array2string($stat));
|
||||||
|
|
||||||
return $stat;
|
return $stat;
|
||||||
@ -1311,6 +1327,24 @@ class vfs_stream_wrapper implements iface_stream_wrapper
|
|||||||
return $path;
|
return $path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if url contains ro=1 parameter to mark mount readonly
|
||||||
|
*
|
||||||
|
* @param string $url
|
||||||
|
* @return boolean
|
||||||
|
*/
|
||||||
|
static function url_is_readonly($url)
|
||||||
|
{
|
||||||
|
static $cache = array();
|
||||||
|
$ret =& $cache[$url];
|
||||||
|
if (!isset($ret))
|
||||||
|
{
|
||||||
|
$matches = null;
|
||||||
|
$ret = preg_match('/?(.*&)?ro=([^&]+)/', $url, $matches) && $matches[1];
|
||||||
|
}
|
||||||
|
return $ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Init our static properties and register this wrapper
|
* Init our static properties and register this wrapper
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user