chansrv FUSE fixes

1) [Regression] If the specified mountpoint is not immediately below an
   existing directory, the directory is not created.
2) The message to ask the user to unmount an existing mounted directory
   has been moved to the right place.
This commit is contained in:
matt335672 2024-05-21 12:33:17 +01:00
parent 98d0003715
commit e0a1339b34

View File

@ -540,10 +540,25 @@ xfuse_init(void)
return -1;
}
g_snprintf(g_fuse_clipboard_path, 255, "%s/.clipboard", g_fuse_root_path);
g_snprintf(g_fuse_clipboard_path, sizeof(g_fuse_clipboard_path),
"%s/.clipboard", g_fuse_root_path);
/* if FUSE mount point does not exist, create it */
if (!g_directory_exist(g_fuse_root_path))
{
(void)g_create_path(g_fuse_root_path);
if (!g_create_dir(g_fuse_root_path))
{
LOG(LOG_LEVEL_ERROR, "mkdir %s failed (%s)",
g_fuse_root_path, g_get_strerror());
return -1;
}
}
/* Get the characteristics of the parent directory of the FUSE mount
* point. Used by xfuse_path_in_xfuse_fs() */
g_fuse_root_parent_dev = -1;
g_fuse_root_parent_ino = -1;
p = (char *)g_strrchr(g_fuse_root_path, '/');
if (p != NULL)
{
@ -554,11 +569,6 @@ xfuse_init(void)
g_fuse_root_parent_ino = g_file_get_inode_num(g_fuse_root_path);
*p = '/';
}
else
{
g_fuse_root_parent_dev = -1;
g_fuse_root_parent_ino = -1;
}
if (g_fuse_root_parent_dev == -1 || g_fuse_root_parent_ino == -1)
{
@ -568,18 +578,6 @@ xfuse_init(void)
return -1;
}
/* if FUSE mount point does not exist, create it */
if (!g_directory_exist(g_fuse_root_path))
{
(void)g_create_path(g_fuse_root_path);
if (!g_create_dir(g_fuse_root_path))
{
LOG(LOG_LEVEL_ERROR, "mkdir %s failed. If %s is already mounted, you must "
"first unmount it", g_fuse_root_path, g_fuse_root_path);
return -1;
}
}
/* setup xrdp file system */
if (xfuse_init_xrdp_fs())
{
@ -906,14 +904,16 @@ static int xfuse_init_lib(struct fuse_args *args)
{
if (fuse_parse_cmdline(args, &g_mount_point, 0, 0) < 0)
{
LOG_DEVEL(LOG_LEVEL_ERROR, "fuse_parse_cmdline() failed");
LOG(LOG_LEVEL_ERROR, "fuse_parse_cmdline() failed");
fuse_opt_free_args(args);
return -1;
}
if ((g_ch = fuse_mount(g_mount_point, args)) == 0)
{
LOG_DEVEL(LOG_LEVEL_ERROR, "fuse_mount() failed");
LOG(LOG_LEVEL_ERROR, "FUSE mount on %s failed."
" If %s is already mounted, you must first unmount it",
g_mount_point, g_mount_point);
fuse_opt_free_args(args);
return -1;
}
@ -921,7 +921,7 @@ static int xfuse_init_lib(struct fuse_args *args)
g_se = fuse_lowlevel_new(args, &g_xfuse_ops, sizeof(g_xfuse_ops), 0);
if (g_se == 0)
{
LOG_DEVEL(LOG_LEVEL_ERROR, "fuse_lowlevel_new() failed");
LOG(LOG_LEVEL_ERROR, "fuse_lowlevel_new() failed");
fuse_unmount(g_mount_point, g_ch);
g_ch = 0;
fuse_opt_free_args(args);