From e0a1339b34b0d235e93efaf2c512c7284548d20b Mon Sep 17 00:00:00 2001 From: matt335672 <30179339+matt335672@users.noreply.github.com> Date: Tue, 21 May 2024 12:33:17 +0100 Subject: [PATCH] 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. --- sesman/chansrv/chansrv_fuse.c | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/sesman/chansrv/chansrv_fuse.c b/sesman/chansrv/chansrv_fuse.c index 9692b46f..7bda4012 100644 --- a/sesman/chansrv/chansrv_fuse.c +++ b/sesman/chansrv/chansrv_fuse.c @@ -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);