diff --git a/virtrust/src/tsb_agent/tsb_agent.h b/virtrust/src/tsb_agent/tsb_agent.h index 38fca89f02cc7416e13552aceb54700de9fc6ac4..ff3381f68bf25a50fd426695c00b98839727dfcf 100644 --- a/virtrust/src/tsb_agent/tsb_agent.h +++ b/virtrust/src/tsb_agent/tsb_agent.h @@ -182,13 +182,16 @@ int MigrationCheckPeerPk(char *vUuid, // 虚拟机的uuid char *pk2 // peer 临时生成的随机密钥对的公钥, a.k.a. pubkey ); -int MigrationGetVrootCipher(char *vUuid, // 虚拟机的uuid +int MigrationGetVrootCipher(char *pUuid, + char *vUuid, // 虚拟机的uuid char **cipher, // 输出:加密后的密码资源 int *cipherLen // 输出:密文长度 ); -int MigrationImportVrootCipher(char *vUuid, // 虚拟机的uuid - char *cipher // 加密后的密码资源 +int MigrationImportVrootCipher(char *pUuid, + char *vUuid, // 虚拟机的uuid + char *cipher, // 加密后的密码资源 + int cipherLen // 密文长度 ); int MigrationNotify(char *vUuid, // 虚拟机的uuid diff --git a/virtrust/src/tsb_agent/tsb_agent_adaptor.cpp b/virtrust/src/tsb_agent/tsb_agent_adaptor.cpp index 2979a0826b74f80b58b7b4fda5ddfa49898b5e7f..e1f3c90063b375e291f902cafc777b7d4e89a374 100644 --- a/virtrust/src/tsb_agent/tsb_agent_adaptor.cpp +++ b/virtrust/src/tsb_agent/tsb_agent_adaptor.cpp @@ -127,7 +127,8 @@ int MigrationCheckPeerPk(char *vUuid, // 虚拟机的uuid return virtrust::TsbAgent::GetInstance().MigrationCheckPeerPk(vUuid, pk1, pk2); } -int MigrationGetVrootCipher(char *vUuid, // 虚拟机的uuid +int MigrationGetVrootCipher(char *pUuid, + char *vUuid, // 虚拟机的uuid char **cipher, // 输出:加密后的密码资源 int *cipherLen // 输出:密文长度 ) @@ -135,17 +136,19 @@ int MigrationGetVrootCipher(char *vUuid, // 虚拟机的uuid if (!CheckTsbAgentDlopen()) { return -1; } - return virtrust::TsbAgent::GetInstance().MigrationGetVrootCipher(vUuid, cipher, cipherLen); + return virtrust::TsbAgent::GetInstance().MigrationGetVrootCipher(pUuid, vUuid, cipher, cipherLen); } -int MigrationImportVrootCipher(char *vUuid, // 虚拟机的uuid - char *cipher // 加密后的密码资源 +int MigrationImportVrootCipher(char *pUuid, + char *vUuid, // 虚拟机的uuid + char *cipher, // 加密后的密码资源 + int cipherLen // 密文长度 ) { if (!CheckTsbAgentDlopen()) { return -1; } - return virtrust::TsbAgent::GetInstance().MigrationImportVrootCipher(vUuid, cipher); + return virtrust::TsbAgent::GetInstance().MigrationImportVrootCipher(pUuid, vUuid, cipher, cipherLen); } int MigrationNotify(char *vUuid, // 虚拟机的uuid diff --git a/virtrust/src/virtrust/dllib/tsb_agent.h b/virtrust/src/virtrust/dllib/tsb_agent.h index 63ac2093cf2e85bee8796066736239db47b2e344..2ceabd6a268bba25f3c5bec1ccaabc740b34a904 100644 --- a/virtrust/src/virtrust/dllib/tsb_agent.h +++ b/virtrust/src/virtrust/dllib/tsb_agent.h @@ -66,8 +66,8 @@ public: DlFun MigrationGetCert; DlFun MigrationCheckPeerPk; - DlFun MigrationGetVrootCipher; - DlFun MigrationImportVrootCipher; + DlFun MigrationGetVrootCipher; + DlFun MigrationImportVrootCipher; DlFun MigrationNotify; private: diff --git a/virtrust/src/virtrust/link/migration_session.cpp b/virtrust/src/virtrust/link/migration_session.cpp index dd647337ddd73bc3e1769e9974bf1863a6695ccb..c78ac0aa0e54cd8d9d30d9b53607c5b6d9c9b404 100644 --- a/virtrust/src/virtrust/link/migration_session.cpp +++ b/virtrust/src/virtrust/link/migration_session.cpp @@ -192,7 +192,7 @@ MigrateSessionRc MigrationSession::OnStartMigrationResponseReceived() char *cipher = nullptr; int cipherLen = 0; // 收集密码资源 - auto ret = MigrationGetVrootCipher(const_cast(sessionId_.c_str()), &cipher, &cipherLen); + auto ret = MigrationGetVrootCipher(sessionId_.data(), sessionId_.data(), &cipher, &cipherLen); if (ret != 0 || cipher == nullptr) { VIRTRUST_LOG_ERROR( "|OnStartMigrationResponseReceived|END|returnF|domain name: {}|MigrationGetVRootCipher failed.", @@ -274,7 +274,7 @@ MigrateSessionRc MigrationSession::OnTransferResponseReceived(bool transferRet) // 所有动作执行完后,判断是否删除本地虚机 if (flags_ & MIGRATE_UNDEFINE_SOURCE) { (void)UndefineVirtDomainBaseUri(localUri_); - int tsbRet = RemoveVRoot(const_cast(sessionId_.c_str())); + int tsbRet = RemoveVRoot(sessionId_.data()); if (tsbRet != 0) { VIRTRUST_LOG_ERROR("|OnTransferResponseReceived|END|returnF||tsb resource remove " "failed, maybe not exist tsb resource uuid: " @@ -489,7 +489,7 @@ MigrateSessionRc MigrationSession::NotifyVRMigration(bool success) { VIRTRUST_LOG_DEBUG("|NotifyVRMigration|START|"); auto status = success ? 0 : -1; - auto ret = MigrationNotify(const_cast(sessionId_.c_str()), status); + auto ret = MigrationNotify(sessionId_.data(), status); if (ret != 0) { VIRTRUST_LOG_INFO("|NotifyVRMigration|END|returnF|domainName:{}, migration statu: {}|Notify TSB failed.", domainName_, success); @@ -673,9 +673,14 @@ MigrateSessionRc MigrationSession::OnTransferDataRequestReceived(const protos::V "|OnTransferDataRequestReceived|END|returnF|domain name: {}|Waiting for transfering timeout.", domainName_); return MigrateSessionRc::ERROR; } + // 导入服务端校验客户端发来的虚拟机资源信息 - auto ret = MigrationImportVrootCipher(const_cast(request->uuid().c_str()), - const_cast(request->cipherdata().c_str())); + auto uuid = request->uuid(); + auto cipherData = request->cipherdata(); + auto ret = MigrationImportVrootCipher(uuid.data(), + uuid.data(), + cipherData.data(), + cipherData.size()); if (ret != 0) { EnterState(State::Failed); VIRTRUST_LOG_ERROR(