During qemuTranslateDiskSourcePool() execution, if the srcpool has been
defined with authentication information, then for iSCSI pools copy the
authentication and host information to virDomainDiskDef.
---
 src/qemu/qemu_conf.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)

diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 6e6163f..3e7b78a 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -1186,6 +1186,58 @@ cleanup:
     return ret;
 }
 
+static int
+qemuTranslateDiskSourcePoolAuth(virDomainDiskDefPtr def,
+                                virStoragePoolDefPtr pooldef)
+{
+    int ret = -1;
+
+    /* Only necessary when authentication set */
+    if (pooldef->source.authType == VIR_STORAGE_POOL_AUTH_NONE) {
+        ret = 0;
+        goto cleanup;
+    }
+
+    /* Copy the authentication information from the storage pool
+     * into the virDomainDiskDef
+     */
+    if (pooldef->source.authType == VIR_STORAGE_POOL_AUTH_CHAP) {
+        if (VIR_STRDUP(def->auth.username,
+                       pooldef->source.auth.chap.username) < 0)
+            goto cleanup;
+        if (pooldef->source.auth.chap.secret.uuidUsable) {
+            def->auth.secretType = VIR_DOMAIN_DISK_SECRET_TYPE_UUID;
+            memcpy(def->auth.secret.uuid,
+                   pooldef->source.auth.chap.secret.uuid,
+                   VIR_UUID_BUFLEN);
+        } else {
+            if (VIR_STRDUP(def->auth.secret.usage,
+                           pooldef->source.auth.chap.secret.usage) < 0)
+                goto cleanup;
+            def->auth.secretType = VIR_DOMAIN_DISK_SECRET_TYPE_USAGE;
+        }
+    } else if (pooldef->source.authType == VIR_STORAGE_POOL_AUTH_CEPHX) {
+        if (VIR_STRDUP(def->auth.username,
+                       pooldef->source.auth.cephx.username) < 0)
+            goto cleanup;
+        if (pooldef->source.auth.cephx.secret.uuidUsable) {
+            def->auth.secretType = VIR_DOMAIN_DISK_SECRET_TYPE_UUID;
+            memcpy(def->auth.secret.uuid,
+                   pooldef->source.auth.cephx.secret.uuid,
+                   VIR_UUID_BUFLEN);
+        } else {
+            if (VIR_STRDUP(def->auth.secret.usage,
+                           pooldef->source.auth.cephx.secret.usage) < 0)
+                goto cleanup;
+            def->auth.secretType = VIR_DOMAIN_DISK_SECRET_TYPE_USAGE;
+        }
+    }
+    ret = 0;
+
+cleanup:
+    return ret;
+}
+
 int
 qemuTranslateDiskSourcePool(virConnectPtr conn,
                             virDomainDiskDefPtr def)
@@ -1254,6 +1306,9 @@ qemuTranslateDiskSourcePool(virConnectPtr conn,
                 if (!(def->src = virStorageVolGetPath(vol)))
                     goto cleanup;
             }
+
+            if (qemuTranslateDiskSourcePoolAuth(def, pooldef) < 0)
+                goto cleanup;
         } else {
             if (!(def->src = virStorageVolGetPath(vol)))
                 goto cleanup;
-- 
1.8.1.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Reply via email to