From 5aa044f184f3f13198b42adfa87d7357cb2677ff Mon Sep 17 00:00:00 2001 From: reminder2352 Date: Tue, 2 Sep 2025 11:34:59 +0800 Subject: [PATCH] fix filemanager bundle uid Signed-off-by: reminder2352 --- .../include/cloud_disk/cloud_disk_inode.h | 1 - .../src/cloud_disk/file_operations_cloud.cpp | 26 +++++++++---------- .../src/fuse_manager/fuse_manager.cpp | 2 -- .../cloud_disk/cloud_file_utils_test.cpp | 18 ++----------- utils/cloud_disk/src/cloud_file_utils.cpp | 15 +---------- utils/inner_api/cloud_file_utils.h | 3 +-- 6 files changed, 16 insertions(+), 49 deletions(-) diff --git a/services/cloudfiledaemon/include/cloud_disk/cloud_disk_inode.h b/services/cloudfiledaemon/include/cloud_disk/cloud_disk_inode.h index bf10fac04..f037ebc50 100644 --- a/services/cloudfiledaemon/include/cloud_disk/cloud_disk_inode.h +++ b/services/cloudfiledaemon/include/cloud_disk/cloud_disk_inode.h @@ -100,7 +100,6 @@ struct CloudDiskFuseData { std::shared_mutex fileIdLock; std::shared_mutex localIdLock; struct fuse_session *se; - std::string fileMgrBundle {""}; }; } // namespace CloudDisk } // namespace FileManagement diff --git a/services/cloudfiledaemon/src/cloud_disk/file_operations_cloud.cpp b/services/cloudfiledaemon/src/cloud_disk/file_operations_cloud.cpp index 66b5caa8b..089d3a7b0 100644 --- a/services/cloudfiledaemon/src/cloud_disk/file_operations_cloud.cpp +++ b/services/cloudfiledaemon/src/cloud_disk/file_operations_cloud.cpp @@ -380,11 +380,10 @@ static unsigned int GetFileOpenFlags(int32_t fileFlags) return flags; } -static int32_t CheckBucketPath(const string &cloudId, const string &bundleName, - struct CloudDiskFuseData *data, string tmpPath) +static int32_t CheckBucketPath(const string &cloudId, const string &bundleName, int32_t userId, string tmpPath) { - string baseDir = CloudFileUtils::GetLocalBaseDir(bundleName, data->userId); - string bucketPath = CloudFileUtils::GetLocalBucketPath(cloudId, bundleName, data->userId); + string baseDir = CloudFileUtils::GetLocalBaseDir(bundleName, userId); + string bucketPath = CloudFileUtils::GetLocalBucketPath(cloudId, bundleName, userId); if (access(baseDir.c_str(), F_OK) != 0) { LOGE("bucket path's parent directory not exits, errno=%{public}d", errno); auto accessErrno = errno; @@ -405,7 +404,7 @@ static int32_t CheckBucketPath(const string &cloudId, const string &bundleName, return mkdirErrno; } LOGW("mkdir bucketPath success"); - CloudFileUtils::ChangeUid(data->userId, bundleName, data->fileMgrBundle, STAT_MODE_DIR, bucketPath); + CloudFileUtils::ChangeUid(userId, bundleName, STAT_MODE_DIR, bucketPath); } return EOK; } @@ -419,7 +418,7 @@ static int32_t HandleCloudOpenSuccess(struct fuse_file_info *fi, struct CloudDis if (metaBase.fileType != FILE_TYPE_CONTENT) { string path = CloudFileUtils::GetLocalFilePath(inoPtr->cloudId, inoPtr->bundleName, data->userId); string tmpPath = CloudFileUtils::GetLocalDKCachePath(inoPtr->cloudId, inoPtr->bundleName, data->userId); - auto ret = CheckBucketPath(inoPtr->cloudId, inoPtr->bundleName, data, tmpPath); + auto ret = CheckBucketPath(inoPtr->cloudId, inoPtr->bundleName, data->userId, tmpPath); if (ret != EOK) { LOGE("check bucketPath failed, ret = %{public}d", ret); return ret; @@ -435,7 +434,7 @@ static int32_t HandleCloudOpenSuccess(struct fuse_file_info *fi, struct CloudDis GetAnonyString(tmpPath).c_str(), errno); return errno; } - CloudFileUtils::ChangeUid(data->userId, inoPtr->bundleName, data->fileMgrBundle, STAT_MODE_REG, path); + CloudFileUtils::ChangeUid(data->userId, inoPtr->bundleName, STAT_MODE_REG, path); } unsigned int flags = GetFileOpenFlags(fi->flags); int32_t fd = open(path.c_str(), flags); @@ -703,12 +702,11 @@ void FileOperationsCloud::Open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_ } } -static int32_t CreateLocalFile(const string &cloudId, const string &bundleName, - struct CloudDiskFuseData *data, mode_t mode) +static int32_t CreateLocalFile(const string &cloudId, const string &bundleName, int32_t userId, mode_t mode) { HITRACE_METER_NAME(HITRACE_TAG_FILEMANAGEMENT, __PRETTY_FUNCTION__); - string bucketPath = CloudFileUtils::GetLocalBucketPath(cloudId, bundleName, data->userId); - string path = CloudFileUtils::GetLocalFilePath(cloudId, bundleName, data->userId); + string bucketPath = CloudFileUtils::GetLocalBucketPath(cloudId, bundleName, userId); + string path = CloudFileUtils::GetLocalFilePath(cloudId, bundleName, userId); if (access(bucketPath.c_str(), F_OK) != 0) { if (mkdir(bucketPath.c_str(), STAT_MODE_DIR) != 0) { CLOUD_FILE_FAULT_REPORT(CloudFile::CloudFileFaultInfo{"", CloudFile::FaultOperation::MKNOD, @@ -716,7 +714,7 @@ static int32_t CreateLocalFile(const string &cloudId, const string &bundleName, " err: " + std::to_string(errno)}); return -errno; } - CloudFileUtils::ChangeUid(data->userId, bundleName, data->fileMgrBundle, STAT_MODE_DIR, bucketPath); + CloudFileUtils::ChangeUid(userId, bundleName, STAT_MODE_DIR, bucketPath); } int32_t fd = open(path.c_str(), (mode & O_NOFOLLOW) | O_CREAT | O_RDWR, STAT_MODE_REG); if (fd < 0) { @@ -725,7 +723,7 @@ static int32_t CreateLocalFile(const string &cloudId, const string &bundleName, " err: " + std::to_string(errno)}); return -errno; } - CloudFileUtils::ChangeUid(data->userId, bundleName, data->fileMgrBundle, STAT_MODE_REG, path); + CloudFileUtils::ChangeUid(userId, bundleName, STAT_MODE_REG, path); return fd; } @@ -798,7 +796,7 @@ int32_t DoCreatFile(fuse_req_t req, fuse_ino_t parent, const char *name, CloudFile::FaultType::FILE, err, "Failed to generate cloud id"}); return -err; } - int32_t fd = CreateLocalFile(cloudId, parentInode->bundleName, data, mode); + int32_t fd = CreateLocalFile(cloudId, parentInode->bundleName, data->userId, mode); if (fd < 0) { LOGD("Create local file failed error:%{public}d", fd); return fd; diff --git a/services/cloudfiledaemon/src/fuse_manager/fuse_manager.cpp b/services/cloudfiledaemon/src/fuse_manager/fuse_manager.cpp index 0611fd392..61fce7195 100644 --- a/services/cloudfiledaemon/src/fuse_manager/fuse_manager.cpp +++ b/services/cloudfiledaemon/src/fuse_manager/fuse_manager.cpp @@ -78,7 +78,6 @@ static const string LOCAL_PATH_HMDFS_CLOUD_CACHE = "/hmdfs/cache/cloud_cache"; static const string DEVICE_VIEW_PHOTOS_PATH = "/account/device_view/local/data/"; static const string CLOUD_CACHE_DIR = "/.video_cache"; static const string PHOTOS_KEY = "persist.kernel.bundle_name.photos"; -static const string FILEMGR_KEY = "persist.kernel.bundle_name.filemanager"; static const string CLOUD_CACHE_XATTR_NAME = "user.cloud.cacheMap"; static const string VIDEO_TYPE_PREFIX = "VID_"; static const string HMDFS_PATH_PREFIX = "/mnt/hmdfs/"; @@ -1928,7 +1927,6 @@ int32_t FuseManager::StartFuse(int32_t userId, int32_t devFd, const string &path } cloudDiskData.userId = userId; cloudDiskData.se = se; - cloudDiskData.fileMgrBundle = system::GetParameter(FILEMGR_KEY, ""); config.max_idle_threads = 1; std::lock_guard lock(sessionMutex_); sessions_[path] = se; diff --git a/test/unittests/utils/cloud_disk/cloud_file_utils_test.cpp b/test/unittests/utils/cloud_disk/cloud_file_utils_test.cpp index fd7033431..d6be3e971 100644 --- a/test/unittests/utils/cloud_disk/cloud_file_utils_test.cpp +++ b/test/unittests/utils/cloud_disk/cloud_file_utils_test.cpp @@ -249,24 +249,10 @@ HWTEST_F(CloudFileUtilsTest, CloudFileUtils_ChangeUid, TestSize.Level1) string bundleName = ""; uint32_t mode = 0771; string path = ""; - string fileMgrBundle = ""; - string tempBundle = system::GetParameter(FILEMANAGER_KEY, ""); - CloudFileUtils::ChangeUid(userId, bundleName, fileMgrBundle, mode, path); + CloudFileUtils::ChangeUid(userId, bundleName, mode, path); bundleName = "com.ohos.camera"; - fileMgrBundle = system::GetParameter(FILEMANAGER_KEY, ""); - CloudFileUtils::ChangeUid(userId, bundleName, fileMgrBundle, mode, path); - - bundleName = system::GetParameter(FILEMANAGER_KEY, ""); - CloudFileUtils::ChangeUid(userId, bundleName, fileMgrBundle, mode, path); - - fileMgrBundle = ""; - CloudFileUtils::ChangeUid(userId, bundleName, fileMgrBundle, mode, path); - - fileMgrBundle = ""; - system::SetParameter(FILEMANAGER_KEY, ""); - CloudFileUtils::ChangeUid(userId, bundleName, fileMgrBundle, mode, path); - system::SetParameter(FILEMANAGER_KEY, tempBundle); + CloudFileUtils::ChangeUid(userId, bundleName, mode, path); EXPECT_TRUE(true); } catch (...) { EXPECT_TRUE(false); diff --git a/utils/cloud_disk/src/cloud_file_utils.cpp b/utils/cloud_disk/src/cloud_file_utils.cpp index 991c7bcb5..224525427 100644 --- a/utils/cloud_disk/src/cloud_file_utils.cpp +++ b/utils/cloud_disk/src/cloud_file_utils.cpp @@ -43,8 +43,6 @@ namespace { static const uint64_t DELTA_DISK = 0x9E3779B9; static const uint64_t HMDFS_HASH_COL_BIT_DISK = (0x1ULL) << 63; static const int32_t OID_DFS = 1009; - static const int32_t UID_BASE = 200000; - static const string FILEMGR_KEY = "persist.kernel.bundle_name.filemanager"; } const string CloudFileUtils::TMP_SUFFIX = ".temp.download"; @@ -404,8 +402,7 @@ string CloudFileUtils::GetRealPath(const string &path) return realPath.string(); } -void CloudFileUtils::ChangeUid(int32_t userId, const string &bundleName, string fileMgrBundle, - uint32_t mode, const string &path) +void CloudFileUtils::ChangeUid(int32_t userId, const string &bundleName, uint32_t mode, const string &path) { string baseDir = GetLocalBaseDir(bundleName, userId); struct stat baseInfo{}; @@ -415,16 +412,6 @@ void CloudFileUtils::ChangeUid(int32_t userId, const string &bundleName, string } uid_t bundleUid = baseInfo.st_uid; - if (fileMgrBundle == "") { - fileMgrBundle = system::GetParameter(FILEMGR_KEY, ""); - if (fileMgrBundle == "") { - LOGE("chmod and chown faild, get fileMgr bundle faild."); - return; - } - } - if (bundleName == fileMgrBundle) { - bundleUid = UID_BASE * userId + OID_DFS % UID_BASE; - } ChangeUidByPath(path, mode, bundleUid); } diff --git a/utils/inner_api/cloud_file_utils.h b/utils/inner_api/cloud_file_utils.h index d35b1a8bc..397ad76fb 100644 --- a/utils/inner_api/cloud_file_utils.h +++ b/utils/inner_api/cloud_file_utils.h @@ -79,8 +79,7 @@ public: static void TeaTransform(uint32_t buf[4], uint32_t const in[]); static void Str2HashBuf(const char *msg, size_t len, uint32_t *buf, int num); static bool IsDotDotdot(const std::string &name); - static void ChangeUid(int32_t userId, const std::string &bundleName, std::string fileMgrBundle, - uint32_t mode, const std::string &path); + static void ChangeUid(int32_t userId, const std::string &bundleName, uint32_t mode, const std::string &path); static void ChangeUidByCloudId(int32_t userId, const std::string &bundleName, const std::string &cloudId, uint32_t mode, uid_t uid); static void ChangeUidByPath(const std::string &path, mode_t mode, uid_t uid); -- Gitee