]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: Move and rename virStorageAuthDefParseSecret
authorJohn Ferlan <jferlan@redhat.com>
Mon, 13 Jun 2016 20:23:42 +0000 (16:23 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Thu, 23 Jun 2016 16:30:28 +0000 (12:30 -0400)
Move to virsecret.c and rename to virSecretLookupParseSecret. Also convert
to usage xmlNodePtr and virXMLPropString rather than virXPathString.

Signed-off-by: John Ferlan <jferlan@redhat.com>
po/POTFILES.in
src/libvirt_private.syms
src/util/virsecret.c
src/util/virsecret.h
src/util/virstoragefile.c

index 822cfbc10042f1c72c78f28d8d4fbb0b631b631f..67838f52108318bf84b4fbd5d60dc5457cb4936b 100644 (file)
@@ -233,6 +233,7 @@ src/util/virqemu.c
 src/util/virrandom.c
 src/util/virrotatingfile.c
 src/util/virscsi.c
+src/util/virsecret.c
 src/util/virsexpr.c
 src/util/virsocketaddr.c
 src/util/virstats.c
index 21223a80d6b684275a391a86ae1f5a94c95ef3fa..528b2047a0d255b514c241ed25413704836fe66e 100644 (file)
@@ -2221,6 +2221,7 @@ virSecurityLabelDefNew;
 # util/virsecret.h
 virSecretLookupDefClear;
 virSecretLookupDefCopy;
+virSecretLookupParseSecret;
 
 
 # util/virsexpr.h
index 45ad996f54fe17483f18886741bcec436827caf6..7fdb0ae2daa68463bfa942f42d9c7dcd085d7b6b 100644 (file)
@@ -26,6 +26,7 @@
 #include "virlog.h"
 #include "virsecret.h"
 #include "virstring.h"
+#include "viruuid.h"
 
 #define VIR_FROM_THIS VIR_FROM_NONE
 
@@ -55,3 +56,46 @@ virSecretLookupDefCopy(virSecretLookupTypeDefPtr dst,
     }
     return 0;
 }
+
+
+int
+virSecretLookupParseSecret(xmlNodePtr secretnode,
+                           virSecretLookupTypeDefPtr def)
+{
+    char *uuid;
+    char *usage;
+    int ret = -1;
+
+    uuid = virXMLPropString(secretnode, "uuid");
+    usage = virXMLPropString(secretnode, "usage");
+    if (uuid == NULL && usage == NULL) {
+        virReportError(VIR_ERR_XML_ERROR, "%s",
+                       _("missing secret uuid or usage attribute"));
+        goto cleanup;
+    }
+
+    if (uuid && usage) {
+        virReportError(VIR_ERR_XML_ERROR, "%s",
+                       _("either secret uuid or usage expected"));
+        goto cleanup;
+    }
+
+    if (uuid) {
+        if (virUUIDParse(uuid, def->u.uuid) < 0) {
+            virReportError(VIR_ERR_XML_ERROR,
+                           _("invalid secret uuid '%s'"), uuid);
+            goto cleanup;
+        }
+        def->type = VIR_SECRET_LOOKUP_TYPE_UUID;
+    } else {
+        def->u.usage = usage;
+        usage = NULL;
+        def->type = VIR_SECRET_LOOKUP_TYPE_USAGE;
+    }
+    ret = 0;
+
+ cleanup:
+    VIR_FREE(uuid);
+    VIR_FREE(usage);
+    return ret;
+}
index fb3adb3aabdb5ad2dcc756a2b90de7d95216881c..eee863f92211d2a80641dccae6a87b1a7424377f 100644 (file)
@@ -24,6 +24,8 @@
 
 # include "internal.h"
 
+# include "virxml.h"
+
 typedef enum {
     VIR_SECRET_LOOKUP_TYPE_NONE,
     VIR_SECRET_LOOKUP_TYPE_UUID,
@@ -46,5 +48,6 @@ struct _virSecretLookupTypeDef {
 void virSecretLookupDefClear(virSecretLookupTypeDefPtr def);
 int virSecretLookupDefCopy(virSecretLookupTypeDefPtr dst,
                            const virSecretLookupTypeDef *src);
-
+int virSecretLookupParseSecret(xmlNodePtr secretnode,
+                               virSecretLookupTypeDefPtr def);
 #endif /* __VIR_SECRET_H__ */
index 27b54a257ef8681cb6300c8956d28dfa08b7324c..0863c4fe99cda75f58faf9ea07a34bcde5c0fb3a 100644 (file)
@@ -1537,62 +1537,11 @@ virStorageAuthDefCopy(const virStorageAuthDef *src)
 }
 
 
-static int
-virStorageAuthDefParseSecret(xmlXPathContextPtr ctxt,
-                             virStorageAuthDefPtr authdef)
-{
-    char *uuid;
-    char *usage;
-    int ret = -1;
-
-    /* Used by the domain disk xml parsing in order to ensure the
-     * <secret type='%s' value matches the expected secret type for
-     * the style of disk (iscsi is chap, nbd is ceph). For some reason
-     * the virSecretUsageType{From|To}String() cannot be linked here
-     * and because only the domain parsing code cares - just keep
-     * it as a string.
-     */
-    authdef->secrettype = virXPathString("string(./secret/@type)", ctxt);
-
-    uuid = virXPathString("string(./secret/@uuid)", ctxt);
-    usage = virXPathString("string(./secret/@usage)", ctxt);
-    if (uuid == NULL && usage == NULL) {
-        virReportError(VIR_ERR_XML_ERROR, "%s",
-                       _("missing auth secret uuid or usage attribute"));
-        goto cleanup;
-    }
-
-    if (uuid && usage) {
-        virReportError(VIR_ERR_XML_ERROR, "%s",
-                       _("either auth secret uuid or usage expected"));
-        goto cleanup;
-    }
-
-    if (uuid) {
-        if (virUUIDParse(uuid, authdef->seclookupdef.u.uuid) < 0) {
-            virReportError(VIR_ERR_XML_ERROR, "%s",
-                            _("invalid auth secret uuid"));
-            goto cleanup;
-        }
-        authdef->seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_UUID;
-    } else {
-        authdef->seclookupdef.u.usage = usage;
-        usage = NULL;
-        authdef->seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_USAGE;
-    }
-    ret = 0;
-
- cleanup:
-    VIR_FREE(uuid);
-    VIR_FREE(usage);
-    return ret;
-}
-
-
 static virStorageAuthDefPtr
 virStorageAuthDefParseXML(xmlXPathContextPtr ctxt)
 {
     virStorageAuthDefPtr authdef = NULL;
+    xmlNodePtr secretnode = NULL;
     char *username = NULL;
     char *authtype = NULL;
 
@@ -1621,8 +1570,22 @@ virStorageAuthDefParseXML(xmlXPathContextPtr ctxt)
         VIR_FREE(authtype);
     }
 
-    authdef->seclookupdef.type = VIR_SECRET_LOOKUP_TYPE_NONE;
-    if (virStorageAuthDefParseSecret(ctxt, authdef) < 0)
+    if (!(secretnode = virXPathNode("./secret ", ctxt))) {
+        virReportError(VIR_ERR_XML_ERROR, "%s",
+                       _("Missing <secret> element in auth"));
+        goto error;
+    }
+
+    /* Used by the domain disk xml parsing in order to ensure the
+     * <secret type='%s' value matches the expected secret type for
+     * the style of disk (iscsi is chap, nbd is ceph). For some reason
+     * the virSecretUsageType{From|To}String() cannot be linked here
+     * and because only the domain parsing code cares - just keep
+     * it as a string.
+     */
+    authdef->secrettype = virXMLPropString(secretnode, "type");
+
+    if (virSecretLookupParseSecret(secretnode, &authdef->seclookupdef) < 0)
         goto error;
 
     return authdef;