diff --git a/common/coauth/src/coauth_funcs.c b/common/coauth/src/coauth_funcs.c index 2b74875657073a5ae22c1157dd4b76fe92e779a8..647d4564e21077b16a219e759fabdabe14b145af 100644 --- a/common/coauth/src/coauth_funcs.c +++ b/common/coauth/src/coauth_funcs.c @@ -31,6 +31,7 @@ int32_t GetScheduleInfo(uint64_t scheduleId, ScheduleInfoHal *scheduleInfo) { if (scheduleInfo == NULL) { LOG_ERROR("scheduleInfo is null"); + return RESULT_BAD_PARAM; } CoAuthSchedule coAuthSchedule; coAuthSchedule.scheduleId = scheduleId; @@ -70,24 +71,23 @@ int32_t ScheduleFinish(const Buffer *executorMsg, ScheduleTokenHal *scheduleToke LOG_ERROR("param is invalid"); return RESULT_BAD_PARAM; } + scheduleToken->scheduleResult = RESULT_GENERAL_ERROR; + int32_t ret = RESULT_GENERAL_ERROR; ExecutorResultInfo *resultInfo = GetExecutorResultInfo(executorMsg); - if (resultInfo == NULL) { - LOG_ERROR("tlv parse failed"); - return RESULT_BAD_PARAM; + if (resultInfo == NULL || scheduleToken->scheduleId != resultInfo->scheduleId || + resultInfo->result != RESULT_SUCCESS) { + LOG_ERROR("executor msg is invalid"); + goto EXIT; } - scheduleToken->scheduleId = resultInfo->scheduleId; + CoAuthSchedule coAuthSchedule; coAuthSchedule.scheduleId = resultInfo->scheduleId; - int32_t ret = GetCoAuthSchedule(&coAuthSchedule); + ret = GetCoAuthSchedule(&coAuthSchedule); if (ret != RESULT_SUCCESS) { LOG_ERROR("get coAuth schedule failed"); goto EXIT; } - if (resultInfo->result != RESULT_SUCCESS) { - LOG_ERROR("executor result failed"); - goto EXIT; - } Buffer *publicKey = NULL; uint32_t index; @@ -113,7 +113,7 @@ int32_t ScheduleFinish(const Buffer *executorMsg, ScheduleTokenHal *scheduleToke EXIT: DestoryExecutorResultInfo(resultInfo); - (void)RemoveCoAuthSchedule(coAuthSchedule.scheduleId); + (void)RemoveCoAuthSchedule(scheduleToken->scheduleId); return ret; } diff --git a/common/hal_sdk/coauth_interface.cpp b/common/hal_sdk/coauth_interface.cpp index a9ae12993fef8f236a976d1bccccb521d30ab417..796f4ce9cfe326ed16d90d8c889bd56405cd6359 100644 --- a/common/hal_sdk/coauth_interface.cpp +++ b/common/hal_sdk/coauth_interface.cpp @@ -49,10 +49,10 @@ static ExecutorInfoHal CopyExecutorInfoIn(const ExecutorInfo &executorInfo) return executorInfoHal; } -static ScheduleInfo CopyScheduleInfoOut(const ScheduleInfoHal &scheduleInfoHal) +static void CopyScheduleInfoOut(ScheduleInfo &scheduleInfo, const ScheduleInfoHal &scheduleInfoHal) { LOG_INFO("begin"); - ScheduleInfo scheduleInfo; + scheduleInfo.executors.clear(); scheduleInfo.authSubType = scheduleInfoHal.authSubType; scheduleInfo.templateId = scheduleInfoHal.templateId; scheduleInfo.scheduleMode = scheduleInfoHal.scheduleMode; @@ -60,18 +60,12 @@ static ScheduleInfo CopyScheduleInfoOut(const ScheduleInfoHal &scheduleInfoHal) ExecutorInfo executorInfo = CopyExecutorInfoOut(scheduleInfoHal.executorInfos[i]); scheduleInfo.executors.push_back(executorInfo); } - return scheduleInfo; } int32_t GetScheduleInfo(uint64_t scheduleId, ScheduleInfo &scheduleInfo) { LOG_INFO("begin"); GlobalLock(); - if (!scheduleInfo.executors.empty()) { - LOG_ERROR("param is invalid"); - GlobalUnLock(); - return RESULT_BAD_PARAM; - } ScheduleInfoHal scheduleInfoHal; int32_t ret = GetScheduleInfo(scheduleId, &scheduleInfoHal); if (ret != RESULT_SUCCESS) { @@ -79,7 +73,7 @@ int32_t GetScheduleInfo(uint64_t scheduleId, ScheduleInfo &scheduleInfo) GlobalUnLock(); return ret; } - scheduleInfo = CopyScheduleInfoOut(scheduleInfoHal); + CopyScheduleInfoOut(scheduleInfo, scheduleInfoHal); GlobalUnLock(); return RESULT_SUCCESS; } @@ -88,19 +82,15 @@ int32_t DeleteScheduleInfo(uint64_t scheduleId, ScheduleInfo &scheduleInfo) { LOG_INFO("begin"); GlobalLock(); - if (!scheduleInfo.executors.empty()) { - LOG_ERROR("param is invalid"); - GlobalUnLock(); - return RESULT_BAD_PARAM; - } ScheduleInfoHal scheduleInfoHal; int32_t ret = GetScheduleInfo(scheduleId, &scheduleInfoHal); if (ret != RESULT_SUCCESS) { LOG_ERROR("get schedule info failed"); + (void)RemoveCoAuthSchedule(scheduleId); GlobalUnLock(); return ret; } - scheduleInfo = CopyScheduleInfoOut(scheduleInfoHal); + CopyScheduleInfoOut(scheduleInfo, scheduleInfoHal); (void)RemoveCoAuthSchedule(scheduleId); GlobalUnLock(); return RESULT_SUCCESS; @@ -108,10 +98,6 @@ int32_t DeleteScheduleInfo(uint64_t scheduleId, ScheduleInfo &scheduleInfo) static Buffer *CreateBufferByVector(std::vector &executorFinishMsg) { - if (executorFinishMsg.empty()) { - LOG_ERROR("vector is empty"); - return nullptr; - } LOG_INFO("executorFinishMsg size is %{public}u", executorFinishMsg.size()); Buffer *data = CreateBufferByData(&executorFinishMsg[0], executorFinishMsg.size()); return data; @@ -120,6 +106,11 @@ static Buffer *CreateBufferByVector(std::vector &executorFinishMsg) int32_t GetScheduleToken(std::vector executorFinishMsg, ScheduleToken &scheduleToken) { LOG_INFO("begin"); + if (executorFinishMsg.empty()) { + LOG_ERROR("executorFinishMsg is empty"); + ScheduleInfo scheduleInfo; + return DeleteScheduleInfo(scheduleToken.scheduleId, scheduleInfo); + } GlobalLock(); Buffer *executorMsg = CreateBufferByVector(executorFinishMsg); if (executorMsg == nullptr) { @@ -128,6 +119,7 @@ int32_t GetScheduleToken(std::vector executorFinishMsg, ScheduleToken & return RESULT_NO_MEMORY; } ScheduleTokenHal scheduleTokenHal; + scheduleTokenHal.scheduleId = scheduleToken.scheduleId; int32_t ret = ScheduleFinish(executorMsg, &scheduleTokenHal); if (ret != RESULT_SUCCESS) { GlobalUnLock(); diff --git a/services/src/executor_messenger.cpp b/services/src/executor_messenger.cpp index 3ad68945d9b6933d5f0a60db79351d76973d2aaf..8e2e0219e35ffeeda25108349da2d8b721f112e7 100755 --- a/services/src/executor_messenger.cpp +++ b/services/src/executor_messenger.cpp @@ -50,11 +50,14 @@ int32_t ExecutorMessenger::Finish(uint64_t scheduleId, int32_t srcType, int32_t { COAUTH_HILOGD(MODULE_SERVICE, "ExecutorMessenger::Finish"); if (finalResult == nullptr) { + CoAuth::ScheduleInfo scheduleInfo; + DeleteScheduleInfo(scheduleId, scheduleInfo); COAUTH_HILOGE(MODULE_SERVICE, "finalResult is nullptr"); return FAIL; } - if (ScheResPool_ == nullptr) { + CoAuth::ScheduleInfo scheduleInfo; + DeleteScheduleInfo(scheduleId, scheduleInfo); COAUTH_HILOGE(MODULE_SERVICE, "ScheResPool_ is nullptr"); return FAIL; } else { @@ -70,15 +73,19 @@ int32_t ExecutorMessenger::Finish(uint64_t scheduleId, int32_t srcType, int32_t UserIAM::CoAuth::ScheduleToken signScheduleToken; std::vector executorFinishMsg; std::vector scheduleToken; + signScheduleToken.scheduleId = scheduleId; finalResult->GetUint8ArrayValue(AUTH_RESULT, executorFinishMsg); int32_t signRet = UserIAM::CoAuth::GetScheduleToken(executorFinishMsg, signScheduleToken); if (signRet != SUCCESS) { + callback->OnFinish(signRet, scheduleToken); + ScheResPool_->DeleteScheduleCallback(scheduleId); return signRet; } - scheduleToken.resize(sizeof(UserIAM::CoAuth::ScheduleToken)); if (memcpy_s(&scheduleToken[0], scheduleToken.size(), &signScheduleToken, sizeof(UserIAM::CoAuth::ScheduleToken)) != EOK) { + callback->OnFinish(FAIL, scheduleToken); + ScheResPool_->DeleteScheduleCallback(scheduleId); COAUTH_HILOGE(MODULE_SERVICE, "copy scheduleToken failed"); return FAIL; }