[libvirt] [PATCH v2 13/14] util: Add iSCSI auth/password-secret processing

John Ferlan jferlan at redhat.com
Sat Sep 16 00:30:16 UTC 2017


Generate the example for the iSCSI auth/password-secret similar to
what's done for RBD.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 src/util/virstoragefile.c | 30 ++++++++++++++++++++++++++++++
 tests/virstoragetest.c    | 15 +++++++++++++++
 2 files changed, 45 insertions(+)

diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index 39cda9c89..38aa77f44 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -2937,10 +2937,13 @@ virStorageSourceParseBackingJSONiSCSI(virStorageSourcePtr src,
     const char *transport = virJSONValueObjectGetString(json, "transport");
     const char *portal = virJSONValueObjectGetString(json, "portal");
     const char *target = virJSONValueObjectGetString(json, "target");
+    const char *user = virJSONValueObjectGetString(json, "user");
+    const char *secret = virJSONValueObjectGetString(json, "password-secret");
     const char *uri;
     char *port;
     unsigned int lun = 0;
     char *fulltarget = NULL;
+    virStorageAuthDefPtr authdef = NULL;
     int ret = -1;
 
     /* legacy URI based syntax passed via 'filename' option */
@@ -2993,10 +2996,37 @@ virStorageSourceParseBackingJSONiSCSI(virStorageSourcePtr src,
 
     VIR_STEAL_PTR(src->path, fulltarget);
 
+    if (user) {
+        if (!secret) {
+            virReportError(VIR_ERR_INVALID_ARG,
+                           _("missing 'password-secret' in iSCSI backing "
+                             "definition for user '%s'"), user);
+            goto cleanup;
+        }
+
+        /* formulate authdef for src->auth */
+        if (VIR_ALLOC(authdef) < 0)
+            goto cleanup;
+
+        if (VIR_STRDUP(authdef->username, user) < 0)
+            goto cleanup;
+
+        if (VIR_STRDUP(authdef->secrettype,
+                       virSecretUsageTypeToString(VIR_SECRET_USAGE_TYPE_ISCSI)) < 0)
+            goto cleanup;
+        src->auth = authdef;
+        authdef = NULL;
+
+        /* Cannot formulate a secretType (eg, usage or uuid) given
+         * what is provided.
+         */
+    }
+
     ret = 0;
 
  cleanup:
     VIR_FREE(fulltarget);
+    virStorageAuthDefFree(authdef);
     return ret;
 }
 
diff --git a/tests/virstoragetest.c b/tests/virstoragetest.c
index 46d12c0e6..1d3fc36c3 100644
--- a/tests/virstoragetest.c
+++ b/tests/virstoragetest.c
@@ -1577,6 +1577,21 @@ mymain(void)
                        "<source protocol='iscsi' name='iqn.2016-12.com.virttest:emulated-iscsi-noauth.target/6'>\n"
                        "  <host name='test.org' port='1234'/>\n"
                        "</source>\n");
+    TEST_BACKING_PARSE("json:{\"file\":{\"driver\":\"iscsi\","
+                                       "\"transport\":\"tcp\","
+                                       "\"portal\":\"test.org:1234\","
+                                       "\"target\":\"iqn.2016-12.com.virttest:emulated-iscsi-auth.target\","
+                                       "\"lun\":6,"
+                                       "\"user\":\"myname\","
+                                       "\"password-secret\":\"virtio-disk1-secret0\""
+                                      "}"
+                            "}",
+                       "<source protocol='iscsi' name='iqn.2016-12.com.virttest:emulated-iscsi-auth.target/6'>\n"
+                       "  <host name='test.org' port='1234'/>\n"
+                       "  <auth username='myname'>\n"
+                       "    <secret type='iscsi'/>\n"
+                       "  </auth>\n"
+                       "</source>\n");
     TEST_BACKING_PARSE("json:{\"file\":{\"driver\":\"sheepdog\","
                                        "\"vdi\":\"test\","
                                        "\"server\":{ \"type\":\"inet\","
-- 
2.13.5




More information about the libvir-list mailing list