QEMU's curl driver requires the cookes concatenated and allows them
passed in via a secret. Prepare the value for the secret and encrypt it.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_domain.c | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index b36ff434f3..5c8fc83417 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1727,6 +1727,30 @@ qemuDomainDiskHasEncryptionSecret(virStorageSourcePtr src)
}
+static qemuDomainSecretInfoPtr
+qemuDomainSecretStorageSourcePrepareCookies(qemuDomainObjPrivatePtr priv,
+ virStorageSourcePtr src,
+ const char *aliasprotocol)
+{
+ g_autofree char *secretalias = qemuAliasForSecret(aliasprotocol,
"httpcookie");
+ g_autofree char *cookies = NULL;
+ g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
+ size_t i;
+
+ for (i = 0; i < src->ncookies; i++) {
+ virStorageNetCookieDefPtr cookie = src->cookies[i];
+
+ virBufferAsprintf(&buf, "%s=%s; ", cookie->name,
cookie->value);
+ }
+
+ virBufferTrim(&buf, "; ");
+ cookies = virBufferContentAndReset(&buf);
+
+ return qemuDomainSecretAESSetup(priv, secretalias, NULL,
+ (uint8_t *) cookies, strlen(cookies));
+}
+
+
/**
* qemuDomainSecretStorageSourcePrepare:
* @priv: domain private object
@@ -1752,7 +1776,7 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
bool hasAuth = qemuDomainStorageSourceHasAuth(src);
bool hasEnc = qemuDomainDiskHasEncryptionSecret(src);
- if (!hasAuth && !hasEnc)
+ if (!hasAuth && !hasEnc && src->ncookies == 0)
return 0;
if (!(src->privateData = qemuDomainStorageSourcePrivateNew()))
@@ -1792,6 +1816,13 @@ qemuDomainSecretStorageSourcePrepare(qemuDomainObjPrivatePtr priv,
return -1;
}
+ if (src->ncookies &&
+ virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) &&
+ !(srcPriv->httpcookie = qemuDomainSecretStorageSourcePrepareCookies(priv,
+ src,
+
aliasprotocol)))
+ return -1;
+
return 0;
}
--
2.24.1