forked from extern/egroupware
Finally fixed creation and rename of home directories:
- egw_vfs::stat and egw_vfs_stream_wrapper::url_stat now both have a parameter $try_create_home=false, which do not create a non-existing home-directory by default. - filemanger_ui calls egw_vfs::stat($path,true) to create an evtl. missing home dir (in case it does not exist because of previous problems) --> fixes not working home-dir creation or rename, because url_stat already tried to create the home-dir
This commit is contained in:
parent
979466c1fc
commit
fcb8f3497c
@ -102,7 +102,7 @@ class filemanager_ui
|
|||||||
if (isset($_GET['msg'])) $msg = $_GET['msg'];
|
if (isset($_GET['msg'])) $msg = $_GET['msg'];
|
||||||
if (isset($_GET['path']) && ($path = $_GET['path']))
|
if (isset($_GET['path']) && ($path = $_GET['path']))
|
||||||
{
|
{
|
||||||
if ($path[0] == '/' && egw_vfs::is_dir($path) && egw_vfs::check_access($path,egw_vfs::READABLE))
|
if ($path[0] == '/' && egw_vfs::stat($path,true) && egw_vfs::is_dir($path) && egw_vfs::check_access($path,egw_vfs::READABLE))
|
||||||
{
|
{
|
||||||
$content['nm']['path'] = $path;
|
$content['nm']['path'] = $path;
|
||||||
}
|
}
|
||||||
@ -224,7 +224,7 @@ class filemanager_ui
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!egw_vfs::is_dir($content['nm']['path']))
|
if (!egw_vfs::stat($content['nm']['path'],true) || !egw_vfs::is_dir($content['nm']['path']))
|
||||||
{
|
{
|
||||||
$content['nm']['msg'] .= ' '.lang('Directory not found or no permission to access it!');
|
$content['nm']['msg'] .= ' '.lang('Directory not found or no permission to access it!');
|
||||||
}
|
}
|
||||||
@ -489,7 +489,7 @@ class filemanager_ui
|
|||||||
{
|
{
|
||||||
$GLOBALS['egw']->session->appsession('index','filemanager',$query);
|
$GLOBALS['egw']->session->appsession('index','filemanager',$query);
|
||||||
|
|
||||||
if (!egw_vfs::is_dir($query['path']) || !egw_vfs::check_access($query['path'],egw_vfs::READABLE))
|
if (!egw_vfs::stat($query['path'],true) || !egw_vfs::is_dir($query['path']) || !egw_vfs::check_access($query['path'],egw_vfs::READABLE))
|
||||||
{
|
{
|
||||||
// we will leave here, since we are not allowed, or the location does not exist. Index must handle that, and give
|
// we will leave here, since we are not allowed, or the location does not exist. Index must handle that, and give
|
||||||
// an appropriate message
|
// an appropriate message
|
||||||
|
@ -169,15 +169,16 @@ class egw_vfs extends vfs_stream_wrapper
|
|||||||
* stat working on just the eGW VFS (alias of url_stat)
|
* stat working on just the eGW VFS (alias of url_stat)
|
||||||
*
|
*
|
||||||
* @param string $path filename with absolute path in the eGW VFS
|
* @param string $path filename with absolute path in the eGW VFS
|
||||||
|
* @param boolean $try_create_home=false should a non-existing home-directory be automatically created
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function stat($path)
|
static function stat($path,$try_create_home=false)
|
||||||
{
|
{
|
||||||
if ($path[0] != '/')
|
if ($path[0] != '/')
|
||||||
{
|
{
|
||||||
throw new egw_exception_assertion_failed("File '$path' is not an absolute path!");
|
throw new egw_exception_assertion_failed("File '$path' is not an absolute path!");
|
||||||
}
|
}
|
||||||
if (($stat = self::url_stat($path,0)))
|
if (($stat = self::url_stat($path,0,$try_create_home)))
|
||||||
{
|
{
|
||||||
$stat = array_slice($stat,13); // remove numerical indices 0-12
|
$stat = array_slice($stat,13); // remove numerical indices 0-12
|
||||||
}
|
}
|
||||||
@ -188,15 +189,16 @@ class egw_vfs extends vfs_stream_wrapper
|
|||||||
* lstat (not resolving symbolic links) working on just the eGW VFS (alias of url_stat)
|
* lstat (not resolving symbolic links) working on just the eGW VFS (alias of url_stat)
|
||||||
*
|
*
|
||||||
* @param string $path filename with absolute path in the eGW VFS
|
* @param string $path filename with absolute path in the eGW VFS
|
||||||
|
* @param boolean $try_create_home=false should a non-existing home-directory be automatically created
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function lstat($path)
|
static function lstat($path,$try_create_home=false)
|
||||||
{
|
{
|
||||||
if ($path[0] != '/')
|
if ($path[0] != '/')
|
||||||
{
|
{
|
||||||
throw new egw_exception_assertion_failed("File '$path' is not an absolute path!");
|
throw new egw_exception_assertion_failed("File '$path' is not an absolute path!");
|
||||||
}
|
}
|
||||||
if (($stat = self::url_stat($path,STREAM_URL_STAT_LINK)))
|
if (($stat = self::url_stat($path,STREAM_URL_STAT_LINK,$try_create_home)))
|
||||||
{
|
{
|
||||||
$stat = array_slice($stat,13); // remove numerical indices 0-12
|
$stat = array_slice($stat,13); // remove numerical indices 0-12
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ class vfs_home_hooks
|
|||||||
if (self::LOG_LEVEL > 0) error_log(__METHOD__.'('.array2string($data).')');
|
if (self::LOG_LEVEL > 0) error_log(__METHOD__.'('.array2string($data).')');
|
||||||
// create a user-dir
|
// create a user-dir
|
||||||
egw_vfs::$is_root = true;
|
egw_vfs::$is_root = true;
|
||||||
if (@egw_vfs::mkdir($dir='/home/'.$data['account_lid'],0700,0))
|
if (egw_vfs::mkdir($dir='/home/'.$data['account_lid'],0700,0))
|
||||||
{
|
{
|
||||||
egw_vfs::chown($dir,$data['account_id']);
|
egw_vfs::chown($dir,$data['account_id']);
|
||||||
egw_vfs::chgrp($dir,0);
|
egw_vfs::chgrp($dir,0);
|
||||||
@ -109,7 +109,7 @@ class vfs_home_hooks
|
|||||||
if (self::LOG_LEVEL > 0) error_log(__METHOD__.'('.array2string($data).')');
|
if (self::LOG_LEVEL > 0) error_log(__METHOD__.'('.array2string($data).')');
|
||||||
// create a group-dir
|
// create a group-dir
|
||||||
egw_vfs::$is_root = true;
|
egw_vfs::$is_root = true;
|
||||||
if (@egw_vfs::mkdir($dir='/home/'.$data['account_name'],070,0))
|
if (egw_vfs::mkdir($dir='/home/'.$data['account_name'],0070,0))
|
||||||
{
|
{
|
||||||
egw_vfs::chown($dir,0);
|
egw_vfs::chown($dir,0);
|
||||||
egw_vfs::chgrp($dir,$data['account_id']);
|
egw_vfs::chgrp($dir,$data['account_id']);
|
||||||
|
@ -690,11 +690,11 @@ class vfs_stream_wrapper implements iface_stream_wrapper
|
|||||||
* - STREAM_URL_STAT_QUIET If this flag is set, your wrapper should not raise any errors. If this flag is not set,
|
* - STREAM_URL_STAT_QUIET If this flag is set, your wrapper should not raise any errors. If this flag is not set,
|
||||||
* you are responsible for reporting errors using the trigger_error() function during stating of the path.
|
* you are responsible for reporting errors using the trigger_error() function during stating of the path.
|
||||||
* stat triggers it's own warning anyway, so it makes no sense to trigger one by our stream-wrapper!
|
* stat triggers it's own warning anyway, so it makes no sense to trigger one by our stream-wrapper!
|
||||||
* @param boolean $try_create_home=true should a user home-directory be created automatic, if it does not exist
|
* @param boolean $try_create_home=false should a user home-directory be created automatic, if it does not exist
|
||||||
* @param boolean $check_symlink_components=true check if path contains symlinks in path components other then the last one
|
* @param boolean $check_symlink_components=true check if path contains symlinks in path components other then the last one
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
static function url_stat ( $path, $flags, $try_create_home=true, $check_symlink_components=true )
|
static function url_stat ( $path, $flags, $try_create_home=false, $check_symlink_components=true )
|
||||||
{
|
{
|
||||||
if (self::LOG_LEVEL > 1) error_log(__METHOD__."('$path',$flags,try_create_home=$try_create_home,check_symlink_components=$check_symlink_components)");
|
if (self::LOG_LEVEL > 1) error_log(__METHOD__."('$path',$flags,try_create_home=$try_create_home,check_symlink_components=$check_symlink_components)");
|
||||||
|
|
||||||
@ -728,8 +728,7 @@ class vfs_stream_wrapper implements iface_stream_wrapper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// check if a failed url_stat was for a home dir, in that case silently create it
|
// check if a failed url_stat was for a home dir, in that case silently create it
|
||||||
static $hook_data; // we have to make sure to not call ourself recursivly (eg. mkdir will call stat to make sure the dir does not yet exist!)
|
if (!$stat && $try_create_home && dirname(parse_url($path,PHP_URL_PATH)) == '/home' &&
|
||||||
if (!$stat && is_null($hook_data) && dirname(parse_url($path,PHP_URL_PATH)) == '/home' &&
|
|
||||||
($id = $GLOBALS['egw']->accounts->name2id(basename($path))) &&
|
($id = $GLOBALS['egw']->accounts->name2id(basename($path))) &&
|
||||||
$GLOBALS['egw']->accounts->id2name($id) == basename($path)) // make sure path has the right case!
|
$GLOBALS['egw']->accounts->id2name($id) == basename($path)) // make sure path has the right case!
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user