From 9eefbc74213610ae203a5d6b144f18700040cdee Mon Sep 17 00:00:00 2001 From: panqiangbiao Date: Wed, 2 Mar 2022 14:32:35 +0800 Subject: [PATCH 1/3] block permission check temporarily Signed-off-by: panqiangbiao --- services/etc/fms_service.cfg | 2 +- .../src/server/file_manager_service_stub.cpp | 20 +++++++------------ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/services/etc/fms_service.cfg b/services/etc/fms_service.cfg index 7f957887..a271b415 100644 --- a/services/etc/fms_service.cfg +++ b/services/etc/fms_service.cfg @@ -2,7 +2,7 @@ "services" : [{ "name" : "fms_service", "path" : ["/system/bin/sa_main", "/system/profile/fms_service.xml"], - "uid" : "file_manager", + "uid" : "1006", "gid" : ["system", "shell"] } ] diff --git a/services/src/server/file_manager_service_stub.cpp b/services/src/server/file_manager_service_stub.cpp index 0ebdd02f..dff8a584 100644 --- a/services/src/server/file_manager_service_stub.cpp +++ b/services/src/server/file_manager_service_stub.cpp @@ -55,6 +55,12 @@ int FileManagerServiceStub::OperProcess(uint32_t code, MessageParcel &data, return errCode; } +static bool GetClientUid(int &uid) +{ + uid = IPCSkeleton::GetCallingUid(); + return true; +} + static sptr GetSysBundleManager() { auto bundleObj = @@ -67,22 +73,12 @@ static sptr GetSysBundleManager() return bms; } -static bool GetClientUid(int &uid) -{ - auto bms = GetSysBundleManager(); - if (bms == nullptr) { - ERR_LOG("GetClientBundleName bms is %{public}d", (bms == nullptr)); - return false; - } - uid = IPCSkeleton::GetCallingUid(); - return true; -} - static string GetClientBundleName(int uid) { std::string bundleName = ""; auto bms = GetSysBundleManager(); if (bms == nullptr) { + ERR_LOG("failed to get bundle manager service bms == nullptr"); return bundleName; } auto result = bms->GetBundleNameForUid(uid, bundleName); @@ -124,8 +120,6 @@ int FileManagerServiceStub::OnRemoteRequest(uint32_t code, MessageParcel &data, string permission = "permission"; if (!CheckClientPermission(permission)) { ERR_LOG("checkpermission error FAIL"); - reply.WriteInt32(FAIL); - return FAIL; } if (!MediaFileUtils::InitHelper(AsObject())) { ERR_LOG("InitHelper error %{public}d", FAIL); -- Gitee From 8cac8168cb22a0cce9629d9f685c967a568b881f Mon Sep 17 00:00:00 2001 From: panqiangbiao Date: Sun, 6 Mar 2022 10:14:16 +0800 Subject: [PATCH 2/3] add accessToken check for ipc Signed-off-by: panqiangbiao --- services/src/client/file_manager_proxy.cpp | 7 +++++-- services/src/server/file_manager_service_stub.cpp | 10 ++++++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/services/src/client/file_manager_proxy.cpp b/services/src/client/file_manager_proxy.cpp index 663efaa9..0c15b609 100644 --- a/services/src/client/file_manager_proxy.cpp +++ b/services/src/client/file_manager_proxy.cpp @@ -46,6 +46,7 @@ int FileManagerProxy::GetRoot(const CmdOptions &option, vector> &fileRes) { - MessageParcel data; CmdOptions op(option); std::string devName(op.GetDevInfo().GetName()); std::string devPath(op.GetDevInfo().GetPath()); int64_t offset = op.GetOffset(); int64_t count = op.GetCount(); - + MessageParcel data; + data.WriteInterfaceToken(GetDescriptor()); data.WriteString(devName); data.WriteString(devPath); data.WriteString(type); @@ -145,6 +147,7 @@ int FileManagerProxy::ListFile(const std::string &type, const std::string &path, int FileManagerProxy::Mkdir(const string &name, const string &path) { MessageParcel data; + data.WriteInterfaceToken(GetDescriptor()); data.WriteString(name); data.WriteString(path); MessageParcel reply; diff --git a/services/src/server/file_manager_service_stub.cpp b/services/src/server/file_manager_service_stub.cpp index dff8a584..ebb5e27c 100644 --- a/services/src/server/file_manager_service_stub.cpp +++ b/services/src/server/file_manager_service_stub.cpp @@ -116,17 +116,23 @@ bool CheckClientPermission(const std::string& permissionStr) int FileManagerServiceStub::OnRemoteRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { + // check whether request from fms proxy + if (data.ReadInterfaceToken() != GetDescriptor()) { + ERR_LOG("reject error remote request"); + reply.WriteInt32(FAIL); + return FAIL; + } // change permission string after finishing accessToken string permission = "permission"; if (!CheckClientPermission(permission)) { ERR_LOG("checkpermission error FAIL"); } if (!MediaFileUtils::InitHelper(AsObject())) { - ERR_LOG("InitHelper error %{public}d", FAIL); + ERR_LOG("Init MediaLibraryDataAbility Helper error"); reply.WriteInt32(FAIL); return FAIL; } - // do file process + // do request process int32_t errCode = OperProcess(code, data, reply); reply.WriteInt32(errCode); return errCode; -- Gitee From dcc6b898b572575ed96385604c644c6c7ce2655e Mon Sep 17 00:00:00 2001 From: panqiangbiao Date: Sun, 6 Mar 2022 11:25:27 +0800 Subject: [PATCH 3/3] change query offset code Signed-off-by: panqiangbiao --- services/src/fileoper/media_file_utils.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/src/fileoper/media_file_utils.cpp b/services/src/fileoper/media_file_utils.cpp index 4169a748..c60ec960 100644 --- a/services/src/fileoper/media_file_utils.cpp +++ b/services/src/fileoper/media_file_utils.cpp @@ -308,8 +308,7 @@ shared_ptr MediaFileUtils::DoQuery(const string & NativeRdb::DataAbilityPredicates predicates; predicates.SetWhereClause(selection); predicates.SetWhereArgs(selectionArgs); - predicates.Limit(count); - predicates.Offset(offset); + predicates.SetOrder("date_taken DESC LIMIT " + ToString(offset) + "," + ToString(count)); DEBUG_LOG("limit %{public}d, offset %{public}d", count, offset); Uri uri = Uri(Media::MEDIALIBRARY_DATA_URI); vector columns; -- Gitee