提交 c9a7b7b6 编写于 作者: J John Ferlan

qemu: Introduce qemuDomainSecretInfoNew

Create a helper which will create the secinfo used for disks, hostdevs,
and chardevs.
Signed-off-by: NJohn Ferlan <jferlan@redhat.com>
上级 0de1066f
...@@ -1112,6 +1112,52 @@ qemuDomainSecretSetup(virConnectPtr conn, ...@@ -1112,6 +1112,52 @@ qemuDomainSecretSetup(virConnectPtr conn,
} }
/* qemuDomainSecretInfoNew:
* @conn: Pointer to connection
* @priv: pointer to domain private object
* @srcAlias: Alias base to use for TLS object
* @usageType: Secret usage type
* @username: username for plain secrets (only)
* @looupdef: lookup def describing secret
* @isLuks: boolean for luks lookup
*
* Helper function to create a secinfo to be used for secinfo consumers
*
* Returns @secinfo on success, NULL on failure. Caller is responsible
* to eventually free @secinfo.
*/
static qemuDomainSecretInfoPtr
qemuDomainSecretInfoNew(virConnectPtr conn,
qemuDomainObjPrivatePtr priv,
const char *srcAlias,
virSecretUsageType usageType,
const char *username,
virSecretLookupTypeDefPtr lookupDef,
bool isLuks)
{
qemuDomainSecretInfoPtr secinfo = NULL;
if (VIR_ALLOC(secinfo) < 0)
return NULL;
if (qemuDomainSecretSetup(conn, priv, secinfo, srcAlias, usageType,
username, lookupDef, isLuks) < 0)
goto error;
if (!username && secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_PLAIN) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("encrypted secrets are not supported"));
goto error;
}
return secinfo;
error:
qemuDomainSecretInfoFree(&secinfo);
return NULL;
}
/* qemuDomainSecretDiskDestroy: /* qemuDomainSecretDiskDestroy:
* @disk: Pointer to a disk definition * @disk: Pointer to a disk definition
* *
...@@ -1171,51 +1217,30 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn, ...@@ -1171,51 +1217,30 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn,
{ {
virStorageSourcePtr src = disk->src; virStorageSourcePtr src = disk->src;
qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
qemuDomainSecretInfoPtr secinfo = NULL;
if (qemuDomainSecretDiskCapable(src)) { if (qemuDomainSecretDiskCapable(src)) {
virSecretUsageType secretUsageType = VIR_SECRET_USAGE_TYPE_ISCSI; virSecretUsageType secretUsageType = VIR_SECRET_USAGE_TYPE_ISCSI;
if (VIR_ALLOC(secinfo) < 0)
return -1;
if (src->protocol == VIR_STORAGE_NET_PROTOCOL_RBD) if (src->protocol == VIR_STORAGE_NET_PROTOCOL_RBD)
secretUsageType = VIR_SECRET_USAGE_TYPE_CEPH; secretUsageType = VIR_SECRET_USAGE_TYPE_CEPH;
if (qemuDomainSecretSetup(conn, priv, secinfo, disk->info.alias, if (!(diskPriv->secinfo =
secretUsageType, src->auth->username, qemuDomainSecretInfoNew(conn, priv, disk->info.alias,
&src->auth->seclookupdef, false) < 0) secretUsageType, src->auth->username,
goto error; &src->auth->seclookupdef, false)))
return -1;
diskPriv->secinfo = secinfo;
} }
if (qemuDomainDiskHasEncryptionSecret(src)) { if (qemuDomainDiskHasEncryptionSecret(src)) {
if (!(diskPriv->encinfo =
if (VIR_ALLOC(secinfo) < 0) qemuDomainSecretInfoNew(conn, priv, disk->info.alias,
return -1; VIR_SECRET_USAGE_TYPE_VOLUME, NULL,
&src->encryption->secrets[0]->seclookupdef,
if (qemuDomainSecretSetup(conn, priv, secinfo, disk->info.alias, true)))
VIR_SECRET_USAGE_TYPE_VOLUME, NULL, return -1;
&src->encryption->secrets[0]->seclookupdef,
true) < 0)
goto error;
if (secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_PLAIN) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("luks encryption requires encrypted secrets "
"to be supported"));
goto error;
}
diskPriv->encinfo = secinfo;
} }
return 0; return 0;
error:
qemuDomainSecretInfoFree(&secinfo);
return -1;
} }
...@@ -1251,8 +1276,6 @@ qemuDomainSecretHostdevPrepare(virConnectPtr conn, ...@@ -1251,8 +1276,6 @@ qemuDomainSecretHostdevPrepare(virConnectPtr conn,
qemuDomainObjPrivatePtr priv, qemuDomainObjPrivatePtr priv,
virDomainHostdevDefPtr hostdev) virDomainHostdevDefPtr hostdev)
{ {
qemuDomainSecretInfoPtr secinfo = NULL;
if (virHostdevIsSCSIDevice(hostdev)) { if (virHostdevIsSCSIDevice(hostdev)) {
virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi; virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = &scsisrc->u.iscsi; virDomainHostdevSubsysSCSIiSCSIPtr iscsisrc = &scsisrc->u.iscsi;
...@@ -1263,24 +1286,17 @@ qemuDomainSecretHostdevPrepare(virConnectPtr conn, ...@@ -1263,24 +1286,17 @@ qemuDomainSecretHostdevPrepare(virConnectPtr conn,
qemuDomainHostdevPrivatePtr hostdevPriv = qemuDomainHostdevPrivatePtr hostdevPriv =
QEMU_DOMAIN_HOSTDEV_PRIVATE(hostdev); QEMU_DOMAIN_HOSTDEV_PRIVATE(hostdev);
if (VIR_ALLOC(secinfo) < 0) if (!(hostdevPriv->secinfo =
qemuDomainSecretInfoNew(conn, priv, hostdev->info->alias,
VIR_SECRET_USAGE_TYPE_ISCSI,
iscsisrc->auth->username,
&iscsisrc->auth->seclookupdef,
false)))
return -1; return -1;
if (qemuDomainSecretSetup(conn, priv, secinfo, hostdev->info->alias,
VIR_SECRET_USAGE_TYPE_ISCSI,
iscsisrc->auth->username,
&iscsisrc->auth->seclookupdef, false) < 0)
goto error;
hostdevPriv->secinfo = secinfo;
} }
} }
return 0; return 0;
error:
qemuDomainSecretInfoFree(&secinfo);
return -1;
} }
...@@ -1322,7 +1338,6 @@ qemuDomainSecretChardevPrepare(virConnectPtr conn, ...@@ -1322,7 +1338,6 @@ qemuDomainSecretChardevPrepare(virConnectPtr conn,
virDomainChrSourceDefPtr dev) virDomainChrSourceDefPtr dev)
{ {
virSecretLookupTypeDef seclookupdef = {0}; virSecretLookupTypeDef seclookupdef = {0};
qemuDomainSecretInfoPtr secinfo = NULL;
char *charAlias = NULL; char *charAlias = NULL;
if (dev->type != VIR_DOMAIN_CHR_TYPE_TCP) if (dev->type != VIR_DOMAIN_CHR_TYPE_TCP)
...@@ -1337,36 +1352,26 @@ qemuDomainSecretChardevPrepare(virConnectPtr conn, ...@@ -1337,36 +1352,26 @@ qemuDomainSecretChardevPrepare(virConnectPtr conn,
seclookupdef.u.uuid) < 0) { seclookupdef.u.uuid) < 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("malformed chardev TLS secret uuid in qemu.conf")); _("malformed chardev TLS secret uuid in qemu.conf"));
goto error; return -1;
} }
seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_UUID; seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_UUID;
if (VIR_ALLOC(secinfo) < 0)
goto error;
if (!(charAlias = qemuAliasChardevFromDevAlias(chrAlias))) if (!(charAlias = qemuAliasChardevFromDevAlias(chrAlias)))
goto error; return -1;
if (qemuDomainSecretSetup(conn, priv, secinfo, charAlias,
VIR_SECRET_USAGE_TYPE_TLS, NULL,
&seclookupdef, false) < 0)
goto error;
if (secinfo->type == VIR_DOMAIN_SECRET_INFO_TYPE_PLAIN) { if (!(chrSourcePriv->secinfo =
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", qemuDomainSecretInfoNew(conn, priv, charAlias,
_("TLS X.509 requires encrypted secrets " VIR_SECRET_USAGE_TYPE_TLS, NULL,
"to be supported")); &seclookupdef, false)))
goto error; goto error;
}
chrSourcePriv->secinfo = secinfo; VIR_FREE(charAlias);
} }
VIR_FREE(charAlias);
return 0; return 0;
error: error:
qemuDomainSecretInfoFree(&secinfo); VIR_FREE(charAlias);
return -1; return -1;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册