From e6990afefcfac76179bd35a0d9815e7350c48a3d Mon Sep 17 00:00:00 2001 From: chennian Date: Fri, 17 Jun 2022 15:39:17 +0800 Subject: [PATCH 1/6] Signed-off-by:chennianchennian1@huawei.com Signed-off-by: chennian --- frameworks/accesstoken/BUILD.gn | 1 + .../accesstoken/src/hap_info_parcel.cpp | 13 +- .../accesstoken/src/hap_policy_parcel.cpp | 13 +- .../src/hap_token_info_for_sync_parcel.cpp | 13 +- .../accesstoken/src/hap_token_info_parcel.cpp | 13 +- .../src/native_token_info_for_sync_parcel.cpp | 13 +- .../src/native_token_info_parcel.cpp | 13 +- .../accesstoken/src/permission_def_parcel.cpp | 13 +- .../src/permission_list_state_parcel.cpp | 13 +- .../src/permission_state_full_parcel.cpp | 13 +- frameworks/privacy/BUILD.gn | 1 + .../privacy/src/bundle_used_record_parcel.cpp | 15 +- .../src/permission_used_record_parcel.cpp | 15 +- .../src/permission_used_request_parcel.cpp | 15 +- .../src/permission_used_result_parcel.cpp | 15 +- .../privacy/src/used_record_detail_parcel.cpp | 15 +- .../innerkits/privacy/src/privacy_kit.cpp | 23 +- .../src/permission_record_manager_napi.cpp | 24 +- services/privacymanager/BUILD.gn | 2 +- .../include/database/sqlite_storage.h | 85 ---- .../src/database/sqlite_storage.cpp | 379 ------------------ ..._permission_used_record_callback_proxy.cpp | 2 +- ...n_permission_used_record_callback_stub.cpp | 4 +- .../src/record/permission_record_manager.cpp | 47 ++- .../record/permission_record_repository.cpp | 8 +- .../record/permission_visitor_repository.cpp | 10 +- .../src/service/privacy_manager_service.cpp | 21 +- 27 files changed, 94 insertions(+), 705 deletions(-) delete mode 100644 services/privacymanager/include/database/sqlite_storage.h delete mode 100644 services/privacymanager/src/database/sqlite_storage.cpp diff --git a/frameworks/accesstoken/BUILD.gn b/frameworks/accesstoken/BUILD.gn index 195b595be..b05a2c716 100644 --- a/frameworks/accesstoken/BUILD.gn +++ b/frameworks/accesstoken/BUILD.gn @@ -17,6 +17,7 @@ config("accesstoken_communication_adapter_cxx_public_config") { visibility = [ ":*" ] include_dirs = [ "include", + "//base/security/access_token/frameworks/common/include", "//base/security/access_token/interfaces/innerkits/accesstoken/include", ] } diff --git a/frameworks/accesstoken/src/hap_info_parcel.cpp b/frameworks/accesstoken/src/hap_info_parcel.cpp index b7569ca1f..8168de392 100644 --- a/frameworks/accesstoken/src/hap_info_parcel.cpp +++ b/frameworks/accesstoken/src/hap_info_parcel.cpp @@ -14,22 +14,11 @@ */ #include "hap_info_parcel.h" +#include "parcel_utils.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - delete (obj); \ - (obj) = nullptr; \ - return (obj); \ - } - bool HapInfoParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteInt32(this->hapInfoParameter.userID)); diff --git a/frameworks/accesstoken/src/hap_policy_parcel.cpp b/frameworks/accesstoken/src/hap_policy_parcel.cpp index 8ede17163..7d4ed108c 100644 --- a/frameworks/accesstoken/src/hap_policy_parcel.cpp +++ b/frameworks/accesstoken/src/hap_policy_parcel.cpp @@ -14,22 +14,11 @@ */ #include "hap_policy_parcel.h" +#include "parcel_utils.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - delete (obj); \ - (obj) = nullptr; \ - return (obj); \ - } - bool HapPolicyParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteInt32(this->hapPolicyParameter.apl)); diff --git a/frameworks/accesstoken/src/hap_token_info_for_sync_parcel.cpp b/frameworks/accesstoken/src/hap_token_info_for_sync_parcel.cpp index 269ff8de9..89766e871 100644 --- a/frameworks/accesstoken/src/hap_token_info_for_sync_parcel.cpp +++ b/frameworks/accesstoken/src/hap_token_info_for_sync_parcel.cpp @@ -15,23 +15,12 @@ #include "hap_token_info_for_sync_parcel.h" #include "hap_token_info_parcel.h" +#include "parcel_utils.h" #include "permission_state_full_parcel.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - delete (obj); \ - (obj) = nullptr; \ - return (obj); \ - } - bool HapTokenInfoForSyncParcel::Marshalling(Parcel& out) const { HapTokenInfoParcel baseInfoParcel; diff --git a/frameworks/accesstoken/src/hap_token_info_parcel.cpp b/frameworks/accesstoken/src/hap_token_info_parcel.cpp index 3ff51d458..414587d82 100644 --- a/frameworks/accesstoken/src/hap_token_info_parcel.cpp +++ b/frameworks/accesstoken/src/hap_token_info_parcel.cpp @@ -14,22 +14,11 @@ */ #include "hap_token_info_parcel.h" +#include "parcel_utils.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - delete (obj); \ - (obj) = nullptr; \ - return (obj); \ - } - bool HapTokenInfoParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteInt32(this->hapTokenInfoParams.apl)); diff --git a/frameworks/accesstoken/src/native_token_info_for_sync_parcel.cpp b/frameworks/accesstoken/src/native_token_info_for_sync_parcel.cpp index ad64e63eb..541bbea1d 100644 --- a/frameworks/accesstoken/src/native_token_info_for_sync_parcel.cpp +++ b/frameworks/accesstoken/src/native_token_info_for_sync_parcel.cpp @@ -15,23 +15,12 @@ #include "native_token_info_for_sync_parcel.h" #include "native_token_info_parcel.h" +#include "parcel_utils.h" #include "permission_state_full_parcel.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - delete (obj); \ - (obj) = nullptr; \ - return (obj); \ - } - bool NativeTokenInfoForSyncParcel::Marshalling(Parcel& out) const { NativeTokenInfoParcel baseInfoParcel; diff --git a/frameworks/accesstoken/src/native_token_info_parcel.cpp b/frameworks/accesstoken/src/native_token_info_parcel.cpp index 0919a8a96..ce55f5f57 100644 --- a/frameworks/accesstoken/src/native_token_info_parcel.cpp +++ b/frameworks/accesstoken/src/native_token_info_parcel.cpp @@ -14,22 +14,11 @@ */ #include "native_token_info_parcel.h" +#include "parcel_utils.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - delete (obj); \ - (obj) = nullptr; \ - return (obj); \ - } - bool NativeTokenInfoParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteInt32(this->nativeTokenInfoParams.apl)); diff --git a/frameworks/accesstoken/src/permission_def_parcel.cpp b/frameworks/accesstoken/src/permission_def_parcel.cpp index f87b17cfa..4ca7b3d2a 100644 --- a/frameworks/accesstoken/src/permission_def_parcel.cpp +++ b/frameworks/accesstoken/src/permission_def_parcel.cpp @@ -16,22 +16,11 @@ #include "permission_def_parcel.h" #include "access_token.h" +#include "parcel_utils.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - delete (obj); \ - (obj) = nullptr; \ - return (obj); \ - } - bool PermissionDefParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteString(this->permissionDef.permissionName)); diff --git a/frameworks/accesstoken/src/permission_list_state_parcel.cpp b/frameworks/accesstoken/src/permission_list_state_parcel.cpp index 96f0d2419..5fe05d917 100644 --- a/frameworks/accesstoken/src/permission_list_state_parcel.cpp +++ b/frameworks/accesstoken/src/permission_list_state_parcel.cpp @@ -14,22 +14,11 @@ */ #include "permission_list_state_parcel.h" +#include "parcel_utils.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - delete (obj); \ - (obj) = nullptr; \ - return (obj); \ - } - bool PermissionListStateParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteString(this->permsState.permissionName)); diff --git a/frameworks/accesstoken/src/permission_state_full_parcel.cpp b/frameworks/accesstoken/src/permission_state_full_parcel.cpp index 642dbda7b..1919f9d52 100644 --- a/frameworks/accesstoken/src/permission_state_full_parcel.cpp +++ b/frameworks/accesstoken/src/permission_state_full_parcel.cpp @@ -14,22 +14,11 @@ */ #include "permission_state_full_parcel.h" +#include "parcel_utils.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - delete (obj); \ - (obj) = nullptr; \ - return (obj); \ - } - bool PermissionStateFullParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteString(this->permStatFull.permissionName)); diff --git a/frameworks/privacy/BUILD.gn b/frameworks/privacy/BUILD.gn index 58c54cd1e..de6e65926 100644 --- a/frameworks/privacy/BUILD.gn +++ b/frameworks/privacy/BUILD.gn @@ -21,6 +21,7 @@ ohos_shared_library("privacy_communication_adapter_cxx") { "include", "//base/security/access_token/interfaces/innerkits/accesstoken/include", "//base/security/access_token/interfaces/innerkits/privacy/include", + "//base/security/access_token/frameworks/common/include", "//utils/native/base/include", ] diff --git a/frameworks/privacy/src/bundle_used_record_parcel.cpp b/frameworks/privacy/src/bundle_used_record_parcel.cpp index 6eae3df5c..f817e1fef 100644 --- a/frameworks/privacy/src/bundle_used_record_parcel.cpp +++ b/frameworks/privacy/src/bundle_used_record_parcel.cpp @@ -14,25 +14,12 @@ */ #include "bundle_used_record_parcel.h" +#include "parcel_utils.h" #include "permission_used_record_parcel.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - if ((obj) != nullptr) { \ - delete (obj); \ - (obj) = nullptr; \ - } \ - return (obj); \ - } - bool BundleUsedRecordParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteUint32(this->bundleRecord.tokenId)); diff --git a/frameworks/privacy/src/permission_used_record_parcel.cpp b/frameworks/privacy/src/permission_used_record_parcel.cpp index 657babba6..021b1435e 100644 --- a/frameworks/privacy/src/permission_used_record_parcel.cpp +++ b/frameworks/privacy/src/permission_used_record_parcel.cpp @@ -14,25 +14,12 @@ */ #include "permission_used_record_parcel.h" +#include "parcel_utils.h" #include "used_record_detail_parcel.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - if ((obj) != nullptr) { \ - delete (obj); \ - (obj) = nullptr; \ - } \ - return (obj); \ - } - bool PermissionUsedRecordParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteString(this->permissionRecord.permissionName)); diff --git a/frameworks/privacy/src/permission_used_request_parcel.cpp b/frameworks/privacy/src/permission_used_request_parcel.cpp index dfc841530..96915ff03 100644 --- a/frameworks/privacy/src/permission_used_request_parcel.cpp +++ b/frameworks/privacy/src/permission_used_request_parcel.cpp @@ -14,24 +14,11 @@ */ #include "permission_used_request_parcel.h" +#include "parcel_utils.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - if ((obj) != nullptr) { \ - delete (obj); \ - (obj) = nullptr; \ - } \ - return (obj); \ - } - bool PermissionUsedRequestParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteUint32(this->request.tokenId)); diff --git a/frameworks/privacy/src/permission_used_result_parcel.cpp b/frameworks/privacy/src/permission_used_result_parcel.cpp index a8655ff69..0ca67c4b1 100644 --- a/frameworks/privacy/src/permission_used_result_parcel.cpp +++ b/frameworks/privacy/src/permission_used_result_parcel.cpp @@ -15,24 +15,11 @@ #include "permission_used_result_parcel.h" #include "bundle_used_record_parcel.h" +#include "parcel_utils.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - if ((obj) != nullptr) { \ - delete (obj); \ - (obj) = nullptr; \ - } \ - return (obj); \ - } - bool PermissionUsedResultParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteInt64(this->result.beginTimeMillis)); diff --git a/frameworks/privacy/src/used_record_detail_parcel.cpp b/frameworks/privacy/src/used_record_detail_parcel.cpp index d8ffc2927..9785cf45b 100644 --- a/frameworks/privacy/src/used_record_detail_parcel.cpp +++ b/frameworks/privacy/src/used_record_detail_parcel.cpp @@ -14,24 +14,11 @@ */ #include "used_record_detail_parcel.h" +#include "parcel_utils.h" namespace OHOS { namespace Security { namespace AccessToken { -#define RETURN_IF_FALSE(expr) \ - if (!(expr)) { \ - return false; \ - } - -#define RELEASE_IF_FALSE(expr, obj) \ - if (!(expr)) { \ - if ((obj) != nullptr) { \ - delete (obj); \ - (obj) = nullptr; \ - } \ - return (obj); \ - } - bool UsedRecordDetailParcel::Marshalling(Parcel& out) const { RETURN_IF_FALSE(out.WriteInt32(this->detail.status)); diff --git a/interfaces/innerkits/privacy/src/privacy_kit.cpp b/interfaces/innerkits/privacy/src/privacy_kit.cpp index 39d3eb036..75ef66a5f 100644 --- a/interfaces/innerkits/privacy/src/privacy_kit.cpp +++ b/interfaces/innerkits/privacy/src/privacy_kit.cpp @@ -31,49 +31,50 @@ static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = {LOG_CORE, SECURITY_DOMAIN_ int32_t PrivacyKit::AddPermissionUsedRecord( AccessTokenID tokenID, const std::string& permissionName, int32_t successCount, int32_t failCount) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called, tokenID=0x%{public}x, permissionName=%{public}s,", - __func__, tokenID, permissionName.c_str()); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, tokenID=0x%{public}x, permissionName=%{public}s,", + tokenID, permissionName.c_str()); return PrivacyManagerClient::GetInstance().AddPermissionUsedRecord( tokenID, permissionName, successCount, failCount); } int32_t PrivacyKit::StartUsingPermission(AccessTokenID tokenID, const std::string& permissionName) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called, tokenID=0x%{public}x, permissionName=%{public}s", - __func__, tokenID, permissionName.c_str()); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, tokenID=0x%{public}x, permissionName=%{public}s", + tokenID, permissionName.c_str()); return PrivacyManagerClient::GetInstance().StartUsingPermission(tokenID, permissionName); } int32_t PrivacyKit::StopUsingPermission(AccessTokenID tokenID, const std::string& permissionName) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called, tokenID=0x%{public}x, permissionName=%{public}s", - __func__, tokenID, permissionName.c_str()); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, tokenID=0x%{public}x, permissionName=%{public}s", + tokenID, permissionName.c_str()); return PrivacyManagerClient::GetInstance().StopUsingPermission(tokenID, permissionName); } int32_t PrivacyKit::RemovePermissionUsedRecords(AccessTokenID tokenID, const std::string& deviceID) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, tokenID=0x%{public}x, deviceID=%{private}s", + tokenID, deviceID.c_str()); return PrivacyManagerClient::GetInstance().RemovePermissionUsedRecords(tokenID, deviceID); } int32_t PrivacyKit::GetPermissionUsedRecords(const PermissionUsedRequest& request, PermissionUsedResult& result) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry"); return PrivacyManagerClient::GetInstance().GetPermissionUsedRecords(request, result); } int32_t PrivacyKit::GetPermissionUsedRecords( const PermissionUsedRequest& request, const sptr& callback) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry"); return PrivacyManagerClient::GetInstance().GetPermissionUsedRecords(request, callback); } std::string PrivacyKit::DumpRecordInfo(const std::string& bundleName, const std::string& permissionName) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called, bundleName=%{public}s, permissionName=%{public}s", - __func__, bundleName.c_str(), permissionName.c_str()); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, bundleName=%{public}s, permissionName=%{public}s", + bundleName.c_str(), permissionName.c_str()); return PrivacyManagerClient::GetInstance().DumpRecordInfo(bundleName, permissionName); } } // namespace AccessToken diff --git a/interfaces/kits/privacy/napi/src/permission_record_manager_napi.cpp b/interfaces/kits/privacy/napi/src/permission_record_manager_napi.cpp index 290a4f9f3..9aeee4911 100644 --- a/interfaces/kits/privacy/napi/src/permission_record_manager_napi.cpp +++ b/interfaces/kits/privacy/napi/src/permission_record_manager_napi.cpp @@ -370,7 +370,7 @@ napi_value AddPermissionUsedRecord(napi_env env, napi_callback_info cbinfo) { ACCESSTOKEN_LOG_DEBUG(LABEL, "AddPermissionUsedRecord begin."); - auto *asyncContext = new RecordManagerAsyncContext(); + auto *asyncContext = new (std::nothrow) RecordManagerAsyncContext(); if (asyncContext == nullptr) { ACCESSTOKEN_LOG_ERROR(LABEL, "new struct fail."); return nullptr; @@ -379,7 +379,9 @@ napi_value AddPermissionUsedRecord(napi_env env, napi_callback_info cbinfo) napi_value result = nullptr; if (asyncContext->callbackRef == nullptr) { - napi_create_promise(env, &(asyncContext->deferred), &result); + if (napi_create_promise(env, &(asyncContext->deferred), &result) !=napi_ok) { + return nullptr; + } } else { napi_get_undefined(env, &result); } @@ -424,7 +426,7 @@ napi_value StartUsingPermission(napi_env env, napi_callback_info cbinfo) { ACCESSTOKEN_LOG_DEBUG(LABEL, "StartUsingPermission begin."); - auto *asyncContext = new RecordManagerAsyncContext(); + auto *asyncContext = new (std::nothrow) RecordManagerAsyncContext(); if (asyncContext == nullptr) { ACCESSTOKEN_LOG_ERROR(LABEL, "new struct fail."); return nullptr; @@ -433,7 +435,9 @@ napi_value StartUsingPermission(napi_env env, napi_callback_info cbinfo) napi_value result = nullptr; if (asyncContext->callbackRef == nullptr) { - napi_create_promise(env, &(asyncContext->deferred), &result); + if (napi_create_promise(env, &(asyncContext->deferred), &result) !=napi_ok) { + return nullptr; + } } else { napi_get_undefined(env, &result); } @@ -478,7 +482,7 @@ napi_value StopUsingPermission(napi_env env, napi_callback_info cbinfo) { ACCESSTOKEN_LOG_DEBUG(LABEL, "StopUsingPermission begin."); - auto *asyncContext = new RecordManagerAsyncContext(); + auto *asyncContext = new (std::nothrow) RecordManagerAsyncContext(); if (asyncContext == nullptr) { ACCESSTOKEN_LOG_ERROR(LABEL, "new struct fail."); return nullptr; @@ -487,7 +491,9 @@ napi_value StopUsingPermission(napi_env env, napi_callback_info cbinfo) napi_value result = nullptr; if (asyncContext->callbackRef == nullptr) { - napi_create_promise(env, &(asyncContext->deferred), &result); + if (napi_create_promise(env, &(asyncContext->deferred), &result) !=napi_ok) { + return nullptr; + } } else { napi_get_undefined(env, &result); } @@ -531,7 +537,7 @@ napi_value StopUsingPermission(napi_env env, napi_callback_info cbinfo) napi_value GetPermissionUsedRecords(napi_env env, napi_callback_info cbinfo) { ACCESSTOKEN_LOG_DEBUG(LABEL, "GetPermissionUsedRecords begin."); - auto *asyncContext = new RecordManagerAsyncContext(); + auto *asyncContext = new (std::nothrow) RecordManagerAsyncContext(); if (asyncContext == nullptr) { ACCESSTOKEN_LOG_ERROR(LABEL, "new struct fail."); return nullptr; @@ -540,7 +546,9 @@ napi_value GetPermissionUsedRecords(napi_env env, napi_callback_info cbinfo) napi_value result = nullptr; if (asyncContext->callbackRef == nullptr) { - napi_create_promise(env, &(asyncContext->deferred), &result); + if (napi_create_promise(env, &(asyncContext->deferred), &result) !=napi_ok) { + return nullptr; + } } else { napi_get_undefined(env, &result); } diff --git a/services/privacymanager/BUILD.gn b/services/privacymanager/BUILD.gn index 5225ac30e..9cbca4624 100644 --- a/services/privacymanager/BUILD.gn +++ b/services/privacymanager/BUILD.gn @@ -35,7 +35,7 @@ ohos_shared_library("privacy_manager_service") { "src/common/time_util.cpp", "src/common/to_string.cpp", "src/database/data_translator.cpp", - "src/database/sqlite_storage.cpp", + "src/database/permission_record_db.cpp", "src/record/on_permission_used_record_callback_proxy.cpp", "src/record/on_permission_used_record_callback_stub.cpp", "src/record/permission_record.cpp", diff --git a/services/privacymanager/include/database/sqlite_storage.h b/services/privacymanager/include/database/sqlite_storage.h deleted file mode 100644 index bdd8dbf2a..000000000 --- a/services/privacymanager/include/database/sqlite_storage.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef SQL_STORAGE_H -#define SQL_STORAGE_H - -#include "generic_values.h" -#include "sqlite_helper.h" - -#include "nocopyable.h" -#include "rwlock.h" - -namespace OHOS { -namespace Security { -namespace AccessToken { -struct SqliteTable { -public: - std::string tableName_; - std::vector tableColumnNames_; -}; -class SqliteStorage : public SqliteHelper { -public: - enum DataType { - PERMISSION_VISITOR = 0, - PERMISSION_RECORD, - }; - enum ExecuteResult { FAILURE = -1, SUCCESS }; - static SqliteStorage& GetInstance(); - - ~SqliteStorage() override; - - int32_t Add(const DataType type, const std::vector& values); - int32_t Remove(const DataType type, const GenericValues& conditions); - int32_t Find(const DataType type, std::vector& results); - int32_t FindByConditions(const DataType type, const GenericValues& andConditions, - const GenericValues& orConditions, std::vector& results); - int32_t Modify(const DataType type, const GenericValues& modifyValues, const GenericValues& conditions); - int32_t RefreshAll(const DataType type, const std::vector& values); - - void OnCreate() override; - void OnUpdate() override; - -private: - SqliteStorage(); - DISALLOW_COPY_AND_MOVE(SqliteStorage); - - std::map dataTypeToSqlTable_; - OHOS::Utils::RWLock rwLock_; - - int32_t CreatePermissionVisitorTable() const; - int32_t CreatePermissionRecordTable() const; - - std::string CreateInsertPrepareSqlCmd(const DataType type) const; - std::string CreateDeletePrepareSqlCmd( - const DataType type, const std::vector& columnNames = std::vector()) const; - std::string CreateSelectPrepareSqlCmd(const DataType type) const; - std::string CreateSelectByConditionPrepareSqlCmd(const DataType type, - const std::vector& andColumns, const std::vector& orColumns) const; - std::string CreateUpdatePrepareSqlCmd(const DataType type, const std::vector& modifyColumns, - const std::vector& conditionColumns) const; - -private: - inline static const std::string PERMISSION_VISITOR_TABLE = "permission_visitor_table"; - inline static const std::string PERMISSION_RECORD_TABLE = "permission_record_table"; - inline static const std::string DATABASE_NAME = "permission_used_record.db"; - inline static const std::string DATABASE_PATH = "/data/system/access_token/"; - static const int32_t DATABASE_VERSION = 1; -}; -} // namespace AccessToken -} // namespace Security -} // namespace OHOS - -#endif // SQL_STORAGE_H diff --git a/services/privacymanager/src/database/sqlite_storage.cpp b/services/privacymanager/src/database/sqlite_storage.cpp deleted file mode 100644 index a14712f04..000000000 --- a/services/privacymanager/src/database/sqlite_storage.cpp +++ /dev/null @@ -1,379 +0,0 @@ -/* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "sqlite_storage.h" - -#include "accesstoken_log.h" -#include "field_const.h" - -namespace OHOS { -namespace Security { -namespace AccessToken { -namespace { -static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { - LOG_CORE, SECURITY_DOMAIN_PRIVACY, "PrivacySqliteStorage" -}; -} - -SqliteStorage& SqliteStorage::GetInstance() -{ - static SqliteStorage instance; - return instance; -} - -SqliteStorage::~SqliteStorage() -{ - Close(); -} - -void SqliteStorage::OnCreate() -{ - ACCESSTOKEN_LOG_INFO(LABEL, "%{public}s called.", __func__); - CreatePermissionVisitorTable(); - CreatePermissionRecordTable(); -} - -void SqliteStorage::OnUpdate() -{ - ACCESSTOKEN_LOG_INFO(LABEL, "%{public}s called.", __func__); -} - -SqliteStorage::SqliteStorage() : SqliteHelper(DATABASE_NAME, DATABASE_PATH, DATABASE_VERSION) -{ - SqliteTable permissionVisorTable; - permissionVisorTable.tableName_ = PERMISSION_VISITOR_TABLE; - permissionVisorTable.tableColumnNames_ = { - FIELD_ID, - FIELD_TOKEN_ID, - FIELD_IS_REMOTE_DEVICE, - FIELD_DEVICE_ID, - FIELD_USER_ID, - FIELD_BUNDLE_NAME - }; - - SqliteTable permissionRecordTable; - permissionRecordTable.tableName_ = PERMISSION_RECORD_TABLE; - permissionRecordTable.tableColumnNames_ = { - FIELD_VISITOR_ID, - FIELD_OP_CODE, - FIELD_STATUS, - FIELD_TIMESTAMP, - FIELD_ACCESS_DURATION, - FIELD_ACCESS_COUNT, - FIELD_REJECT_COUNT - }; - - dataTypeToSqlTable_ = { - {PERMISSION_VISITOR, permissionVisorTable}, - {PERMISSION_RECORD, permissionRecordTable}, - }; - Open(); -} - -int32_t SqliteStorage::Add(const DataType type, const std::vector& values) -{ - OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); - std::string prepareSql = CreateInsertPrepareSqlCmd(type); - auto statement = Prepare(prepareSql); - BeginTransaction(); - bool isExecuteSuccessfully = true; - for (auto value : values) { - std::vector columnNames = value.GetAllKeys(); - for (auto columnName : columnNames) { - statement.Bind(columnName, value.Get(columnName)); - } - int32_t ret = statement.Step(); - if (ret != Statement::State::DONE) { - ACCESSTOKEN_LOG_ERROR(LABEL, "failed, errorMsg: %{public}s", SpitError().c_str()); - isExecuteSuccessfully = false; - } - statement.Reset(); - } - if (!isExecuteSuccessfully) { - ACCESSTOKEN_LOG_ERROR(LABEL, "rollback transaction."); - RollbackTransaction(); - return FAILURE; - } - ACCESSTOKEN_LOG_DEBUG(LABEL, "commit transaction."); - CommitTransaction(); - return SUCCESS; -} - -int32_t SqliteStorage::Remove(const DataType type, const GenericValues& conditions) -{ - OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); - std::vector columnNames = conditions.GetAllKeys(); - std::string prepareSql = CreateDeletePrepareSqlCmd(type, columnNames); - auto statement = Prepare(prepareSql); - for (auto columnName : columnNames) { - statement.Bind(columnName, conditions.Get(columnName)); - } - int32_t ret = statement.Step(); - return (ret == Statement::State::DONE) ? SUCCESS : FAILURE; -} - -int32_t SqliteStorage::Modify(const DataType type, const GenericValues& modifyValues, const GenericValues& conditions) -{ - OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); - std::vector modifyColumns = modifyValues.GetAllKeys(); - std::vector conditionColumns = conditions.GetAllKeys(); - std::string prepareSql = CreateUpdatePrepareSqlCmd(type, modifyColumns, conditionColumns); - auto statement = Prepare(prepareSql); - for (auto columnName : modifyColumns) { - statement.Bind(columnName, modifyValues.Get(columnName)); - } - for (auto columnName : conditionColumns) { - statement.Bind(columnName, conditions.Get(columnName)); - } - int32_t ret = statement.Step(); - return (ret == Statement::State::DONE) ? SUCCESS : FAILURE; -} - -int32_t SqliteStorage::Find(const DataType type, std::vector& results) -{ - OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); - std::string prepareSql = CreateSelectPrepareSqlCmd(type); - auto statement = Prepare(prepareSql); - while (statement.Step() == Statement::State::ROW) { - int32_t columnCount = statement.GetColumnCount(); - GenericValues value; - for (int32_t i = 0; i < columnCount; i++) { - if (statement.GetColumnName(i) == FIELD_TIMESTAMP || statement.GetColumnName(i) == FIELD_ACCESS_DURATION) { - value.Put(statement.GetColumnName(i), statement.GetValue(i, true)); - } else { - value.Put(statement.GetColumnName(i), statement.GetValue(i, false)); - } - } - results.emplace_back(value); - } - return SUCCESS; -} - -int32_t SqliteStorage::FindByConditions(const DataType type, const GenericValues& andConditions, - const GenericValues& orConditions, std::vector& results) -{ - OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); - std::vector andColumns = andConditions.GetAllKeys(); - std::vector orColumns = orConditions.GetAllKeys(); - std::string prepareSql = CreateSelectByConditionPrepareSqlCmd(type, andColumns, orColumns); - auto statement = Prepare(prepareSql); - - for (auto columnName : andColumns) { - statement.Bind(columnName, andConditions.Get(columnName)); - } - for (auto columnName : orColumns) { - statement.Bind(columnName, orConditions.Get(columnName)); - } - - while (statement.Step() == Statement::State::ROW) { - int32_t columnCount = statement.GetColumnCount(); - GenericValues value; - for (int32_t i = 0; i < columnCount; i++) { - if (statement.GetColumnName(i) == FIELD_TIMESTAMP || statement.GetColumnName(i) == FIELD_ACCESS_DURATION) { - value.Put(statement.GetColumnName(i), statement.GetValue(i, true)); - } else { - value.Put(statement.GetColumnName(i), statement.GetValue(i, false)); - } - } - results.emplace_back(value); - } - return SUCCESS; -} - -int32_t SqliteStorage::RefreshAll(const DataType type, const std::vector& values) -{ - OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); - std::string deleteSql = CreateDeletePrepareSqlCmd(type); - std::string insertSql = CreateInsertPrepareSqlCmd(type); - auto deleteStatement = Prepare(deleteSql); - auto insertStatement = Prepare(insertSql); - BeginTransaction(); - bool canCommit = deleteStatement.Step() == Statement::State::DONE; - for (auto value : values) { - std::vector columnNames = value.GetAllKeys(); - for (auto columnName : columnNames) { - insertStatement.Bind(columnName, value.Get(columnName)); - } - int32_t ret = insertStatement.Step(); - if (ret != Statement::State::DONE) { - ACCESSTOKEN_LOG_ERROR( - LABEL, "insert failed, errorMsg: %{public}s", SpitError().c_str()); - canCommit = false; - } - insertStatement.Reset(); - } - if (!canCommit) { - ACCESSTOKEN_LOG_ERROR(LABEL, "rollback transaction."); - RollbackTransaction(); - return FAILURE; - } - ACCESSTOKEN_LOG_INFO(LABEL, "commit transaction."); - CommitTransaction(); - return SUCCESS; -} - -std::string SqliteStorage::CreateInsertPrepareSqlCmd(const DataType type) const -{ - auto it = dataTypeToSqlTable_.find(type); - if (it == dataTypeToSqlTable_.end()) { - return std::string(); - } - std::string sql = "insert into " + it->second.tableName_ + " values("; - int32_t i = 1; - for (const auto& columnName : it->second.tableColumnNames_) { - sql.append(":" + columnName); - if (i < (int32_t) it->second.tableColumnNames_.size()) { - sql.append(","); - } - i += 1; - } - sql.append(")"); - return sql; -} - -std::string SqliteStorage::CreateDeletePrepareSqlCmd( - const DataType type, const std::vector& columnNames) const -{ - auto it = dataTypeToSqlTable_.find(type); - if (it == dataTypeToSqlTable_.end()) { - return std::string(); - } - std::string sql = "delete from " + it->second.tableName_ + " where 1 = 1"; - for (auto columnName : columnNames) { - sql.append(" and "); - sql.append(columnName + "=:" + columnName); - } - return sql; -} - -std::string SqliteStorage::CreateUpdatePrepareSqlCmd(const DataType type, const std::vector& modifyColumns, - const std::vector& conditionColumns) const -{ - if (modifyColumns.empty()) { - return std::string(); - } - - auto it = dataTypeToSqlTable_.find(type); - if (it == dataTypeToSqlTable_.end()) { - return std::string(); - } - - std::string sql = "update " + it->second.tableName_ + " set "; - int32_t i = 1; - for (const auto& columnName : modifyColumns) { - sql.append(columnName + "=:" + columnName); - if (i < (int32_t) modifyColumns.size()) { - sql.append(","); - } - i += 1; - } - - if (!conditionColumns.empty()) { - sql.append(" where 1 = 1"); - for (const auto& columnName : conditionColumns) { - sql.append(" and "); - sql.append(columnName + "=:" + columnName); - } - } - return sql; -} - -std::string SqliteStorage::CreateSelectPrepareSqlCmd(const DataType type) const -{ - auto it = dataTypeToSqlTable_.find(type); - if (it == dataTypeToSqlTable_.end()) { - return std::string(); - } - std::string sql = "select * from " + it->second.tableName_; - return sql; -} - -std::string SqliteStorage::CreateSelectByConditionPrepareSqlCmd(const DataType type, - const std::vector& andColumns, const std::vector& orColumns) const -{ - auto it = dataTypeToSqlTable_.find(type); - if (it == dataTypeToSqlTable_.end()) { - return std::string(); - } - - std::string sql = "select * from " + it->second.tableName_ + " where 1 = 1"; - for (const auto& andColName : andColumns) { - if (andColName == FIELD_TIMESTAMP_BEGIN) { - sql.append(" and "); - sql.append(FIELD_TIMESTAMP + " >=:" + andColName); - } else if (andColName == FIELD_TIMESTAMP_END) { - sql.append(" and "); - sql.append(FIELD_TIMESTAMP + " <=:" + andColName); - } else { - sql.append(" and "); - sql.append(andColName + "=:" + andColName); - } - } - if (orColumns.size() > 0) { - sql.append(" and ("); - for (const auto& orColName : orColumns) { - if (orColName.find(FIELD_OP_CODE) != std::string::npos) { - sql.append(FIELD_OP_CODE + " =:" + orColName); - sql.append(" or "); - } - } - sql.append("0)"); - } - return sql; -} - -int32_t SqliteStorage::CreatePermissionVisitorTable() const -{ - auto it = dataTypeToSqlTable_.find(DataType::PERMISSION_VISITOR); - if (it == dataTypeToSqlTable_.end()) { - return FAILURE; - } - std::string sql = "create table if not exists "; - sql.append(it->second.tableName_ + " (") - .append(FIELD_ID + " integer PRIMARY KEY autoincrement not null,") - .append(FIELD_TOKEN_ID + " integer not null,") - .append(FIELD_IS_REMOTE_DEVICE + " integer not null,") - .append(FIELD_DEVICE_ID + " text not null,") - .append(FIELD_USER_ID + " integer not null,") - .append(FIELD_BUNDLE_NAME + " text not null") - .append(")"); - return ExecuteSql(sql); -} - -int32_t SqliteStorage::CreatePermissionRecordTable() const -{ - auto it = dataTypeToSqlTable_.find(DataType::PERMISSION_RECORD); - if (it == dataTypeToSqlTable_.end()) { - return FAILURE; - } - std::string sql = "create table if not exists "; - sql.append(it->second.tableName_ + " (") - .append(FIELD_VISITOR_ID + " integer not null,") - .append(FIELD_OP_CODE + " integer not null,") - .append(FIELD_STATUS + " integer not null,") - .append(FIELD_TIMESTAMP + " integer not null,") - .append(FIELD_ACCESS_DURATION + " integer not null,") - .append(FIELD_ACCESS_COUNT + " integer not null,") - .append(FIELD_REJECT_COUNT + " integer not null,") - .append("primary key(" + FIELD_VISITOR_ID) - .append("," + FIELD_OP_CODE) - .append("," + FIELD_STATUS) - .append("," + FIELD_TIMESTAMP) - .append("))"); - return ExecuteSql(sql); -} -} // namespace AccessToken -} // namespace Security -} // namespace OHOS diff --git a/services/privacymanager/src/record/on_permission_used_record_callback_proxy.cpp b/services/privacymanager/src/record/on_permission_used_record_callback_proxy.cpp index e0974b25d..f5b9f3a69 100644 --- a/services/privacymanager/src/record/on_permission_used_record_callback_proxy.cpp +++ b/services/privacymanager/src/record/on_permission_used_record_callback_proxy.cpp @@ -64,7 +64,7 @@ void OnPermissionUsedRecordCallbackProxy::OnQueried(ErrCode code, PermissionUsed return; } - ACCESSTOKEN_LOG_INFO(LABEL, "%{public}s SendRequest success", __func__); + ACCESSTOKEN_LOG_INFO(LABEL, "SendRequest success"); } } // namespace AccessToken } // namespace Security diff --git a/services/privacymanager/src/record/on_permission_used_record_callback_stub.cpp b/services/privacymanager/src/record/on_permission_used_record_callback_stub.cpp index a691970ce..1b22bfc6d 100644 --- a/services/privacymanager/src/record/on_permission_used_record_callback_stub.cpp +++ b/services/privacymanager/src/record/on_permission_used_record_callback_stub.cpp @@ -33,7 +33,7 @@ static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { int32_t OnPermissionUsedRecordCallbackStub::OnRemoteRequest( uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called, code: 0x%{public}x", __func__, code); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, code: 0x%{public}x", code); std::u16string descriptor = data.ReadInterfaceToken(); if (descriptor != OnPermissionUsedRecordCallback::GetDescriptor()) { ACCESSTOKEN_LOG_ERROR(LABEL, "get unexpect descriptor: %{public}s", Str16ToStr8(descriptor).c_str()); @@ -53,7 +53,7 @@ int32_t OnPermissionUsedRecordCallbackStub::OnRemoteRequest( ACCESSTOKEN_LOG_ERROR(LABEL, "ReadParcelable fail"); return Constant::FAILURE; } - ACCESSTOKEN_LOG_INFO(LABEL, "%{public}s errCode: %{public}d", __func__, errCode); + ACCESSTOKEN_LOG_INFO(LABEL, "errCode: %{public}d", errCode); OnQueried(errCode, resultSptr->result); } else { return IPCObjectStub::OnRemoteRequest(code, data, reply, option); diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index f24575d64..350c745d1 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -52,7 +52,7 @@ PermissionRecordManager::~PermissionRecordManager() bool PermissionRecordManager::AddVisitor(AccessTokenID tokenID, int32_t& visitorId) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry"); PermissionVisitor visitor; if (!GetPermissionVisitor(tokenID, visitor)) { return false; @@ -82,7 +82,7 @@ bool PermissionRecordManager::GetPermissionVisitor(AccessTokenID tokenID, Permis { HapTokenInfo tokenInfo; if (AccessTokenKit::GetHapTokenInfo(tokenID, tokenInfo) != Constant::SUCCESS) { - ACCESSTOKEN_LOG_ERROR(LABEL, "%{public}s GetHapTokenInfo fail", __func__); + ACCESSTOKEN_LOG_ERROR(LABEL, "GetHapTokenInfo fail"); return false; } visitor.isRemoteDevice = true; @@ -99,7 +99,7 @@ bool PermissionRecordManager::GetPermissionVisitor(AccessTokenID tokenID, Permis bool PermissionRecordManager::AddRecord( int32_t visitorId, const std::string& permissionName, int32_t successCount, int32_t failCount) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry"); PermissionRecord record; if (!GetPermissionsRecord(visitorId, permissionName, successCount, failCount, record)) { return false; @@ -155,11 +155,11 @@ bool PermissionRecordManager::GetPermissionsRecord(int32_t visitorId, const std: { int32_t opCode; if (!Constant::TransferPermissionToOpcode(permissionName, opCode)) { - ACCESSTOKEN_LOG_ERROR(LABEL, "%{public}s TransferPermissionToOpcode fail", __func__); + ACCESSTOKEN_LOG_ERROR(LABEL, "Failed to TransferPermissionToOpcode"); return false; } if (successCount == 0 && failCount == 0) { - ACCESSTOKEN_LOG_ERROR(LABEL, "%{public}s successCount and failCount are both zero", __func__); + ACCESSTOKEN_LOG_ERROR(LABEL, "successCount and failCount are both zero"); return false; } record.visitorId = visitorId; @@ -175,12 +175,12 @@ bool PermissionRecordManager::GetPermissionsRecord(int32_t visitorId, const std: int32_t PermissionRecordManager::AddPermissionUsedRecord(AccessTokenID tokenID, const std::string& permissionName, int32_t successCount, int32_t failCount) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called, tokenId: %{public}x, permissionName: %{public}s", __func__, + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, tokenId: %{public}x, permissionName: %{public}s", tokenID, permissionName.c_str()); ExecuteDeletePermissionRecordTask(); if (AccessTokenKit::GetTokenTypeFlag(tokenID) != TOKEN_HAP) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s Invalid token type", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Invalid token type"); return Constant::SUCCESS; } @@ -197,7 +197,7 @@ int32_t PermissionRecordManager::AddPermissionUsedRecord(AccessTokenID tokenID, void PermissionRecordManager::RemovePermissionUsedRecords(AccessTokenID tokenID, const std::string& deviceID) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called, tokenId: %{public}x", __func__, tokenID); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, tokenId: %{public}x", tokenID); Utils::UniqueWriteGuard lk(this->rwLock_); PermissionVisitor visitor; @@ -227,7 +227,7 @@ void PermissionRecordManager::RemovePermissionUsedRecords(AccessTokenID tokenID, int32_t PermissionRecordManager::GetPermissionUsedRecords( const PermissionUsedRequest& request, PermissionUsedResult& result) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry"); ExecuteDeletePermissionRecordTask(); if (!GetRecordsFromDB(request, result)) { @@ -240,7 +240,7 @@ int32_t PermissionRecordManager::GetPermissionUsedRecords( int32_t PermissionRecordManager::GetPermissionUsedRecordsAsync( const PermissionUsedRequest& request, const sptr& callback) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry"); auto task = [request, callback]() { ACCESSTOKEN_LOG_INFO(LABEL, "GetPermissionUsedRecordsAsync task called"); PermissionUsedResult result; @@ -259,7 +259,7 @@ bool PermissionRecordManager::GetRecordsFromDB(const PermissionUsedRequest& requ GenericValues orConditionValues; if (DataTranslator::TranslationIntoGenericValues(request, visitorValues, andConditionValues, orConditionValues) != Constant::SUCCESS) { - ACCESSTOKEN_LOG_ERROR(LABEL, "%{public}s: query time is invalid", __func__); + ACCESSTOKEN_LOG_ERROR(LABEL, "query time is invalid"); return false; } @@ -269,7 +269,7 @@ bool PermissionRecordManager::GetRecordsFromDB(const PermissionUsedRequest& requ return false; } if (findVisitorValues.empty()) { - ACCESSTOKEN_LOG_INFO(LABEL, "%{public}s: no visitor", __func__); + ACCESSTOKEN_LOG_INFO(LABEL, "no visitor"); return true; } @@ -315,7 +315,7 @@ bool PermissionRecordManager::GetRecords( record.Put(FIELD_FLAG, flag); if (DataTranslator::TranslationGenericValuesIntoPermissionUsedRecord(record, tmpPermissionRecord) != Constant::SUCCESS) { - ACCESSTOKEN_LOG_INFO(LABEL, "%{public}s: failed to transform permission to opcode", __func__); + ACCESSTOKEN_LOG_INFO(LABEL, "Failed to transform permission to opcode"); continue; } @@ -379,12 +379,17 @@ int32_t PermissionRecordManager::DeletePermissionRecord(int32_t days) return Constant::FAILURE; } - int32_t recordNum = 0; - for (auto record : deleteRecordValues) { - recordNum++; - if ((TimeUtil::GetCurrentTimestamp() - record.GetInt64(FIELD_TIMESTAMP)) > days || - recordNum > Constant::MAX_TOTAL_RECORD) { - PermissionRecordRepository::GetInstance().RemoveRecordValues(record); + size_t deleteSize = 0; + if (deleteRecordValues.size() > Constant::MAX_TOTAL_RECORD) { + deleteSize = deleteRecordValues.size() - Constant::MAX_TOTAL_RECORD; + for (size_t i = 0; i < deleteSize; ++i) { + PermissionRecordRepository::GetInstance().RemoveRecordValues(deleteRecordValues[i]); + } + } + int64_t deleteTimestamp = TimeUtil::GetCurrentTimestamp() - days; + for (size_t i = deleteSize; i < deleteRecordValues.size(); ++i) { + if (deleteRecordValues[i].GetInt64(FIELD_TIMESTAMP) < deleteTimestamp) { + PermissionRecordRepository::GetInstance().RemoveRecordValues(deleteRecordValues[i]); } } return Constant::SUCCESS; @@ -392,8 +397,8 @@ int32_t PermissionRecordManager::DeletePermissionRecord(int32_t days) std::string PermissionRecordManager::DumpRecordInfo(const std::string& bundleName, const std::string& permissionName) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called, bundleName=%{public}s, permissionName=%{public}s", - __func__, bundleName.c_str(), permissionName.c_str()); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, bundleName=%{public}s, permissionName=%{public}s", + bundleName.c_str(), permissionName.c_str()); PermissionUsedRequest request; request.bundleName = bundleName; request.flag = FLAG_PERMISSION_USAGE_DETAIL; diff --git a/services/privacymanager/src/record/permission_record_repository.cpp b/services/privacymanager/src/record/permission_record_repository.cpp index 61e033fd6..c7d9638b5 100644 --- a/services/privacymanager/src/record/permission_record_repository.cpp +++ b/services/privacymanager/src/record/permission_record_repository.cpp @@ -16,7 +16,7 @@ #include "permission_record_repository.h" #include "accesstoken_log.h" -#include "sqlite_storage.h" +#include "permission_used_record_db.h" namespace OHOS { namespace Security { @@ -44,7 +44,7 @@ PermissionRecordRepository::~PermissionRecordRepository() bool PermissionRecordRepository::AddRecordValues(const std::vector& recordValues) { if (SqliteStorage::GetInstance().Add(SqliteStorage::PERMISSION_RECORD, recordValues) != SqliteStorage::SUCCESS) { - ACCESSTOKEN_LOG_ERROR(LABEL, "%{public}s PERMISSION_VISITOR table add fail", __func__); + ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_RECORD table add fail"); return false; } return true; @@ -55,7 +55,7 @@ bool PermissionRecordRepository::FindRecordValues(const GenericValues& andCondit { if (SqliteStorage::GetInstance().FindByConditions(SqliteStorage::PERMISSION_RECORD, andConditionValues, orConditionValues, recordValues) != SqliteStorage::SUCCESS) { - ACCESSTOKEN_LOG_ERROR(LABEL, "%{public}s PERMISSION_VISITOR table find fail", __func__); + ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_RECORD table find fail"); return false; } return true; @@ -65,7 +65,7 @@ bool PermissionRecordRepository::RemoveRecordValues(const GenericValues& conditi { if (SqliteStorage::GetInstance().Remove(SqliteStorage::PERMISSION_RECORD, conditionValues) != SqliteStorage::SUCCESS) { - ACCESSTOKEN_LOG_ERROR(LABEL, "%{public}s PERMISSION_VISITOR table add fail", __func__); + ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_RECORD table add fail"); return false; } return true; diff --git a/services/privacymanager/src/record/permission_visitor_repository.cpp b/services/privacymanager/src/record/permission_visitor_repository.cpp index 34544eee1..a237b8415 100644 --- a/services/privacymanager/src/record/permission_visitor_repository.cpp +++ b/services/privacymanager/src/record/permission_visitor_repository.cpp @@ -16,7 +16,7 @@ #include "permission_visitor_repository.h" #include "accesstoken_log.h" -#include "sqlite_storage.h" +#include "permission_used_record_db.h" namespace OHOS { namespace Security { @@ -48,7 +48,7 @@ bool PermissionVisitorRepository::AddVisitorValues(const GenericValues& visitorV std::vector resultValues; if (SqliteStorage::GetInstance().FindByConditions(SqliteStorage::PERMISSION_VISITOR, visitorValues, nullValues, resultValues) != SqliteStorage::SUCCESS) { - ACCESSTOKEN_LOG_ERROR(LABEL, "%{public}s PERMISSION_VISITOR table find fail", __func__); + ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_VISITOR table find fail"); return false; } if (!resultValues.empty()) { @@ -57,7 +57,7 @@ bool PermissionVisitorRepository::AddVisitorValues(const GenericValues& visitorV insertValues.emplace_back(visitorValues); if (SqliteStorage::GetInstance().Add(SqliteStorage::PERMISSION_VISITOR, insertValues) != SqliteStorage::SUCCESS) { - ACCESSTOKEN_LOG_ERROR(LABEL, "%{public}s PERMISSION_VISITOR table add fail", __func__); + ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_VISITOR table add fail"); return false; } return true; @@ -68,7 +68,7 @@ bool PermissionVisitorRepository::FindVisitorValues( { if (SqliteStorage::GetInstance().FindByConditions(SqliteStorage::PERMISSION_VISITOR, andValues, orValues, visitorValues) != SqliteStorage::SUCCESS) { - ACCESSTOKEN_LOG_ERROR(LABEL, "%{public}s PERMISSION_VISITOR table find fail", __func__); + ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_VISITOR table find fail"); return false; } return true; @@ -78,7 +78,7 @@ bool PermissionVisitorRepository::RemoveVisitorValues(const GenericValues& condi { if (SqliteStorage::GetInstance().Remove(SqliteStorage::PERMISSION_VISITOR, conditionValues) != SqliteStorage::SUCCESS) { - ACCESSTOKEN_LOG_ERROR(LABEL, "%{public}s PERMISSION_VISITOR table remove fail", __func__); + ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_VISITOR table remove fail"); return false; } return true; diff --git a/services/privacymanager/src/service/privacy_manager_service.cpp b/services/privacymanager/src/service/privacy_manager_service.cpp index 0b2e170f2..f9708f5a6 100644 --- a/services/privacymanager/src/service/privacy_manager_service.cpp +++ b/services/privacymanager/src/service/privacy_manager_service.cpp @@ -72,29 +72,29 @@ void PrivacyManagerService::OnStop() int32_t PrivacyManagerService::AddPermissionUsedRecord( AccessTokenID tokenID, const std::string& permissionName, int32_t successCount, int32_t failCount) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called, tokenID: 0x%{public}x, permission: %{public}s", - __func__, tokenID, permissionName.c_str()); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, tokenID: 0x%{public}x, permission: %{public}s", + tokenID, permissionName.c_str()); return PermissionRecordManager::GetInstance().AddPermissionUsedRecord( tokenID, permissionName, successCount, failCount); } int32_t PrivacyManagerService::StartUsingPermission(AccessTokenID tokenID, const std::string& permissionName) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called, tokenID: 0x%{public}x, permission: %{public}s", - __func__, tokenID, permissionName.c_str()); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, tokenID: 0x%{public}x, permission: %{public}s", + tokenID, permissionName.c_str()); return Constant::SUCCESS; } int32_t PrivacyManagerService::StopUsingPermission(AccessTokenID tokenID, const std::string& permissionName) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called, tokenID: 0x%{public}x, permission: %{public}s", - __func__, tokenID, permissionName.c_str()); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, tokenID: 0x%{public}x, permission: %{public}s", + tokenID, permissionName.c_str()); return Constant::SUCCESS; } int32_t PrivacyManagerService::RemovePermissionUsedRecords(AccessTokenID tokenID, const std::string& deviceID) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, tokenID: 0x%{public}x, deviceID: %{private}s", tokenID, deviceID.c_str()); PermissionRecordManager::GetInstance().RemovePermissionUsedRecords(tokenID, deviceID); return Constant::SUCCESS; } @@ -102,7 +102,7 @@ int32_t PrivacyManagerService::RemovePermissionUsedRecords(AccessTokenID tokenID int32_t PrivacyManagerService::GetPermissionUsedRecords( const PermissionUsedRequestParcel& request, PermissionUsedResultParcel& result) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry"); PermissionUsedResult permissionRecord; int32_t ret = PermissionRecordManager::GetInstance().GetPermissionUsedRecords(request.request, permissionRecord); result.result = permissionRecord; @@ -112,13 +112,14 @@ int32_t PrivacyManagerService::GetPermissionUsedRecords( int32_t PrivacyManagerService::GetPermissionUsedRecords( const PermissionUsedRequestParcel& request, const sptr& callback) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry"); return PermissionRecordManager::GetInstance().GetPermissionUsedRecordsAsync(request.request, callback); } std::string PrivacyManagerService::DumpRecordInfo(const std::string& bundleName, const std::string& permissionName) { - ACCESSTOKEN_LOG_DEBUG(LABEL, "%{public}s called", __func__); + ACCESSTOKEN_LOG_DEBUG(LABEL, "Entry, bundleName: %{public}s, permissionName: %{public}s", + bundleName.c_str(), permissionName.c_str()); return PermissionRecordManager::GetInstance().DumpRecordInfo(bundleName, permissionName); } -- Gitee From 76c3a788b3844989b84f1de53a0f27752adf63da Mon Sep 17 00:00:00 2001 From: chennian Date: Fri, 17 Jun 2022 15:40:36 +0800 Subject: [PATCH 2/6] Signed-off-by:chennianchennian1@huawei.com Signed-off-by: chennian --- frameworks/common/include/parcel_utils.h | 37 ++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 frameworks/common/include/parcel_utils.h diff --git a/frameworks/common/include/parcel_utils.h b/frameworks/common/include/parcel_utils.h new file mode 100644 index 000000000..ddc87d688 --- /dev/null +++ b/frameworks/common/include/parcel_utils.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef PARCEL_UTILS_H +#define PARCEL_UTILS_H +namespace OHOS { +namespace Security { +namespace AccessToken { +#define RETURN_IF_FALSE(expr) \ + if (!(expr)) { \ + return false; \ + } + +#define RELEASE_IF_FALSE(expr, obj) \ + if (!(expr)) { \ + if ((obj) != nullptr) { \ + delete (obj); \ + (obj) = nullptr; \ + } \ + return (obj); \ + } +} // namespace AccessToken +} // namespace Security +} // namespace OHOS +#endif // PARCEL_UTILS_H -- Gitee From 67a9fad5641c7a49f1220b8ae596b1b55070b3ff Mon Sep 17 00:00:00 2001 From: chennian Date: Fri, 17 Jun 2022 15:44:49 +0800 Subject: [PATCH 3/6] Signed-off-by:chennianchennian1@huawei.com Signed-off-by: chennian --- .../database/permission_used_record_db.h | 85 ++++ .../database/permission_used_record_db.cpp | 379 ++++++++++++++++++ 2 files changed, 464 insertions(+) create mode 100644 services/privacymanager/include/database/permission_used_record_db.h create mode 100644 services/privacymanager/src/database/permission_used_record_db.cpp diff --git a/services/privacymanager/include/database/permission_used_record_db.h b/services/privacymanager/include/database/permission_used_record_db.h new file mode 100644 index 000000000..9614713d6 --- /dev/null +++ b/services/privacymanager/include/database/permission_used_record_db.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef PERMISSION_USED_RECORD_DB_H +#define PERMISSION_USED_RECORD_DB_H + +#include "generic_values.h" +#include "sqlite_helper.h" + +#include "nocopyable.h" +#include "rwlock.h" + +namespace OHOS { +namespace Security { +namespace AccessToken { +struct SqliteTable { +public: + std::string tableName_; + std::vector tableColumnNames_; +}; +class SqliteStorage : public SqliteHelper { +public: + enum DataType { + PERMISSION_VISITOR = 0, + PERMISSION_RECORD, + }; + enum ExecuteResult { FAILURE = -1, SUCCESS }; + static SqliteStorage& GetInstance(); + + ~SqliteStorage() override; + + int32_t Add(const DataType type, const std::vector& values); + int32_t Remove(const DataType type, const GenericValues& conditions); + int32_t Find(const DataType type, std::vector& results); + int32_t FindByConditions(const DataType type, const GenericValues& andConditions, + const GenericValues& orConditions, std::vector& results); + int32_t Modify(const DataType type, const GenericValues& modifyValues, const GenericValues& conditions); + int32_t RefreshAll(const DataType type, const std::vector& values); + + void OnCreate() override; + void OnUpdate() override; + +private: + SqliteStorage(); + DISALLOW_COPY_AND_MOVE(SqliteStorage); + + std::map dataTypeToSqlTable_; + OHOS::Utils::RWLock rwLock_; + + int32_t CreatePermissionVisitorTable() const; + int32_t CreatePermissionRecordTable() const; + + std::string CreateInsertPrepareSqlCmd(const DataType type) const; + std::string CreateDeletePrepareSqlCmd( + const DataType type, const std::vector& columnNames = std::vector()) const; + std::string CreateSelectPrepareSqlCmd(const DataType type) const; + std::string CreateSelectByConditionPrepareSqlCmd(const DataType type, + const std::vector& andColumns, const std::vector& orColumns) const; + std::string CreateUpdatePrepareSqlCmd(const DataType type, const std::vector& modifyColumns, + const std::vector& conditionColumns) const; + +private: + inline static const std::string PERMISSION_VISITOR_TABLE = "permission_visitor_table"; + inline static const std::string PERMISSION_RECORD_TABLE = "permission_record_table"; + inline static const std::string DATABASE_NAME = "permission_used_record.db"; + inline static const std::string DATABASE_PATH = "/data/system/access_token/"; + static const int32_t DATABASE_VERSION = 1; +}; +} // namespace AccessToken +} // namespace Security +} // namespace OHOS + +#endif // PERMISSION_USED_RECORD_DB_H diff --git a/services/privacymanager/src/database/permission_used_record_db.cpp b/services/privacymanager/src/database/permission_used_record_db.cpp new file mode 100644 index 000000000..a8154b69d --- /dev/null +++ b/services/privacymanager/src/database/permission_used_record_db.cpp @@ -0,0 +1,379 @@ +/* + * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "permission_used_record_db.h" + +#include "accesstoken_log.h" +#include "field_const.h" + +namespace OHOS { +namespace Security { +namespace AccessToken { +namespace { +static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { + LOG_CORE, SECURITY_DOMAIN_PRIVACY, "PrivacySqliteStorage" +}; +} + +SqliteStorage& SqliteStorage::GetInstance() +{ + static SqliteStorage instance; + return instance; +} + +SqliteStorage::~SqliteStorage() +{ + Close(); +} + +void SqliteStorage::OnCreate() +{ + ACCESSTOKEN_LOG_INFO(LABEL, "Entry"); + CreatePermissionVisitorTable(); + CreatePermissionRecordTable(); +} + +void SqliteStorage::OnUpdate() +{ + ACCESSTOKEN_LOG_INFO(LABEL, "Entry"); +} + +SqliteStorage::SqliteStorage() : SqliteHelper(DATABASE_NAME, DATABASE_PATH, DATABASE_VERSION) +{ + SqliteTable permissionVisorTable; + permissionVisorTable.tableName_ = PERMISSION_VISITOR_TABLE; + permissionVisorTable.tableColumnNames_ = { + FIELD_ID, + FIELD_TOKEN_ID, + FIELD_IS_REMOTE_DEVICE, + FIELD_DEVICE_ID, + FIELD_USER_ID, + FIELD_BUNDLE_NAME + }; + + SqliteTable permissionRecordTable; + permissionRecordTable.tableName_ = PERMISSION_RECORD_TABLE; + permissionRecordTable.tableColumnNames_ = { + FIELD_VISITOR_ID, + FIELD_OP_CODE, + FIELD_STATUS, + FIELD_TIMESTAMP, + FIELD_ACCESS_DURATION, + FIELD_ACCESS_COUNT, + FIELD_REJECT_COUNT + }; + + dataTypeToSqlTable_ = { + {PERMISSION_VISITOR, permissionVisorTable}, + {PERMISSION_RECORD, permissionRecordTable}, + }; + Open(); +} + +int32_t SqliteStorage::Add(const DataType type, const std::vector& values) +{ + OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); + std::string prepareSql = CreateInsertPrepareSqlCmd(type); + auto statement = Prepare(prepareSql); + BeginTransaction(); + bool isExecuteSuccessfully = true; + for (auto value : values) { + std::vector columnNames = value.GetAllKeys(); + for (auto columnName : columnNames) { + statement.Bind(columnName, value.Get(columnName)); + } + int32_t ret = statement.Step(); + if (ret != Statement::State::DONE) { + ACCESSTOKEN_LOG_ERROR(LABEL, "failed, errorMsg: %{public}s", SpitError().c_str()); + isExecuteSuccessfully = false; + } + statement.Reset(); + } + if (!isExecuteSuccessfully) { + ACCESSTOKEN_LOG_ERROR(LABEL, "rollback transaction."); + RollbackTransaction(); + return FAILURE; + } + ACCESSTOKEN_LOG_DEBUG(LABEL, "commit transaction."); + CommitTransaction(); + return SUCCESS; +} + +int32_t SqliteStorage::Remove(const DataType type, const GenericValues& conditions) +{ + OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); + std::vector columnNames = conditions.GetAllKeys(); + std::string prepareSql = CreateDeletePrepareSqlCmd(type, columnNames); + auto statement = Prepare(prepareSql); + for (auto columnName : columnNames) { + statement.Bind(columnName, conditions.Get(columnName)); + } + int32_t ret = statement.Step(); + return (ret == Statement::State::DONE) ? SUCCESS : FAILURE; +} + +int32_t SqliteStorage::Modify(const DataType type, const GenericValues& modifyValues, const GenericValues& conditions) +{ + OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); + std::vector modifyColumns = modifyValues.GetAllKeys(); + std::vector conditionColumns = conditions.GetAllKeys(); + std::string prepareSql = CreateUpdatePrepareSqlCmd(type, modifyColumns, conditionColumns); + auto statement = Prepare(prepareSql); + for (auto columnName : modifyColumns) { + statement.Bind(columnName, modifyValues.Get(columnName)); + } + for (auto columnName : conditionColumns) { + statement.Bind(columnName, conditions.Get(columnName)); + } + int32_t ret = statement.Step(); + return (ret == Statement::State::DONE) ? SUCCESS : FAILURE; +} + +int32_t SqliteStorage::Find(const DataType type, std::vector& results) +{ + OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); + std::string prepareSql = CreateSelectPrepareSqlCmd(type); + auto statement = Prepare(prepareSql); + while (statement.Step() == Statement::State::ROW) { + int32_t columnCount = statement.GetColumnCount(); + GenericValues value; + for (int32_t i = 0; i < columnCount; i++) { + if (statement.GetColumnName(i) == FIELD_TIMESTAMP || statement.GetColumnName(i) == FIELD_ACCESS_DURATION) { + value.Put(statement.GetColumnName(i), statement.GetValue(i, true)); + } else { + value.Put(statement.GetColumnName(i), statement.GetValue(i, false)); + } + } + results.emplace_back(value); + } + return SUCCESS; +} + +int32_t SqliteStorage::FindByConditions(const DataType type, const GenericValues& andConditions, + const GenericValues& orConditions, std::vector& results) +{ + OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); + std::vector andColumns = andConditions.GetAllKeys(); + std::vector orColumns = orConditions.GetAllKeys(); + std::string prepareSql = CreateSelectByConditionPrepareSqlCmd(type, andColumns, orColumns); + auto statement = Prepare(prepareSql); + + for (auto columnName : andColumns) { + statement.Bind(columnName, andConditions.Get(columnName)); + } + for (auto columnName : orColumns) { + statement.Bind(columnName, orConditions.Get(columnName)); + } + + while (statement.Step() == Statement::State::ROW) { + int32_t columnCount = statement.GetColumnCount(); + GenericValues value; + for (int32_t i = 0; i < columnCount; i++) { + if (statement.GetColumnName(i) == FIELD_TIMESTAMP || statement.GetColumnName(i) == FIELD_ACCESS_DURATION) { + value.Put(statement.GetColumnName(i), statement.GetValue(i, true)); + } else { + value.Put(statement.GetColumnName(i), statement.GetValue(i, false)); + } + } + results.emplace_back(value); + } + return SUCCESS; +} + +int32_t SqliteStorage::RefreshAll(const DataType type, const std::vector& values) +{ + OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); + std::string deleteSql = CreateDeletePrepareSqlCmd(type); + std::string insertSql = CreateInsertPrepareSqlCmd(type); + auto deleteStatement = Prepare(deleteSql); + auto insertStatement = Prepare(insertSql); + BeginTransaction(); + bool canCommit = deleteStatement.Step() == Statement::State::DONE; + for (auto value : values) { + std::vector columnNames = value.GetAllKeys(); + for (auto columnName : columnNames) { + insertStatement.Bind(columnName, value.Get(columnName)); + } + int32_t ret = insertStatement.Step(); + if (ret != Statement::State::DONE) { + ACCESSTOKEN_LOG_ERROR( + LABEL, "insert failed, errorMsg: %{public}s", SpitError().c_str()); + canCommit = false; + } + insertStatement.Reset(); + } + if (!canCommit) { + ACCESSTOKEN_LOG_ERROR(LABEL, "rollback transaction."); + RollbackTransaction(); + return FAILURE; + } + ACCESSTOKEN_LOG_INFO(LABEL, "commit transaction."); + CommitTransaction(); + return SUCCESS; +} + +std::string SqliteStorage::CreateInsertPrepareSqlCmd(const DataType type) const +{ + auto it = dataTypeToSqlTable_.find(type); + if (it == dataTypeToSqlTable_.end()) { + return std::string(); + } + std::string sql = "insert into " + it->second.tableName_ + " values("; + int32_t i = 1; + for (const auto& columnName : it->second.tableColumnNames_) { + sql.append(":" + columnName); + if (i < (int32_t) it->second.tableColumnNames_.size()) { + sql.append(","); + } + i += 1; + } + sql.append(")"); + return sql; +} + +std::string SqliteStorage::CreateDeletePrepareSqlCmd( + const DataType type, const std::vector& columnNames) const +{ + auto it = dataTypeToSqlTable_.find(type); + if (it == dataTypeToSqlTable_.end()) { + return std::string(); + } + std::string sql = "delete from " + it->second.tableName_ + " where 1 = 1"; + for (auto columnName : columnNames) { + sql.append(" and "); + sql.append(columnName + "=:" + columnName); + } + return sql; +} + +std::string SqliteStorage::CreateUpdatePrepareSqlCmd(const DataType type, const std::vector& modifyColumns, + const std::vector& conditionColumns) const +{ + if (modifyColumns.empty()) { + return std::string(); + } + + auto it = dataTypeToSqlTable_.find(type); + if (it == dataTypeToSqlTable_.end()) { + return std::string(); + } + + std::string sql = "update " + it->second.tableName_ + " set "; + int32_t i = 1; + for (const auto& columnName : modifyColumns) { + sql.append(columnName + "=:" + columnName); + if (i < (int32_t) modifyColumns.size()) { + sql.append(","); + } + i += 1; + } + + if (!conditionColumns.empty()) { + sql.append(" where 1 = 1"); + for (const auto& columnName : conditionColumns) { + sql.append(" and "); + sql.append(columnName + "=:" + columnName); + } + } + return sql; +} + +std::string SqliteStorage::CreateSelectPrepareSqlCmd(const DataType type) const +{ + auto it = dataTypeToSqlTable_.find(type); + if (it == dataTypeToSqlTable_.end()) { + return std::string(); + } + std::string sql = "select * from " + it->second.tableName_; + return sql; +} + +std::string SqliteStorage::CreateSelectByConditionPrepareSqlCmd(const DataType type, + const std::vector& andColumns, const std::vector& orColumns) const +{ + auto it = dataTypeToSqlTable_.find(type); + if (it == dataTypeToSqlTable_.end()) { + return std::string(); + } + + std::string sql = "select * from " + it->second.tableName_ + " where 1 = 1"; + for (const auto& andColName : andColumns) { + if (andColName == FIELD_TIMESTAMP_BEGIN) { + sql.append(" and "); + sql.append(FIELD_TIMESTAMP + " >=:" + andColName); + } else if (andColName == FIELD_TIMESTAMP_END) { + sql.append(" and "); + sql.append(FIELD_TIMESTAMP + " <=:" + andColName); + } else { + sql.append(" and "); + sql.append(andColName + "=:" + andColName); + } + } + if (orColumns.size() > 0) { + sql.append(" and ("); + for (const auto& orColName : orColumns) { + if (orColName.find(FIELD_OP_CODE) != std::string::npos) { + sql.append(FIELD_OP_CODE + " =:" + orColName); + sql.append(" or "); + } + } + sql.append("0)"); + } + return sql; +} + +int32_t SqliteStorage::CreatePermissionVisitorTable() const +{ + auto it = dataTypeToSqlTable_.find(DataType::PERMISSION_VISITOR); + if (it == dataTypeToSqlTable_.end()) { + return FAILURE; + } + std::string sql = "create table if not exists "; + sql.append(it->second.tableName_ + " (") + .append(FIELD_ID + " integer PRIMARY KEY autoincrement not null,") + .append(FIELD_TOKEN_ID + " integer not null,") + .append(FIELD_IS_REMOTE_DEVICE + " integer not null,") + .append(FIELD_DEVICE_ID + " text not null,") + .append(FIELD_USER_ID + " integer not null,") + .append(FIELD_BUNDLE_NAME + " text not null") + .append(")"); + return ExecuteSql(sql); +} + +int32_t SqliteStorage::CreatePermissionRecordTable() const +{ + auto it = dataTypeToSqlTable_.find(DataType::PERMISSION_RECORD); + if (it == dataTypeToSqlTable_.end()) { + return FAILURE; + } + std::string sql = "create table if not exists "; + sql.append(it->second.tableName_ + " (") + .append(FIELD_VISITOR_ID + " integer not null,") + .append(FIELD_OP_CODE + " integer not null,") + .append(FIELD_STATUS + " integer not null,") + .append(FIELD_TIMESTAMP + " integer not null,") + .append(FIELD_ACCESS_DURATION + " integer not null,") + .append(FIELD_ACCESS_COUNT + " integer not null,") + .append(FIELD_REJECT_COUNT + " integer not null,") + .append("primary key(" + FIELD_VISITOR_ID) + .append("," + FIELD_OP_CODE) + .append("," + FIELD_STATUS) + .append("," + FIELD_TIMESTAMP) + .append("))"); + return ExecuteSql(sql); +} +} // namespace AccessToken +} // namespace Security +} // namespace OHOS -- Gitee From f04a34a6346f7dcddafa5c29c92606df35221feb Mon Sep 17 00:00:00 2001 From: chennian Date: Fri, 17 Jun 2022 15:50:49 +0800 Subject: [PATCH 4/6] Signed-off-by:chennianchennian1@huawei.com Signed-off-by: chennian --- .../database/permission_used_record_db.h | 10 ++--- .../database/permission_used_record_db.cpp | 40 +++++++++---------- .../record/permission_record_repository.cpp | 11 ++--- .../record/permission_visitor_repository.cpp | 15 +++---- 4 files changed, 39 insertions(+), 37 deletions(-) diff --git a/services/privacymanager/include/database/permission_used_record_db.h b/services/privacymanager/include/database/permission_used_record_db.h index 9614713d6..734e6b7b4 100644 --- a/services/privacymanager/include/database/permission_used_record_db.h +++ b/services/privacymanager/include/database/permission_used_record_db.h @@ -30,16 +30,16 @@ public: std::string tableName_; std::vector tableColumnNames_; }; -class SqliteStorage : public SqliteHelper { +class PermissionUsedRecordDb : public SqliteHelper { public: enum DataType { PERMISSION_VISITOR = 0, PERMISSION_RECORD, }; enum ExecuteResult { FAILURE = -1, SUCCESS }; - static SqliteStorage& GetInstance(); + static PermissionUsedRecordDb& GetInstance(); - ~SqliteStorage() override; + ~PermissionUsedRecordDb() override; int32_t Add(const DataType type, const std::vector& values); int32_t Remove(const DataType type, const GenericValues& conditions); @@ -53,8 +53,8 @@ public: void OnUpdate() override; private: - SqliteStorage(); - DISALLOW_COPY_AND_MOVE(SqliteStorage); + PermissionUsedRecordDb(); + DISALLOW_COPY_AND_MOVE(PermissionUsedRecordDb); std::map dataTypeToSqlTable_; OHOS::Utils::RWLock rwLock_; diff --git a/services/privacymanager/src/database/permission_used_record_db.cpp b/services/privacymanager/src/database/permission_used_record_db.cpp index a8154b69d..fb33a6fc9 100644 --- a/services/privacymanager/src/database/permission_used_record_db.cpp +++ b/services/privacymanager/src/database/permission_used_record_db.cpp @@ -23,34 +23,34 @@ namespace Security { namespace AccessToken { namespace { static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { - LOG_CORE, SECURITY_DOMAIN_PRIVACY, "PrivacySqliteStorage" + LOG_CORE, SECURITY_DOMAIN_PRIVACY, "PermissionUsedRecordDb" }; } -SqliteStorage& SqliteStorage::GetInstance() +PermissionUsedRecordDb& PermissionUsedRecordDb::GetInstance() { - static SqliteStorage instance; + static PermissionUsedRecordDb instance; return instance; } -SqliteStorage::~SqliteStorage() +PermissionUsedRecordDb::~PermissionUsedRecordDb() { Close(); } -void SqliteStorage::OnCreate() +void PermissionUsedRecordDb::OnCreate() { ACCESSTOKEN_LOG_INFO(LABEL, "Entry"); CreatePermissionVisitorTable(); CreatePermissionRecordTable(); } -void SqliteStorage::OnUpdate() +void PermissionUsedRecordDb::OnUpdate() { ACCESSTOKEN_LOG_INFO(LABEL, "Entry"); } -SqliteStorage::SqliteStorage() : SqliteHelper(DATABASE_NAME, DATABASE_PATH, DATABASE_VERSION) +PermissionUsedRecordDb::PermissionUsedRecordDb() : SqliteHelper(DATABASE_NAME, DATABASE_PATH, DATABASE_VERSION) { SqliteTable permissionVisorTable; permissionVisorTable.tableName_ = PERMISSION_VISITOR_TABLE; @@ -82,7 +82,7 @@ SqliteStorage::SqliteStorage() : SqliteHelper(DATABASE_NAME, DATABASE_PATH, DATA Open(); } -int32_t SqliteStorage::Add(const DataType type, const std::vector& values) +int32_t PermissionUsedRecordDb::Add(const DataType type, const std::vector& values) { OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); std::string prepareSql = CreateInsertPrepareSqlCmd(type); @@ -111,7 +111,7 @@ int32_t SqliteStorage::Add(const DataType type, const std::vector return SUCCESS; } -int32_t SqliteStorage::Remove(const DataType type, const GenericValues& conditions) +int32_t PermissionUsedRecordDb::Remove(const DataType type, const GenericValues& conditions) { OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); std::vector columnNames = conditions.GetAllKeys(); @@ -124,7 +124,7 @@ int32_t SqliteStorage::Remove(const DataType type, const GenericValues& conditio return (ret == Statement::State::DONE) ? SUCCESS : FAILURE; } -int32_t SqliteStorage::Modify(const DataType type, const GenericValues& modifyValues, const GenericValues& conditions) +int32_t PermissionUsedRecordDb::Modify(const DataType type, const GenericValues& modifyValues, const GenericValues& conditions) { OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); std::vector modifyColumns = modifyValues.GetAllKeys(); @@ -141,7 +141,7 @@ int32_t SqliteStorage::Modify(const DataType type, const GenericValues& modifyVa return (ret == Statement::State::DONE) ? SUCCESS : FAILURE; } -int32_t SqliteStorage::Find(const DataType type, std::vector& results) +int32_t PermissionUsedRecordDb::Find(const DataType type, std::vector& results) { OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); std::string prepareSql = CreateSelectPrepareSqlCmd(type); @@ -161,7 +161,7 @@ int32_t SqliteStorage::Find(const DataType type, std::vector& res return SUCCESS; } -int32_t SqliteStorage::FindByConditions(const DataType type, const GenericValues& andConditions, +int32_t PermissionUsedRecordDb::FindByConditions(const DataType type, const GenericValues& andConditions, const GenericValues& orConditions, std::vector& results) { OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); @@ -192,7 +192,7 @@ int32_t SqliteStorage::FindByConditions(const DataType type, const GenericValues return SUCCESS; } -int32_t SqliteStorage::RefreshAll(const DataType type, const std::vector& values) +int32_t PermissionUsedRecordDb::RefreshAll(const DataType type, const std::vector& values) { OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); std::string deleteSql = CreateDeletePrepareSqlCmd(type); @@ -224,7 +224,7 @@ int32_t SqliteStorage::RefreshAll(const DataType type, const std::vector& columnNames) const { auto it = dataTypeToSqlTable_.find(type); @@ -258,7 +258,7 @@ std::string SqliteStorage::CreateDeletePrepareSqlCmd( return sql; } -std::string SqliteStorage::CreateUpdatePrepareSqlCmd(const DataType type, const std::vector& modifyColumns, +std::string PermissionUsedRecordDb::CreateUpdatePrepareSqlCmd(const DataType type, const std::vector& modifyColumns, const std::vector& conditionColumns) const { if (modifyColumns.empty()) { @@ -290,7 +290,7 @@ std::string SqliteStorage::CreateUpdatePrepareSqlCmd(const DataType type, const return sql; } -std::string SqliteStorage::CreateSelectPrepareSqlCmd(const DataType type) const +std::string PermissionUsedRecordDb::CreateSelectPrepareSqlCmd(const DataType type) const { auto it = dataTypeToSqlTable_.find(type); if (it == dataTypeToSqlTable_.end()) { @@ -300,7 +300,7 @@ std::string SqliteStorage::CreateSelectPrepareSqlCmd(const DataType type) const return sql; } -std::string SqliteStorage::CreateSelectByConditionPrepareSqlCmd(const DataType type, +std::string PermissionUsedRecordDb::CreateSelectByConditionPrepareSqlCmd(const DataType type, const std::vector& andColumns, const std::vector& orColumns) const { auto it = dataTypeToSqlTable_.find(type); @@ -334,7 +334,7 @@ std::string SqliteStorage::CreateSelectByConditionPrepareSqlCmd(const DataType t return sql; } -int32_t SqliteStorage::CreatePermissionVisitorTable() const +int32_t PermissionUsedRecordDb::CreatePermissionVisitorTable() const { auto it = dataTypeToSqlTable_.find(DataType::PERMISSION_VISITOR); if (it == dataTypeToSqlTable_.end()) { @@ -352,7 +352,7 @@ int32_t SqliteStorage::CreatePermissionVisitorTable() const return ExecuteSql(sql); } -int32_t SqliteStorage::CreatePermissionRecordTable() const +int32_t PermissionUsedRecordDb::CreatePermissionRecordTable() const { auto it = dataTypeToSqlTable_.find(DataType::PERMISSION_RECORD); if (it == dataTypeToSqlTable_.end()) { diff --git a/services/privacymanager/src/record/permission_record_repository.cpp b/services/privacymanager/src/record/permission_record_repository.cpp index c7d9638b5..c902bf74f 100644 --- a/services/privacymanager/src/record/permission_record_repository.cpp +++ b/services/privacymanager/src/record/permission_record_repository.cpp @@ -43,7 +43,8 @@ PermissionRecordRepository::~PermissionRecordRepository() bool PermissionRecordRepository::AddRecordValues(const std::vector& recordValues) { - if (SqliteStorage::GetInstance().Add(SqliteStorage::PERMISSION_RECORD, recordValues) != SqliteStorage::SUCCESS) { + if (PermissionUsedRecordDb::GetInstance().Add(PermissionUsedRecordDb::PERMISSION_RECORD, recordValues) + != PermissionUsedRecordDb::SUCCESS) { ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_RECORD table add fail"); return false; } @@ -53,8 +54,8 @@ bool PermissionRecordRepository::AddRecordValues(const std::vector& recordValues) { - if (SqliteStorage::GetInstance().FindByConditions(SqliteStorage::PERMISSION_RECORD, andConditionValues, - orConditionValues, recordValues) != SqliteStorage::SUCCESS) { + if (PermissionUsedRecordDb::GetInstance().FindByConditions(PermissionUsedRecordDb::PERMISSION_RECORD, + andConditionValues, orConditionValues, recordValues) != PermissionUsedRecordDb::SUCCESS) { ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_RECORD table find fail"); return false; } @@ -63,8 +64,8 @@ bool PermissionRecordRepository::FindRecordValues(const GenericValues& andCondit bool PermissionRecordRepository::RemoveRecordValues(const GenericValues& conditionValues) { - if (SqliteStorage::GetInstance().Remove(SqliteStorage::PERMISSION_RECORD, conditionValues) - != SqliteStorage::SUCCESS) { + if (PermissionUsedRecordDb::GetInstance().Remove(PermissionUsedRecordDb::PERMISSION_RECORD, conditionValues) + != PermissionUsedRecordDb::SUCCESS) { ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_RECORD table add fail"); return false; } diff --git a/services/privacymanager/src/record/permission_visitor_repository.cpp b/services/privacymanager/src/record/permission_visitor_repository.cpp index a237b8415..fa237ddfb 100644 --- a/services/privacymanager/src/record/permission_visitor_repository.cpp +++ b/services/privacymanager/src/record/permission_visitor_repository.cpp @@ -46,8 +46,8 @@ bool PermissionVisitorRepository::AddVisitorValues(const GenericValues& visitorV GenericValues nullValues; std::vector insertValues; std::vector resultValues; - if (SqliteStorage::GetInstance().FindByConditions(SqliteStorage::PERMISSION_VISITOR, visitorValues, - nullValues, resultValues) != SqliteStorage::SUCCESS) { + if (PermissionUsedRecordDb::GetInstance().FindByConditions(PermissionUsedRecordDb::PERMISSION_VISITOR, + visitorValues, nullValues, resultValues) != PermissionUsedRecordDb::SUCCESS) { ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_VISITOR table find fail"); return false; } @@ -56,7 +56,8 @@ bool PermissionVisitorRepository::AddVisitorValues(const GenericValues& visitorV } insertValues.emplace_back(visitorValues); - if (SqliteStorage::GetInstance().Add(SqliteStorage::PERMISSION_VISITOR, insertValues) != SqliteStorage::SUCCESS) { + if (PermissionUsedRecordDb::GetInstance().Add(PermissionUsedRecordDb::PERMISSION_VISITOR, insertValues) + != PermissionUsedRecordDb::SUCCESS) { ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_VISITOR table add fail"); return false; } @@ -66,8 +67,8 @@ bool PermissionVisitorRepository::AddVisitorValues(const GenericValues& visitorV bool PermissionVisitorRepository::FindVisitorValues( const GenericValues& andValues, const GenericValues& orValues, std::vector& visitorValues) { - if (SqliteStorage::GetInstance().FindByConditions(SqliteStorage::PERMISSION_VISITOR, andValues, - orValues, visitorValues) != SqliteStorage::SUCCESS) { + if (PermissionUsedRecordDb::GetInstance().FindByConditions(PermissionUsedRecordDb::PERMISSION_VISITOR, andValues, + orValues, visitorValues) != PermissionUsedRecordDb::SUCCESS) { ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_VISITOR table find fail"); return false; } @@ -76,8 +77,8 @@ bool PermissionVisitorRepository::FindVisitorValues( bool PermissionVisitorRepository::RemoveVisitorValues(const GenericValues& conditionValues) { - if (SqliteStorage::GetInstance().Remove(SqliteStorage::PERMISSION_VISITOR, conditionValues) - != SqliteStorage::SUCCESS) { + if (PermissionUsedRecordDb::GetInstance().Remove(PermissionUsedRecordDb::PERMISSION_VISITOR, conditionValues) + != PermissionUsedRecordDb::SUCCESS) { ACCESSTOKEN_LOG_ERROR(LABEL, "PERMISSION_VISITOR table remove fail"); return false; } -- Gitee From f7bbfe5e52cb3966702f2bbab404135fb6ad2bd1 Mon Sep 17 00:00:00 2001 From: chennian Date: Fri, 17 Jun 2022 16:58:47 +0800 Subject: [PATCH 5/6] Signed-off-by:chennianchennian1@huawei.com Signed-off-by: chennian --- .../src/database/permission_used_record_db.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/privacymanager/src/database/permission_used_record_db.cpp b/services/privacymanager/src/database/permission_used_record_db.cpp index fb33a6fc9..e2f271365 100644 --- a/services/privacymanager/src/database/permission_used_record_db.cpp +++ b/services/privacymanager/src/database/permission_used_record_db.cpp @@ -124,7 +124,8 @@ int32_t PermissionUsedRecordDb::Remove(const DataType type, const GenericValues& return (ret == Statement::State::DONE) ? SUCCESS : FAILURE; } -int32_t PermissionUsedRecordDb::Modify(const DataType type, const GenericValues& modifyValues, const GenericValues& conditions) +int32_t PermissionUsedRecordDb::Modify( + const DataType type, const GenericValues& modifyValues, const GenericValues& conditions) { OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); std::vector modifyColumns = modifyValues.GetAllKeys(); @@ -258,8 +259,8 @@ std::string PermissionUsedRecordDb::CreateDeletePrepareSqlCmd( return sql; } -std::string PermissionUsedRecordDb::CreateUpdatePrepareSqlCmd(const DataType type, const std::vector& modifyColumns, - const std::vector& conditionColumns) const +std::string PermissionUsedRecordDb::CreateUpdatePrepareSqlCmd(const DataType type, + const std::vector& modifyColumns, const std::vector& conditionColumns) const { if (modifyColumns.empty()) { return std::string(); -- Gitee From 0eeab011dfd109d4a07c7740be9a1f7cb6d2533a Mon Sep 17 00:00:00 2001 From: chennian Date: Fri, 17 Jun 2022 17:01:03 +0800 Subject: [PATCH 6/6] Signed-off-by:chennianchennian1@huawei.com Signed-off-by: chennian --- services/privacymanager/BUILD.gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/privacymanager/BUILD.gn b/services/privacymanager/BUILD.gn index 9cbca4624..4cd608c62 100644 --- a/services/privacymanager/BUILD.gn +++ b/services/privacymanager/BUILD.gn @@ -35,7 +35,7 @@ ohos_shared_library("privacy_manager_service") { "src/common/time_util.cpp", "src/common/to_string.cpp", "src/database/data_translator.cpp", - "src/database/permission_record_db.cpp", + "src/database/permission_used_record_db.cpp", "src/record/on_permission_used_record_callback_proxy.cpp", "src/record/on_permission_used_record_callback_stub.cpp", "src/record/permission_record.cpp", -- Gitee