]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: domain: Add helpers for partially clearing qemuDomainSecretInfoPtr
authorPeter Krempa <pkrempa@redhat.com>
Mon, 28 May 2018 13:17:01 +0000 (15:17 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 5 Jun 2018 06:11:12 +0000 (08:11 +0200)
It's desired to keep the alias around to allow referencing of the secret
object used with qemu. Add set of APIs which will destroy all data
except the alias.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h

index f6a629364bdce71585a8d8256a069dd64c60e683..f72c49f39251b47479b458b28d424466ca7ac904 100644 (file)
@@ -949,38 +949,65 @@ qemuDomainSecretPlainClear(qemuDomainSecretPlain secret)
 
 
 static void
-qemuDomainSecretAESClear(qemuDomainSecretAES secret)
+qemuDomainSecretAESClear(qemuDomainSecretAES secret,
+                         bool keepAlias)
 {
+    if (!keepAlias)
+        VIR_FREE(secret.alias);
+
     VIR_FREE(secret.username);
-    VIR_FREE(secret.alias);
     VIR_FREE(secret.iv);
     VIR_FREE(secret.ciphertext);
 }
 
 
-void
-qemuDomainSecretInfoFree(qemuDomainSecretInfoPtr *secinfo)
+static void
+qemuDomainSecretInfoClear(qemuDomainSecretInfoPtr secinfo,
+                          bool keepAlias)
 {
-    if (!*secinfo)
+    if (!secinfo)
         return;
 
-    switch ((qemuDomainSecretInfoType) (*secinfo)->type) {
+    switch ((qemuDomainSecretInfoType) secinfo->type) {
     case VIR_DOMAIN_SECRET_INFO_TYPE_PLAIN:
-        qemuDomainSecretPlainClear((*secinfo)->s.plain);
+        qemuDomainSecretPlainClear(secinfo->s.plain);
         break;
 
     case VIR_DOMAIN_SECRET_INFO_TYPE_AES:
-        qemuDomainSecretAESClear((*secinfo)->s.aes);
+        qemuDomainSecretAESClear(secinfo->s.aes, keepAlias);
         break;
 
     case VIR_DOMAIN_SECRET_INFO_TYPE_LAST:
         break;
     }
+}
+
+
+void
+qemuDomainSecretInfoFree(qemuDomainSecretInfoPtr *secinfo)
+{
+    if (!*secinfo)
+        return;
+
+    qemuDomainSecretInfoClear(*secinfo, false);
 
     VIR_FREE(*secinfo);
 }
 
 
+/**
+ * qemuDomainSecretInfoDestroy:
+ * @secinfo: object to destroy
+ *
+ * Removes any data unnecessary for further use, but keeps alias allocated.
+ */
+void
+qemuDomainSecretInfoDestroy(qemuDomainSecretInfoPtr secinfo)
+{
+    qemuDomainSecretInfoClear(secinfo, true);
+}
+
+
 static virClassPtr qemuDomainDiskPrivateClass;
 static void qemuDomainDiskPrivateDispose(void *obj);
 
index f76404e1ac2513b75822d563f2b0bea973199a07..3e139e0c57f9469b9d056240d140dc1a1f2768ee 100644 (file)
@@ -836,6 +836,8 @@ bool qemuDomainSupportsEncryptedSecret(qemuDomainObjPrivatePtr priv);
 void qemuDomainSecretInfoFree(qemuDomainSecretInfoPtr *secinfo)
     ATTRIBUTE_NONNULL(1);
 
+void qemuDomainSecretInfoDestroy(qemuDomainSecretInfoPtr secinfo);
+
 void qemuDomainSecretDiskDestroy(virDomainDiskDefPtr disk)
     ATTRIBUTE_NONNULL(1);