[libvirt] [PATCH 2/3] storage: Split out setting default secret for encryption

John Ferlan jferlan at redhat.com
Thu May 26 21:52:49 UTC 2016


Split the qcow setting of encryption secrets into a helper

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 src/storage/storage_backend_fs.c | 79 +++++++++++++++++++++++++---------------
 1 file changed, 49 insertions(+), 30 deletions(-)

diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
index 45474cb..a11df36 100644
--- a/src/storage/storage_backend_fs.c
+++ b/src/storage/storage_backend_fs.c
@@ -1280,6 +1280,51 @@ virStorageBackendFileSystemVolDelete(virConnectPtr conn ATTRIBUTE_UNUSED,
 }
 
 
+/* virStorageBackendFileSystemLoadDefaultSecrets:
+ * @conn: Connection pointer to fetch secret
+ * @vol: volume being refreshed
+ *
+ * If the volume had a QCOW secret generated, we need to regenerate the
+ * secret
+ *
+ * Returns 0 if no secret or secret setup was successful,
+ * -1 on failures w/ error message set
+ */
+static int
+virStorageBackendFileSystemLoadDefaultSecrets(virConnectPtr conn,
+                                              virStorageVolDefPtr vol)
+{
+    virSecretPtr sec;
+    virStorageEncryptionSecretPtr encsec = NULL;
+
+    /* Only necessary for qcow format */
+    if (!vol->target.encryption ||
+        vol->target.encryption->format != VIR_STORAGE_ENCRYPTION_FORMAT_QCOW ||
+        vol->target.encryption->nsecrets != 0)
+        return 0;
+
+    if (!(sec = virSecretLookupByUsage(conn, VIR_SECRET_USAGE_TYPE_VOLUME,
+                                       vol->target.path)))
+        return 0;
+
+    if (VIR_ALLOC_N(vol->target.encryption->secrets, 1) < 0 ||
+        VIR_ALLOC(encsec) < 0) {
+        VIR_FREE(vol->target.encryption->secrets);
+        virObjectUnref(sec);
+        return -1;
+    }
+
+    vol->target.encryption->nsecrets = 1;
+    vol->target.encryption->secrets[0] = encsec;
+
+    encsec->type = VIR_STORAGE_ENCRYPTION_SECRET_TYPE_PASSPHRASE;
+    virSecretGetUUID(sec, encsec->uuid);
+    virObjectUnref(sec);
+
+    return 0;
+}
+
+
 /**
  * Update info about a volume's capacity/allocation
  */
@@ -1291,39 +1336,13 @@ virStorageBackendFileSystemVolRefresh(virConnectPtr conn,
     int ret;
 
     /* Refresh allocation / capacity / permissions info in case its changed */
-    ret = virStorageBackendUpdateVolInfo(vol, false,
-                                         VIR_STORAGE_VOL_FS_OPEN_FLAGS, 0);
-    if (ret < 0)
+    if ((ret = virStorageBackendUpdateVolInfo(vol, false,
+                                              VIR_STORAGE_VOL_FS_OPEN_FLAGS,
+                                              0)) < 0)
         return ret;
 
     /* Load any secrets if possible */
-    if (vol->target.encryption &&
-        vol->target.encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_QCOW &&
-        vol->target.encryption->nsecrets == 0) {
-        virSecretPtr sec;
-        virStorageEncryptionSecretPtr encsec = NULL;
-
-        sec = virSecretLookupByUsage(conn,
-                                     VIR_SECRET_USAGE_TYPE_VOLUME,
-                                     vol->target.path);
-        if (sec) {
-            if (VIR_ALLOC_N(vol->target.encryption->secrets, 1) < 0 ||
-                VIR_ALLOC(encsec) < 0) {
-                VIR_FREE(vol->target.encryption->secrets);
-                virObjectUnref(sec);
-                return -1;
-            }
-
-            vol->target.encryption->nsecrets = 1;
-            vol->target.encryption->secrets[0] = encsec;
-
-            encsec->type = VIR_STORAGE_ENCRYPTION_SECRET_TYPE_PASSPHRASE;
-            virSecretGetUUID(sec, encsec->uuid);
-            virObjectUnref(sec);
-        }
-    }
-
-    return 0;
+    return virStorageBackendFileSystemLoadDefaultSecrets(conn, vol);
 }
 
 static int
-- 
2.5.5




More information about the libvir-list mailing list