mirror of
https://gitee.com/openharmony/distributeddatamgr_datamgr_service
synced 2025-02-17 05:08:43 +00:00
!2099 lock key for multi-process and restore key from datamgr_service
Merge pull request !2099 from Sven Wang/master
This commit is contained in:
commit
6d9a62ae95
@ -172,7 +172,7 @@ int32_t RdbServiceImpl::ResolveAutoLaunch(const std::string &identifier, Distrib
|
||||
if (entry.isEncrypt) {
|
||||
param.option.iterateTimes = ITERATE_TIMES;
|
||||
param.option.cipher = DistributedDB::CipherType::AES_256_GCM;
|
||||
GetPassword(entry, param.option.passwd);
|
||||
GetDBPassword(entry, param.option.passwd);
|
||||
}
|
||||
AutoCache::GetInstance().GetStore(entry, GetWatchers(entry.tokenId, entry.storeId));
|
||||
return true;
|
||||
@ -887,7 +887,7 @@ Details RdbServiceImpl::HandleGenDetails(const GenDetails &details)
|
||||
return dbDetails;
|
||||
}
|
||||
|
||||
bool RdbServiceImpl::GetPassword(const StoreMetaData &metaData, DistributedDB::CipherPassword &password)
|
||||
bool RdbServiceImpl::GetDBPassword(const StoreMetaData &metaData, DistributedDB::CipherPassword &password)
|
||||
{
|
||||
if (!metaData.isEncrypt) {
|
||||
return true;
|
||||
@ -1108,13 +1108,37 @@ int32_t RdbServiceImpl::Disable(const RdbSyncerParam& param)
|
||||
auto tokenId = IPCSkeleton::GetCallingTokenID();
|
||||
auto storeId = RemoveSuffix(param.storeName_);
|
||||
AutoCache::GetInstance().Disable(tokenId, storeId);
|
||||
return E_OK;
|
||||
return RDB_OK;
|
||||
}
|
||||
|
||||
int32_t RdbServiceImpl::Enable(const RdbSyncerParam& param)
|
||||
{
|
||||
auto tokenId = IPCSkeleton::GetCallingTokenID();
|
||||
auto storeId = RemoveSuffix(param.storeName_);
|
||||
AutoCache::GetInstance().Enable(tokenId, storeId);
|
||||
return E_OK;
|
||||
return RDB_OK;
|
||||
}
|
||||
|
||||
int32_t RdbServiceImpl::GetPassword(const RdbSyncerParam ¶m, std::vector<uint8_t> &password)
|
||||
{
|
||||
if (!CheckAccess(param.bundleName_, param.storeName_)) {
|
||||
ZLOGE("bundleName:%{public}s, storeName:%{public}s. Permission error", param.bundleName_.c_str(),
|
||||
Anonymous::Change(param.storeName_).c_str());
|
||||
return RDB_ERROR;
|
||||
}
|
||||
auto meta = GetStoreMetaData(param);
|
||||
SecretKeyMetaData secretKey;
|
||||
if (!MetaDataManager::GetInstance().LoadMeta(meta.GetSecretKey(), secretKey, true)) {
|
||||
ZLOGE("bundleName:%{public}s, storeName:%{public}s. no meta", param.bundleName_.c_str(),
|
||||
Anonymous::Change(param.storeName_).c_str());
|
||||
return RDB_NO_META;
|
||||
}
|
||||
|
||||
if (!CryptoManager::GetInstance().Decrypt(secretKey.sKey, password)) {
|
||||
ZLOGE("bundleName:%{public}s, storeName:%{public}s. decrypt err", param.bundleName_.c_str(),
|
||||
Anonymous::Change(param.storeName_).c_str());
|
||||
return RDB_ERROR;
|
||||
}
|
||||
return RDB_OK;
|
||||
}
|
||||
} // namespace OHOS::DistributedRdb
|
@ -94,6 +94,8 @@ public:
|
||||
|
||||
int32_t AfterOpen(const RdbSyncerParam ¶m) override;
|
||||
|
||||
int32_t GetPassword(const RdbSyncerParam ¶m, std::vector<uint8_t> &password) override;
|
||||
|
||||
private:
|
||||
using Watchers = DistributedData::AutoCache::Watchers;
|
||||
using StaticActs = DistributedData::StaticActs;
|
||||
@ -177,7 +179,7 @@ private:
|
||||
|
||||
static std::pair<int32_t, int32_t> GetInstIndexAndUser(uint32_t tokenId, const std::string &bundleName);
|
||||
|
||||
static bool GetPassword(const StoreMetaData &metaData, DistributedDB::CipherPassword &password);
|
||||
static bool GetDBPassword(const StoreMetaData &metaData, DistributedDB::CipherPassword &password);
|
||||
|
||||
void GetCloudSchema(const RdbSyncerParam ¶m);
|
||||
|
||||
|
@ -352,4 +352,24 @@ int32_t RdbServiceStub::OnEnable(MessageParcel& data, MessageParcel& reply)
|
||||
}
|
||||
return RDB_OK;
|
||||
}
|
||||
|
||||
int32_t RdbServiceStub::OnGetPassword(MessageParcel &data, MessageParcel &reply)
|
||||
{
|
||||
RdbSyncerParam param;
|
||||
if (!ITypesUtil::Unmarshal(data, param)) {
|
||||
ZLOGE("Unmarshal bundleName_:%{public}s storeName_:%{public}s", param.bundleName_.c_str(),
|
||||
Anonymous::Change(param.storeName_).c_str());
|
||||
return IPC_STUB_INVALID_DATA_ERR;
|
||||
}
|
||||
|
||||
std::vector<uint8_t> key;
|
||||
auto status = GetPassword(param, key);
|
||||
if (!ITypesUtil::Marshal(reply, status, key)) {
|
||||
key.assign(key.size(), 0);
|
||||
ZLOGE("Marshal status:0x%{public}x", status);
|
||||
return IPC_STUB_WRITE_PARCEL_ERR;
|
||||
}
|
||||
key.assign(key.size(), 0);
|
||||
return RDB_OK;
|
||||
}
|
||||
} // namespace OHOS::DistributedRdb
|
||||
|
@ -66,6 +66,8 @@ private:
|
||||
|
||||
int32_t OnEnable(MessageParcel& data, MessageParcel& reply);
|
||||
|
||||
int32_t OnGetPassword(MessageParcel& data, MessageParcel& reply);
|
||||
|
||||
using RequestHandle = int (RdbServiceStub::*)(MessageParcel &, MessageParcel &);
|
||||
static constexpr RequestHandle HANDLERS[static_cast<uint32_t>(RdbServiceCode::RDB_SERVICE_CMD_MAX)] = {
|
||||
[static_cast<uint32_t>(RdbServiceCode::RDB_SERVICE_CMD_OBTAIN_TABLE)] =
|
||||
@ -90,7 +92,8 @@ private:
|
||||
[static_cast<uint32_t>(RdbServiceCode::RDB_SERVICE_CMD_DISABLE)] = &RdbServiceStub::OnDisable,
|
||||
[static_cast<uint32_t>(RdbServiceCode::RDB_SERVICE_CMD_ENABLE)] = &RdbServiceStub::OnEnable,
|
||||
[static_cast<uint32_t>(RdbServiceCode::RDB_SERVICE_CMD_BEFORE_OPEN)] = &RdbServiceStub::OnBeforeOpen,
|
||||
[static_cast<uint32_t>(RdbServiceCode::RDB_SERVICE_CMD_AFTER_OPEN)] = &RdbServiceStub::OnAfterOpen
|
||||
[static_cast<uint32_t>(RdbServiceCode::RDB_SERVICE_CMD_AFTER_OPEN)] = &RdbServiceStub::OnAfterOpen,
|
||||
[static_cast<uint32_t>(RdbServiceCode::RDB_SERVICE_CMD_GET_PASSWORD)] = &RdbServiceStub::OnGetPassword
|
||||
};
|
||||
};
|
||||
} // namespace OHOS::DistributedRdb
|
||||
|
Loading…
x
Reference in New Issue
Block a user