From a2a990614856292f3231f7690e19c03ee6599c54 Mon Sep 17 00:00:00 2001 From: hhhhs9527 Date: Tue, 23 Aug 2022 14:41:22 +0800 Subject: [PATCH 01/10] =?UTF-8?q?2022/08/23=20=E6=9D=83=E9=99=90=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AE=B0=E5=BD=95=E4=BC=98=E5=8C=96=E6=95=B4=E6=94=B9?= =?UTF-8?q?=20Signed-off-by:hanshu5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hhhhs9527 --- services/privacymanager/BUILD.gn | 1 - .../database/permission_used_record_db.h | 5 +- .../record/permission_record_repository.h | 2 +- .../record/permission_used_record_cache.h | 16 ++--- .../database/permission_used_record_db.cpp | 9 ++- .../src/record/permission_record_manager.cpp | 4 +- .../record/permission_record_repository.cpp | 9 +-- .../record/permission_used_record_cache.cpp | 67 +++++++++---------- 8 files changed, 49 insertions(+), 64 deletions(-) diff --git a/services/privacymanager/BUILD.gn b/services/privacymanager/BUILD.gn index eea5a2d2f..f2278527d 100644 --- a/services/privacymanager/BUILD.gn +++ b/services/privacymanager/BUILD.gn @@ -67,7 +67,6 @@ if (is_standard_system) { "//base/security/access_token/interfaces/innerkits/accesstoken:libaccesstoken_sdk", "//base/security/access_token/services/common/database:accesstoken_database_cxx", "//base/security/access_token/services/privacymanager:privacy.rc", - "//utils/native/base:utils", ] external_deps = [ diff --git a/services/privacymanager/include/database/permission_used_record_db.h b/services/privacymanager/include/database/permission_used_record_db.h index 6b1192669..146d12005 100644 --- a/services/privacymanager/include/database/permission_used_record_db.h +++ b/services/privacymanager/include/database/permission_used_record_db.h @@ -21,6 +21,7 @@ #include "nocopyable.h" #include "rwlock.h" +#include namespace OHOS { namespace Security { @@ -45,9 +46,9 @@ public: int32_t FindByConditions(DataType type, const GenericValues& andConditions, const GenericValues& orConditions, std::vector& results); int32_t Modify(DataType type, const GenericValues& modifyValues, const GenericValues& conditions); - int32_t Count(DataType type, GenericValues& result); + void Count(DataType type, GenericValues& result); int32_t DeleteExpireRecords(DataType type, const GenericValues& andConditions); - int32_t DeleteExcessiveRecords(DataType type, unsigned excessiveSize); + int32_t DeleteExcessiveRecords(DataType type, uint32_t excessiveSize); int32_t GetDistinctValue(DataType type, const std::string& condition, std::vector& results); void OnCreate() override; diff --git a/services/privacymanager/include/record/permission_record_repository.h b/services/privacymanager/include/record/permission_record_repository.h index 0e249f33d..1ca8caee9 100644 --- a/services/privacymanager/include/record/permission_record_repository.h +++ b/services/privacymanager/include/record/permission_record_repository.h @@ -34,7 +34,7 @@ public: const GenericValues& orConditionValues, std::vector& recordValues); bool RemoveRecordValues(const GenericValues& conditionValues); bool GetAllRecordValuesByKey(const std::string& condition, std::vector& resultValues); - int32_t CountRecordValues(GenericValues& resultValues); + void CountRecordValues(GenericValues& resultValues); bool DeleteExpireRecordsValues(const GenericValues& andConditions); bool DeleteExcessiveSizeRecordValues(uint32_t excessiveSize); }; diff --git a/services/privacymanager/include/record/permission_used_record_cache.h b/services/privacymanager/include/record/permission_used_record_cache.h index 7cf3a0e6c..f04ac4f2b 100644 --- a/services/privacymanager/include/record/permission_used_record_cache.h +++ b/services/privacymanager/include/record/permission_used_record_cache.h @@ -39,24 +39,23 @@ public: void ExecuteReadRecordBufferTask(); int32_t PersistPendingRecords(); void GetPersistPendingRecordsAndReset(); - int32_t RemoveRecords(const GenericValues &record); - void RemoveRecordsFromPersistPendingBufferQueue(const GenericValues &record, + int32_t RemoveRecords(const GenericValues& record); + void RemoveRecordsFromPersistPendingBufferQueue(const GenericValues& record, std::shared_ptr persistPendingBufferHead, std::shared_ptr persistPendingBufferEnd); void GetRecords(const std::vector& permissionList, - const GenericValues &andConditionValues, const GenericValues& orConditionValues, - std::vector& findRecordsValues); - void GetAllRecords(const std::vector& permissionList, - const GenericValues &andConditionValues, const GenericValues& orConditionValues, + const GenericValues& andConditionValues, const GenericValues& orConditionValues, std::vector& findRecordsValues); void GetRecordsFromPersistPendingBufferQueue(const std::vector& permissionList, const GenericValues& andConditionValues, const GenericValues& orConditionValues, std::vector& findRecordsValues, const std::set& opCodeList); bool RecordCompare(const AccessTokenID tokenId, const std::set& opCodeList, - const GenericValues &andConditionValues, const PermissionRecord &record); + const GenericValues& andConditionValues, const PermissionRecord& record); void FindTokenIdList(std::set& tokenIdList); void TransferToOpcode(std::set& opCodeList, const std::vector& permissionList); + void ResetRecordBuffer(const int32_t remainCount, + std::shared_ptr& persistPendingBufferEnd); void AddRecordNode(const PermissionRecord& record); void DeleteRecordNode(std::shared_ptr deleteRecordNode); @@ -66,7 +65,8 @@ private: std::shared_ptr curRecordBufferPos_ = recordBufferHead_; std::vector> persistPendingBufferQueue_; int64_t nextPersistTimestamp_ = 0L; - const static int32_t INTERVAL = 60 * 15; + // const static int32_t INTERVAL = 60 * 15; + const static int32_t INTERVAL = 60; const static int32_t MAX_PERSIST_SIZE = 100; int32_t persistIsRunning_ = 0; OHOS::Utils::RWLock cacheLock_; diff --git a/services/privacymanager/src/database/permission_used_record_db.cpp b/services/privacymanager/src/database/permission_used_record_db.cpp index 9c3a78662..a0acd26ec 100644 --- a/services/privacymanager/src/database/permission_used_record_db.cpp +++ b/services/privacymanager/src/database/permission_used_record_db.cpp @@ -18,6 +18,7 @@ #include "accesstoken_log.h" #include "constant.h" #include "field_const.h" +#include namespace OHOS { namespace Security { @@ -182,7 +183,7 @@ int32_t PermissionUsedRecordDb::GetDistinctValue(DataType type, return SUCCESS; } -int32_t PermissionUsedRecordDb::Count(DataType type, GenericValues& result) +void PermissionUsedRecordDb::Count(DataType type, GenericValues& result) { OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); std::string countSql = CreateCountPrepareSqlCmd(type); @@ -191,7 +192,6 @@ int32_t PermissionUsedRecordDb::Count(DataType type, GenericValues& result) int32_t column = 0; result.Put(Constant::COUNT_CMD, countStatement.GetValue(column, true)); } - return SUCCESS; } int32_t PermissionUsedRecordDb::DeleteExpireRecords(DataType type, @@ -205,15 +205,14 @@ int32_t PermissionUsedRecordDb::DeleteExpireRecords(DataType type, for (const auto& columnName : andColumns) { deleteExpireStatement.Bind(columnName, andConditions.Get(columnName)); } - int32_t ret = deleteExpireStatement.Step(); - if (ret != Statement::State::DONE) { + if (deleteExpireStatement.Step() != Statement::State::DONE) { return FAILURE; } } return SUCCESS; } -int32_t PermissionUsedRecordDb::DeleteExcessiveRecords(DataType type, unsigned excessiveSize) +int32_t PermissionUsedRecordDb::DeleteExcessiveRecords(DataType type, uint32_t excessiveSize) { OHOS::Utils::UniqueWriteGuard lock(this->rwLock_); std::string deleteExcessiveSql = CreateDeleteExcessiveRecordsPrepareSqlCmd(type, excessiveSize); diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index 658613dd3..f8a6066c4 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -300,9 +300,7 @@ int32_t PermissionRecordManager::DeletePermissionRecord(int32_t days) { Utils::UniqueWriteGuard lk(this->rwLock_); GenericValues countValue; - if (!PermissionRecordRepository::GetInstance().CountRecordValues(countValue)) { - return Constant::FAILURE; - } + PermissionRecordRepository::GetInstance().CountRecordValues(countValue); int64_t total = countValue.GetInt64(Constant::COUNT_CMD); if (total > Constant::MAX_TOTAL_RECORD) { uint32_t excessiveSize = total - Constant::MAX_TOTAL_RECORD; diff --git a/services/privacymanager/src/record/permission_record_repository.cpp b/services/privacymanager/src/record/permission_record_repository.cpp index d9ff4fd42..4d2e7d08a 100644 --- a/services/privacymanager/src/record/permission_record_repository.cpp +++ b/services/privacymanager/src/record/permission_record_repository.cpp @@ -83,14 +83,9 @@ bool PermissionRecordRepository::GetAllRecordValuesByKey( return true; } -int32_t PermissionRecordRepository::CountRecordValues(GenericValues& resultValues) +void PermissionRecordRepository::CountRecordValues(GenericValues& resultValues) { - if (PermissionUsedRecordDb::GetInstance().Count(PermissionUsedRecordDb::PERMISSION_RECORD, resultValues) - != PermissionUsedRecordDb::SUCCESS) { - ACCESSTOKEN_LOG_ERROR(LABEL, "Cannot count PERMISSION_RECORD"); - return false; - } - return true; + PermissionUsedRecordDb::GetInstance().Count(PermissionUsedRecordDb::PERMISSION_RECORD, resultValues); } bool PermissionRecordRepository::DeleteExpireRecordsValues(const GenericValues& andConditions) diff --git a/services/privacymanager/src/record/permission_used_record_cache.cpp b/services/privacymanager/src/record/permission_used_record_cache.cpp index 738a36620..b8fcfcf9b 100644 --- a/services/privacymanager/src/record/permission_used_record_cache.cpp +++ b/services/privacymanager/src/record/permission_used_record_cache.cpp @@ -25,6 +25,7 @@ #include "permission_used_record_db.h" #include "time_util.h" #include "to_string.h" +#include namespace OHOS { namespace Security { @@ -61,6 +62,7 @@ void PermissionUsedRecordCache::AddRecordToBuffer(PermissionRecord& record) break; } else if (curFindMergePos->record.tokenId == record.tokenId && record.opCode == curFindMergePos->record.opCode && + record.status == curFindMergePos->record.status && (record.timestamp - curFindMergePos->record.timestamp) <= Constant::PRECISE) { MergeRecord(record, curFindMergePos); } else { @@ -71,17 +73,7 @@ void PermissionUsedRecordCache::AddRecordToBuffer(PermissionRecord& record) AddRecordNode(record); // refresh curRecordBUfferPos and readableSize remainCount++; if (persistPendingBufferEnd != nullptr) { - readableSize_ = remainCount; - std::shared_ptr tmpRecordBufferHead = - std::make_shared(); - tmpRecordBufferHead->next = persistPendingBufferEnd->next; - persistPendingBufferEnd->next.reset(); - recordBufferHead_ = tmpRecordBufferHead; - if (persistPendingBufferEnd == curRecordBufferPos_) { // persistPendingBufferEnd == curRecordBufferPos - curRecordBufferPos_ = recordBufferHead_; - } else { // remainCount !=0 ==> recordBufferHead->next != nullptr - recordBufferHead_->next->pre = recordBufferHead_; - } + ResetRecordBuffer(remainCount, persistPendingBufferEnd); } } if (persistPendingBufferEnd != nullptr) { @@ -207,18 +199,8 @@ int32_t PermissionUsedRecordCache::RemoveRecords(const GenericValues& record) curFindDeletePos = next; } if (countPersistPendingNode != 0) { // refresh recordBufferHead - readableSize_ -= countPersistPendingNode; - std::shared_ptr tmpRecordBufferHead = - std::make_shared(); - tmpRecordBufferHead->next = persistPendingBufferEnd->next; - persistPendingBufferEnd->next.reset(); - recordBufferHead_ = tmpRecordBufferHead; - recordBufferHead_->pre.reset(); - if (persistPendingBufferEnd == curRecordBufferPos_) { - curRecordBufferPos_ = recordBufferHead_; - } else { // remainCount !=0 ==> recordBufferHead->next != nullptr - recordBufferHead_->next->pre = recordBufferHead_; - } + int32_t remainCount = readableSize_ - countPersistPendingNode; + ResetRecordBuffer(remainCount, persistPendingBufferEnd); } } RemoveRecordsFromPersistPendingBufferQueue(record, persistPendingBufferHead, persistPendingBufferEnd); @@ -234,7 +216,7 @@ void PermissionUsedRecordCache::RemoveRecordsFromPersistPendingBufferQueue(const std::shared_ptr curFindDeletePos; Utils::UniqueWriteGuard lock2(this->cacheLock_); if (!persistPendingBufferQueue_.empty()) { - for (auto persistHead : persistPendingBufferQueue_) { + for (auto& persistHead : persistPendingBufferQueue_) { curFindDeletePos = persistHead->next; while (curFindDeletePos != nullptr) { auto next = curFindDeletePos->next; @@ -281,17 +263,8 @@ void PermissionUsedRecordCache::GetRecords(const std::vector& permi curFindPos = next; } if (countPersistPendingNode != 0) { // refresh recordBufferHead - readableSize_ -= countPersistPendingNode; - std::shared_ptr tmpRecordBufferHead = - std::make_shared(); - tmpRecordBufferHead->next = persistPendingBufferEnd->next; - persistPendingBufferEnd->next.reset(); - recordBufferHead_ = tmpRecordBufferHead; - if (persistPendingBufferEnd == curRecordBufferPos_) { - curRecordBufferPos_ = recordBufferHead_; - } else { // remainCount !=0 ==> recordBufferHead->next != nullptr - recordBufferHead_->next->pre = recordBufferHead_; - } + int32_t remainCount = readableSize_ - countPersistPendingNode; + ResetRecordBuffer(remainCount, persistPendingBufferEnd); } } GetRecordsFromPersistPendingBufferQueue(permissionList, andConditionValues, @@ -310,7 +283,7 @@ void PermissionUsedRecordCache::GetRecordsFromPersistPendingBufferQueue( std::shared_ptr curFindPos; Utils::UniqueWriteGuard lock2(this->cacheLock_); if (!persistPendingBufferQueue_.empty()) { - for (auto persistHead : persistPendingBufferQueue_) { + for (auto& persistHead : persistPendingBufferQueue_) { curFindPos = persistHead->next; while (curFindPos != nullptr) { auto next = curFindPos->next; @@ -323,12 +296,32 @@ void PermissionUsedRecordCache::GetRecordsFromPersistPendingBufferQueue( } } } - if (tokenId != INVALID_TOKENID && !PermissionRecordRepository::GetInstance().FindRecordValues( + if (!PermissionRecordRepository::GetInstance().FindRecordValues( andConditionValues, orConditionValues, findRecordsValues)) { // find records from database ACCESSTOKEN_LOG_ERROR(LABEL, "find records from database failed"); } } +void PermissionUsedRecordCache::ResetRecordBuffer(const int32_t remainCount, + std::shared_ptr& persistPendingBufferEnd) +{ + readableSize_ = remainCount; + // refresh recordBufferHead + std::shared_ptr tmpRecordBufferHead = + std::make_shared(); + tmpRecordBufferHead->next = persistPendingBufferEnd->next; + persistPendingBufferEnd->next.reset(); + recordBufferHead_ = tmpRecordBufferHead; + + if (persistPendingBufferEnd == curRecordBufferPos_) { + // persistPendingBufferEnd == curRecordBufferPos, reset curRecordBufferPos + curRecordBufferPos_ = recordBufferHead_; + } else { + // recordBufferHead_->next->pre = persistPendingBufferEnd, reset recordBufferHead_->next->pre + recordBufferHead_->next->pre = recordBufferHead_; + } +} + void PermissionUsedRecordCache::TransferToOpcode(std::set& opCodeList, const std::vector& permissionList) { -- Gitee From 8e0f53a21a1e4bf6ab1d0a4597c390d39c1d72f7 Mon Sep 17 00:00:00 2001 From: hhhhs9527 Date: Tue, 23 Aug 2022 15:28:04 +0800 Subject: [PATCH 02/10] =?UTF-8?q?2022/08/23=20=E6=9D=83=E9=99=90=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AE=B0=E5=BD=95=E4=BC=98=E5=8C=96=E6=95=B4=E6=94=B9?= =?UTF-8?q?=20Signed-off-by:hanshu5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hhhhs9527 --- .../privacymanager/include/database/permission_used_record_db.h | 1 - .../privacymanager/src/database/permission_used_record_db.cpp | 1 - .../privacymanager/src/record/permission_used_record_cache.cpp | 1 - 3 files changed, 3 deletions(-) diff --git a/services/privacymanager/include/database/permission_used_record_db.h b/services/privacymanager/include/database/permission_used_record_db.h index 146d12005..3ae7d5bb5 100644 --- a/services/privacymanager/include/database/permission_used_record_db.h +++ b/services/privacymanager/include/database/permission_used_record_db.h @@ -21,7 +21,6 @@ #include "nocopyable.h" #include "rwlock.h" -#include namespace OHOS { namespace Security { diff --git a/services/privacymanager/src/database/permission_used_record_db.cpp b/services/privacymanager/src/database/permission_used_record_db.cpp index a0acd26ec..0c6e9e64f 100644 --- a/services/privacymanager/src/database/permission_used_record_db.cpp +++ b/services/privacymanager/src/database/permission_used_record_db.cpp @@ -18,7 +18,6 @@ #include "accesstoken_log.h" #include "constant.h" #include "field_const.h" -#include namespace OHOS { namespace Security { diff --git a/services/privacymanager/src/record/permission_used_record_cache.cpp b/services/privacymanager/src/record/permission_used_record_cache.cpp index b8fcfcf9b..f64f2a704 100644 --- a/services/privacymanager/src/record/permission_used_record_cache.cpp +++ b/services/privacymanager/src/record/permission_used_record_cache.cpp @@ -25,7 +25,6 @@ #include "permission_used_record_db.h" #include "time_util.h" #include "to_string.h" -#include namespace OHOS { namespace Security { -- Gitee From 07589452e5557ce076ffc5118e65834952e7438c Mon Sep 17 00:00:00 2001 From: hhhhs9527 Date: Wed, 24 Aug 2022 11:30:55 +0800 Subject: [PATCH 03/10] =?UTF-8?q?2022/08/24=20=E6=9D=83=E9=99=90=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AE=B0=E5=BD=95=E4=BC=98=E5=8C=96=E6=95=B4=E6=94=B9?= =?UTF-8?q?=20Signed-off-by:hanshu5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hhhhs9527 --- services/common/database/include/field_const.h | 2 ++ services/privacymanager/include/common/constant.h | 1 - services/privacymanager/src/common/constant.cpp | 1 - .../privacymanager/src/database/permission_used_record_db.cpp | 2 +- .../privacymanager/src/record/permission_record_manager.cpp | 2 +- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/common/database/include/field_const.h b/services/common/database/include/field_const.h index aaa185f04..9375b72e1 100644 --- a/services/common/database/include/field_const.h +++ b/services/common/database/include/field_const.h @@ -59,6 +59,8 @@ const std::string FIELD_TIMESTAMP_END = "timestamp_end"; const std::string FIELD_FLAG = "flag"; const std::string FIELD_API_VERSION = "api_version"; + +const std::string FIELD_COUNT_NUMBER = "count"; } // namespace AccessToken } // namespace Security } // namespace OHOS diff --git a/services/privacymanager/include/common/constant.h b/services/privacymanager/include/common/constant.h index 1893d77e3..6e3602ac6 100644 --- a/services/privacymanager/include/common/constant.h +++ b/services/privacymanager/include/common/constant.h @@ -62,7 +62,6 @@ public: const static int32_t RECORD_DELETE_TIME = 30 * 86400; const static int32_t PRECISE = 60; const static int32_t LATEST_RECORD_TIME = 7 * 86400; - const static std::string COUNT_CMD; const static std::map PERMISSION_OPCODE_MAP; public: diff --git a/services/privacymanager/src/common/constant.cpp b/services/privacymanager/src/common/constant.cpp index 1a9b74855..34fda467f 100644 --- a/services/privacymanager/src/common/constant.cpp +++ b/services/privacymanager/src/common/constant.cpp @@ -18,7 +18,6 @@ namespace OHOS { namespace Security { namespace AccessToken { -const std::string Constant::COUNT_CMD = "COUNT"; const std::map Constant::PERMISSION_OPCODE_MAP = { std::map::value_type("ohos.permission.ANSWER_CALL", Constant::OP_ANSWER_CALL), std::map::value_type("ohos.permission.READ_CALENDAR", Constant::OP_READ_CALENDAR), diff --git a/services/privacymanager/src/database/permission_used_record_db.cpp b/services/privacymanager/src/database/permission_used_record_db.cpp index 0c6e9e64f..465def0b0 100644 --- a/services/privacymanager/src/database/permission_used_record_db.cpp +++ b/services/privacymanager/src/database/permission_used_record_db.cpp @@ -189,7 +189,7 @@ void PermissionUsedRecordDb::Count(DataType type, GenericValues& result) auto countStatement = Prepare(countSql); if (countStatement.Step() == Statement::State::ROW) { int32_t column = 0; - result.Put(Constant::COUNT_CMD, countStatement.GetValue(column, true)); + result.Put(FIELD_COUNT_NUMBER, countStatement.GetValue(column, true)); } } diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index f8a6066c4..98dba96a2 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -301,7 +301,7 @@ int32_t PermissionRecordManager::DeletePermissionRecord(int32_t days) Utils::UniqueWriteGuard lk(this->rwLock_); GenericValues countValue; PermissionRecordRepository::GetInstance().CountRecordValues(countValue); - int64_t total = countValue.GetInt64(Constant::COUNT_CMD); + int64_t total = countValue.GetInt64(FIELD_COUNT_NUMBER); if (total > Constant::MAX_TOTAL_RECORD) { uint32_t excessiveSize = total - Constant::MAX_TOTAL_RECORD; if (!PermissionRecordRepository::GetInstance().DeleteExcessiveSizeRecordValues(excessiveSize)) { -- Gitee From 7c890d1d779fb340c3108a8e3bf8695cd9452b42 Mon Sep 17 00:00:00 2001 From: hhhhs9527 Date: Wed, 24 Aug 2022 11:31:49 +0800 Subject: [PATCH 04/10] =?UTF-8?q?2022/08/24=20=E6=9D=83=E9=99=90=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AE=B0=E5=BD=95=E4=BC=98=E5=8C=96=E6=95=B4=E6=94=B9?= =?UTF-8?q?=20Signed-off-by:hanshu5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hhhhs9527 --- .../include/record/permission_used_record_cache.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/privacymanager/include/record/permission_used_record_cache.h b/services/privacymanager/include/record/permission_used_record_cache.h index f04ac4f2b..2858ac6f3 100644 --- a/services/privacymanager/include/record/permission_used_record_cache.h +++ b/services/privacymanager/include/record/permission_used_record_cache.h @@ -65,8 +65,7 @@ private: std::shared_ptr curRecordBufferPos_ = recordBufferHead_; std::vector> persistPendingBufferQueue_; int64_t nextPersistTimestamp_ = 0L; - // const static int32_t INTERVAL = 60 * 15; - const static int32_t INTERVAL = 60; + const static int32_t INTERVAL = 60 * 15; const static int32_t MAX_PERSIST_SIZE = 100; int32_t persistIsRunning_ = 0; OHOS::Utils::RWLock cacheLock_; -- Gitee From 9fc32402b187fcd2029a645e68081792173756ac Mon Sep 17 00:00:00 2001 From: hhhhs9527 Date: Wed, 24 Aug 2022 15:22:13 +0800 Subject: [PATCH 05/10] =?UTF-8?q?2022/08/24=20=E6=9D=83=E9=99=90=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AE=B0=E5=BD=95=E4=BC=98=E5=8C=96=E6=95=B4=E6=94=B9?= =?UTF-8?q?=20Signed-off-by:hanshu5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hhhhs9527 --- services/common/database/include/field_const.h | 2 -- .../include/record/permission_used_record_cache.h | 4 ++-- .../src/database/permission_used_record_db.cpp | 1 + .../src/record/permission_record_manager.cpp | 5 ++--- .../src/record/permission_used_record_cache.cpp | 12 ++++++------ 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/services/common/database/include/field_const.h b/services/common/database/include/field_const.h index 9375b72e1..aaa185f04 100644 --- a/services/common/database/include/field_const.h +++ b/services/common/database/include/field_const.h @@ -59,8 +59,6 @@ const std::string FIELD_TIMESTAMP_END = "timestamp_end"; const std::string FIELD_FLAG = "flag"; const std::string FIELD_API_VERSION = "api_version"; - -const std::string FIELD_COUNT_NUMBER = "count"; } // namespace AccessToken } // namespace Security } // namespace OHOS diff --git a/services/privacymanager/include/record/permission_used_record_cache.h b/services/privacymanager/include/record/permission_used_record_cache.h index 2858ac6f3..978a38f9b 100644 --- a/services/privacymanager/include/record/permission_used_record_cache.h +++ b/services/privacymanager/include/record/permission_used_record_cache.h @@ -39,8 +39,8 @@ public: void ExecuteReadRecordBufferTask(); int32_t PersistPendingRecords(); void GetPersistPendingRecordsAndReset(); - int32_t RemoveRecords(const GenericValues& record); - void RemoveRecordsFromPersistPendingBufferQueue(const GenericValues& record, + int32_t RemoveRecords(const AccessTokenID tokenId); + void RemoveRecordsFromPersistPendingBufferQueue(const AccessTokenID tokenId, std::shared_ptr persistPendingBufferHead, std::shared_ptr persistPendingBufferEnd); void GetRecords(const std::vector& permissionList, diff --git a/services/privacymanager/src/database/permission_used_record_db.cpp b/services/privacymanager/src/database/permission_used_record_db.cpp index 465def0b0..1e216b7a5 100644 --- a/services/privacymanager/src/database/permission_used_record_db.cpp +++ b/services/privacymanager/src/database/permission_used_record_db.cpp @@ -26,6 +26,7 @@ namespace { static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, SECURITY_DOMAIN_PRIVACY, "PermissionUsedRecordDb" }; +static const std::string FIELD_COUNT_NUMBER = "count"; } PermissionUsedRecordDb& PermissionUsedRecordDb::GetInstance() diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index 98dba96a2..9e57727a7 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -35,6 +35,7 @@ static constexpr OHOS::HiviewDFX::HiLogLabel LABEL = { LOG_CORE, SECURITY_DOMAIN_PRIVACY, "PermissionRecordManager" }; static const std::string DEFAULT_DEVICEID = "0"; +static const std::string FIELD_COUNT_NUMBER = "count"; } PermissionRecordManager& PermissionRecordManager::GetInstance() { @@ -124,9 +125,7 @@ void PermissionRecordManager::RemovePermissionUsedRecords(AccessTokenID tokenId, return; } - Utils::UniqueWriteGuard lk(this->rwLock_); - GenericValues record; - record.Put(FIELD_TOKEN_ID, (int32_t)tokenId); + Utils::UniqueWriteGuard lk(this->rwLock_); PermissionUsedRecordCache::GetInstance().RemoveRecords(record); // remove from cache and database } diff --git a/services/privacymanager/src/record/permission_used_record_cache.cpp b/services/privacymanager/src/record/permission_used_record_cache.cpp index f64f2a704..f5c529995 100644 --- a/services/privacymanager/src/record/permission_used_record_cache.cpp +++ b/services/privacymanager/src/record/permission_used_record_cache.cpp @@ -171,9 +171,8 @@ int32_t PermissionUsedRecordCache::PersistPendingRecords() return true; } -int32_t PermissionUsedRecordCache::RemoveRecords(const GenericValues& record) +int32_t PermissionUsedRecordCache::RemoveRecords(const AccessTokenID tokenId) { - AccessTokenID tokenId = record.GetInt(FIELD_TOKEN_ID); std::shared_ptr curFindDeletePos; std::shared_ptr persistPendingBufferHead; std::shared_ptr persistPendingBufferEnd = nullptr; @@ -202,15 +201,14 @@ int32_t PermissionUsedRecordCache::RemoveRecords(const GenericValues& record) ResetRecordBuffer(remainCount, persistPendingBufferEnd); } } - RemoveRecordsFromPersistPendingBufferQueue(record, persistPendingBufferHead, persistPendingBufferEnd); + RemoveRecordsFromPersistPendingBufferQueue(tokenId, persistPendingBufferHead, persistPendingBufferEnd); return Constant::SUCCESS; } -void PermissionUsedRecordCache::RemoveRecordsFromPersistPendingBufferQueue(const GenericValues& record, +void PermissionUsedRecordCache::RemoveRecordsFromPersistPendingBufferQueue(const AccessTokenID tokenId, std::shared_ptr persistPendingBufferHead, std::shared_ptr persistPendingBufferEnd) { - AccessTokenID tokenId = record.GetInt(FIELD_TOKEN_ID); { std::shared_ptr curFindDeletePos; Utils::UniqueWriteGuard lock2(this->cacheLock_); @@ -226,8 +224,10 @@ void PermissionUsedRecordCache::RemoveRecordsFromPersistPendingBufferQueue(const } } } - PermissionRecordRepository::GetInstance().RemoveRecordValues(record); // remove from database } + GenericValues record; + record.Put(FIELD_TOKEN_ID, (int32_t)tokenId); + PermissionRecordRepository::GetInstance().RemoveRecordValues(record); // remove from database if (persistPendingBufferEnd != nullptr) { // add to queue AddToPersistQueue(persistPendingBufferHead); } -- Gitee From 6633e3ee22744a360a66779b7eab59cd2d6677c3 Mon Sep 17 00:00:00 2001 From: hhhhs9527 Date: Wed, 24 Aug 2022 15:32:21 +0800 Subject: [PATCH 06/10] =?UTF-8?q?2022/08/24=20=E6=9D=83=E9=99=90=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AE=B0=E5=BD=95=E4=BC=98=E5=8C=96=E6=95=B4=E6=94=B9?= =?UTF-8?q?=20Signed-off-by:hanshu5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hhhhs9527 --- .../privacymanager/src/record/permission_record_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index 9e57727a7..8b2379fb8 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -126,7 +126,7 @@ void PermissionRecordManager::RemovePermissionUsedRecords(AccessTokenID tokenId, } Utils::UniqueWriteGuard lk(this->rwLock_); - PermissionUsedRecordCache::GetInstance().RemoveRecords(record); // remove from cache and database + PermissionUsedRecordCache::GetInstance().RemoveRecords(tokenId); // remove from cache and database } int32_t PermissionRecordManager::GetPermissionUsedRecords( -- Gitee From bd044721c51a27bbb9adb4c643174c51d5c3ee19 Mon Sep 17 00:00:00 2001 From: hhhhs9527 Date: Wed, 24 Aug 2022 15:35:55 +0800 Subject: [PATCH 07/10] =?UTF-8?q?2022/08/24=20=E6=9D=83=E9=99=90=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AE=B0=E5=BD=95=E4=BC=98=E5=8C=96=E6=95=B4=E6=94=B9?= =?UTF-8?q?=20Signed-off-by:hanshu5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hhhhs9527 --- .../include/record/permission_used_record_cache.h | 4 ++-- .../src/record/permission_used_record_cache.cpp | 11 +++++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/services/privacymanager/include/record/permission_used_record_cache.h b/services/privacymanager/include/record/permission_used_record_cache.h index 978a38f9b..3d4f75170 100644 --- a/services/privacymanager/include/record/permission_used_record_cache.h +++ b/services/privacymanager/include/record/permission_used_record_cache.h @@ -46,9 +46,9 @@ public: void GetRecords(const std::vector& permissionList, const GenericValues& andConditionValues, const GenericValues& orConditionValues, std::vector& findRecordsValues); - void GetRecordsFromPersistPendingBufferQueue(const std::vector& permissionList, + void GetRecordsFromPersistPendingBufferQueue(const std::set& opCodeList const GenericValues& andConditionValues, const GenericValues& orConditionValues, - std::vector& findRecordsValues, const std::set& opCodeList); + std::vector& findRecordsValues); bool RecordCompare(const AccessTokenID tokenId, const std::set& opCodeList, const GenericValues& andConditionValues, const PermissionRecord& record); void FindTokenIdList(std::set& tokenIdList); diff --git a/services/privacymanager/src/record/permission_used_record_cache.cpp b/services/privacymanager/src/record/permission_used_record_cache.cpp index f5c529995..00116a8d2 100644 --- a/services/privacymanager/src/record/permission_used_record_cache.cpp +++ b/services/privacymanager/src/record/permission_used_record_cache.cpp @@ -266,17 +266,16 @@ void PermissionUsedRecordCache::GetRecords(const std::vector& permi ResetRecordBuffer(remainCount, persistPendingBufferEnd); } } - GetRecordsFromPersistPendingBufferQueue(permissionList, andConditionValues, - orConditionValues, findRecordsValues, opCodeList); + GetRecordsFromPersistPendingBufferQueue(opCodeList, andConditionValues, + orConditionValues, findRecordsValues); if (countPersistPendingNode != 0) { AddToPersistQueue(persistPendingBufferHead); } } -void PermissionUsedRecordCache::GetRecordsFromPersistPendingBufferQueue( - const std::vector& permissionList, const GenericValues& andConditionValues, - const GenericValues& orConditionValues, std::vector& findRecordsValues, - const std::set& opCodeList) +void PermissionUsedRecordCache::GetRecordsFromPersistPendingBufferQueue(const std::set& opCodeList + const GenericValues& andConditionValues, const GenericValues& orConditionValues, + std::vector& findRecordsValues) { AccessTokenID tokenId = andConditionValues.GetInt(FIELD_TOKEN_ID); std::shared_ptr curFindPos; -- Gitee From 546fad25a8ceb6b74fb81ec39048aaa0f3ed2a29 Mon Sep 17 00:00:00 2001 From: hhhhs9527 Date: Wed, 24 Aug 2022 15:48:41 +0800 Subject: [PATCH 08/10] =?UTF-8?q?2022/08/24=20=E6=9D=83=E9=99=90=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AE=B0=E5=BD=95=E4=BC=98=E5=8C=96=E6=95=B4=E6=94=B9?= =?UTF-8?q?=20Signed-off-by:hanshu5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hhhhs9527 --- .../include/record/permission_used_record_cache.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/privacymanager/include/record/permission_used_record_cache.h b/services/privacymanager/include/record/permission_used_record_cache.h index 3d4f75170..272bef471 100644 --- a/services/privacymanager/include/record/permission_used_record_cache.h +++ b/services/privacymanager/include/record/permission_used_record_cache.h @@ -46,7 +46,7 @@ public: void GetRecords(const std::vector& permissionList, const GenericValues& andConditionValues, const GenericValues& orConditionValues, std::vector& findRecordsValues); - void GetRecordsFromPersistPendingBufferQueue(const std::set& opCodeList + void GetRecordsFromPersistPendingBufferQueue(const std::set& opCodeList, const GenericValues& andConditionValues, const GenericValues& orConditionValues, std::vector& findRecordsValues); bool RecordCompare(const AccessTokenID tokenId, const std::set& opCodeList, -- Gitee From 35978af244297aa2fda4681c6d838986511cdadc Mon Sep 17 00:00:00 2001 From: hhhhs9527 Date: Wed, 24 Aug 2022 15:55:58 +0800 Subject: [PATCH 09/10] =?UTF-8?q?2022/08/24=20=E6=9D=83=E9=99=90=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AE=B0=E5=BD=95=E4=BC=98=E5=8C=96=E6=95=B4=E6=94=B9?= =?UTF-8?q?=20Signed-off-by:hanshu5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hhhhs9527 --- .../privacymanager/src/record/permission_used_record_cache.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/privacymanager/src/record/permission_used_record_cache.cpp b/services/privacymanager/src/record/permission_used_record_cache.cpp index 00116a8d2..b256d0757 100644 --- a/services/privacymanager/src/record/permission_used_record_cache.cpp +++ b/services/privacymanager/src/record/permission_used_record_cache.cpp @@ -273,7 +273,7 @@ void PermissionUsedRecordCache::GetRecords(const std::vector& permi } } -void PermissionUsedRecordCache::GetRecordsFromPersistPendingBufferQueue(const std::set& opCodeList +void PermissionUsedRecordCache::GetRecordsFromPersistPendingBufferQueue(const std::set& opCodeList, const GenericValues& andConditionValues, const GenericValues& orConditionValues, std::vector& findRecordsValues) { -- Gitee From f6d0428dd77fd2cfe9b25f3df1e303def4737d62 Mon Sep 17 00:00:00 2001 From: hhhhs9527 Date: Wed, 24 Aug 2022 16:17:32 +0800 Subject: [PATCH 10/10] =?UTF-8?q?2022/08/24=20=E6=9D=83=E9=99=90=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E8=AE=B0=E5=BD=95=E4=BC=98=E5=8C=96=E6=95=B4=E6=94=B9?= =?UTF-8?q?=20Signed-off-by:hanshu5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: hhhhs9527 --- .../privacymanager/src/record/permission_record_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/privacymanager/src/record/permission_record_manager.cpp b/services/privacymanager/src/record/permission_record_manager.cpp index 8b2379fb8..37514e9f5 100644 --- a/services/privacymanager/src/record/permission_record_manager.cpp +++ b/services/privacymanager/src/record/permission_record_manager.cpp @@ -125,7 +125,7 @@ void PermissionRecordManager::RemovePermissionUsedRecords(AccessTokenID tokenId, return; } - Utils::UniqueWriteGuard lk(this->rwLock_); + Utils::UniqueWriteGuard lk(this->rwLock_); PermissionUsedRecordCache::GetInstance().RemoveRecords(tokenId); // remove from cache and database } -- Gitee