]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Convert Xen domain core dump driver methods to use virDomainDefPtr
authorDaniel P. Berrange <berrange@redhat.com>
Thu, 2 May 2013 10:26:40 +0000 (11:26 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Tue, 21 May 2013 15:11:39 +0000 (16:11 +0100)
Introduce use of a virDomainDefPtr in the domain coredump
APIs to simplify introduction of ACL security checks.
The virDomainPtr cannot be safely used, since the app
may have supplied mis-matching name/uuid/id fields. eg
the name points to domain X, while the uuid points to
domain Y. Resolving the virDomainPtr to a virDomainDefPtr
ensures a consistent name/uuid/id set.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
src/xen/xen_driver.c
src/xen/xend_internal.c
src/xen/xend_internal.h

index 3a5db55e914d3045d5dbbc52c7c14259554d55cc..2fda634f2196a4fba66cce0560938291f45aaad2 100644 (file)
@@ -1191,7 +1191,19 @@ xenUnifiedDomainRestore(virConnectPtr conn, const char *from)
 static int
 xenUnifiedDomainCoreDump(virDomainPtr dom, const char *to, unsigned int flags)
 {
-    return xenDaemonDomainCoreDump(dom, to, flags);
+    virDomainDefPtr def = NULL;
+    int ret = -1;
+
+    virCheckFlags(0, -1);
+
+    if (!(def = xenGetDomainDefForDom(dom)))
+        goto cleanup;
+
+    ret = xenDaemonDomainCoreDump(dom->conn, def, to, flags);
+
+cleanup:
+    virDomainDefFree(def);
+    return ret;
 }
 
 static int
index bd5a43417d5a9faa28b2b760d949b70c768d8c85..2b1ba61fcf248fd4c3d6a2eed0ee26b830651dcd 100644 (file)
@@ -1446,7 +1446,8 @@ xenDaemonDomainSave(virConnectPtr conn,
 
 /**
  * xenDaemonDomainCoreDump:
- * @domain: pointer to the Domain block
+ * @conn: the connection object
+ * @def: domain configuration
  * @filename: path for the output file
  * @flags: extra flags, currently unused
  *
@@ -1457,19 +1458,20 @@ xenDaemonDomainSave(virConnectPtr conn,
  * Returns 0 in case of success, -1 in case of error.
  */
 int
-xenDaemonDomainCoreDump(virDomainPtr domain,
+xenDaemonDomainCoreDump(virConnectPtr conn,
+                        virDomainDefPtr def,
                         const char *filename,
                         unsigned int flags)
 {
     virCheckFlags(VIR_DUMP_LIVE | VIR_DUMP_CRASH, -1);
 
-    if (domain->id < 0) {
+    if (def->id < 0) {
         virReportError(VIR_ERR_OPERATION_INVALID,
-                       _("Domain %s isn't running."), domain->name);
+                       _("Domain %s isn't running."), def->name);
         return -1;
     }
 
-    return xend_op(domain->conn, domain->name,
+    return xend_op(conn, def->name,
                    "op", "dump", "file", filename,
                    "live", (flags & VIR_DUMP_LIVE ? "1" : "0"),
                    "crash", (flags & VIR_DUMP_CRASH ? "1" : "0"),
index cb9898bf7a6c9c9c572d9a2441c8af1e6ff15e43..814330d951f17fd1996451b241ca69e560cd76b2 100644 (file)
@@ -102,7 +102,9 @@ int xenDaemonDomainDestroy(virConnectPtr conn, virDomainDefPtr def);
 int xenDaemonDomainSave(virConnectPtr conn,
                         virDomainDefPtr def,
                         const char *filename);
-int xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename,
+int xenDaemonDomainCoreDump(virConnectPtr conn,
+                            virDomainDefPtr def,
+                            const char *filename,
                             unsigned int flags);
 int xenDaemonDomainRestore(virConnectPtr conn, const char *filename);
 int xenDaemonDomainSetMemory(virConnectPtr conn,