From: Peter Krempa Date: Fri, 20 Oct 2017 11:50:23 +0000 (+0200) Subject: qemu: domain: Extract setup for disk source secrets X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=e53a42f0f6c15759075d3a5738fbf89ede507934;p=libvirt.git qemu: domain: Extract setup for disk source secrets Separate it so that it deals only with single virStorageSource, so that it can later be reused for full backing chain support. Two aliases are passed since authentication is more relevant to the 'storage backend' whereas encryption is more relevant to the protocol layer. When using node names, the aliases will be different. --- diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index d89b032ac0..7ac0d78fe5 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -1369,27 +1369,34 @@ qemuDomainDiskHasEncryptionSecret(virStorageSourcePtr src) } -/* qemuDomainSecretDiskPrepare: - * @conn: Pointer to connection - * @priv: pointer to domain private object - * @disk: Pointer to a disk definition +/** + * qemuDomainSecretStorageSourcePrepare: + * @conn: connection object - for secret lookup + * @priv: domain private object + * @src: storage source struct to setup + * @authalias: prefix of the alias for secret holding authentication data + * @encalias: prefix of the alias for secret holding encryption password * - * For the right disk, generate the qemuDomainSecretInfo structure. + * Prepares data necessary for encryption and authentication of @src. The two + * alias prefixes are provided since in the backing chain authentication belongs + * to the storage protocol data whereas encryption is relevant to the format + * driver in qemu. The two will have different node names. * - * Returns 0 on success, -1 on failure + * Returns 0 on success; -1 on error while reporting an libvirt error. */ -int -qemuDomainSecretDiskPrepare(virConnectPtr conn, - qemuDomainObjPrivatePtr priv, - virDomainDiskDefPtr disk) +static int +qemuDomainSecretStorageSourcePrepare(virConnectPtr conn, + qemuDomainObjPrivatePtr priv, + virStorageSourcePtr src, + const char *authalias, + const char *encalias) { - virStorageSourcePtr src = disk->src; qemuDomainStorageSourcePrivatePtr srcPriv; - if (!(disk->src->privateData = qemuDomainStorageSourcePrivateNew())) + if (!(src->privateData = qemuDomainStorageSourcePrivateNew())) return -1; - srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(disk->src); + srcPriv = QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src); if (qemuDomainSecretDiskCapable(src)) { virSecretUsageType usageType = VIR_SECRET_USAGE_TYPE_ISCSI; @@ -1398,7 +1405,7 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn, usageType = VIR_SECRET_USAGE_TYPE_CEPH; if (!(srcPriv->secinfo = - qemuDomainSecretInfoNew(conn, priv, disk->info.alias, + qemuDomainSecretInfoNew(conn, priv, authalias, usageType, src->auth->username, &src->auth->seclookupdef, false))) return -1; @@ -1406,7 +1413,7 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn, if (qemuDomainDiskHasEncryptionSecret(src)) { if (!(srcPriv->encinfo = - qemuDomainSecretInfoNew(conn, priv, disk->info.alias, + qemuDomainSecretInfoNew(conn, priv, encalias, VIR_SECRET_USAGE_TYPE_VOLUME, NULL, &src->encryption->secrets[0]->seclookupdef, true))) @@ -1417,6 +1424,27 @@ qemuDomainSecretDiskPrepare(virConnectPtr conn, } +/* qemuDomainSecretDiskPrepare: + * @conn: Pointer to connection + * @priv: pointer to domain private object + * @disk: Pointer to a disk definition + * + * For the right disk, generate the qemuDomainSecretInfo structure. + * + * Returns 0 on success, -1 on failure + */ + +int +qemuDomainSecretDiskPrepare(virConnectPtr conn, + qemuDomainObjPrivatePtr priv, + virDomainDiskDefPtr disk) +{ + return qemuDomainSecretStorageSourcePrepare(conn, priv, disk->src, + disk->info.alias, + disk->info.alias); +} + + /* qemuDomainSecretHostdevDestroy: * @disk: Pointer to a hostdev definition *