[Libvirt-cim] [PATCH] Be sure to check to see if the UUID is in use in both the DefineSystem()

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Fri Aug 21 00:16:43 UTC 2009


# HG changeset patch
# User Kaitlin Rupert <karupert at us.ibm.com>
# Date 1250813784 25200
# Node ID 0243aa0574431112f0946354d4bbad62bb2c2f7b
# Parent  7efea1d379a1b4de6c4d7583b456a0a00f80ad3b
Be sure to check to see if the UUID is in use in both the DefineSystem()...

and ModifySystemSettings() calls.

Signed-off-by: Kaitlin Rupert <karupert at us.ibm.com>

diff -r 7efea1d379a1 -r 0243aa057443 src/Virt_VirtualSystemManagementService.c
--- a/src/Virt_VirtualSystemManagementService.c	Wed Aug 19 22:47:17 2009 -0700
+++ b/src/Virt_VirtualSystemManagementService.c	Thu Aug 20 17:16:24 2009 -0700
@@ -71,6 +71,37 @@
         RESOURCE_MOD,
 };
 
+static CMPIStatus check_uuid_in_use(const CMPIObjectPath *ref,
+                                    struct domain *domain)
+{
+        CMPIStatus s = {CMPI_RC_OK, NULL};
+        virConnectPtr conn = NULL;
+        virDomainPtr dom = NULL;
+
+        conn = connect_by_classname(_BROKER, CLASSNAME(ref), &s);
+        if (conn == NULL) {
+                cu_statusf(_BROKER, &s,
+                           CMPI_RC_ERR_FAILED,
+                           "Error connecting to libvirt");
+                goto out;
+        }
+
+        dom = virDomainLookupByUUIDString(conn, domain->uuid);
+        if (dom != NULL) {
+                cu_statusf(_BROKER, &s,
+                           CMPI_RC_ERR_FAILED,
+                           "Guest '%s' is already defined with UUID %s",
+                           virDomainGetName(dom),
+                           domain->uuid);
+        }
+
+ out:
+        virDomainFree(dom);
+        virConnectClose(conn);
+
+        return s;
+}
+
 static CMPIStatus define_system_parse_args(const CMPIArgs *argsin,
                                            CMPIInstance **sys,
                                            const char *ns,
@@ -1402,26 +1433,10 @@
                 goto out;
         }
 
-        if (domain->uuid != NULL) {
-                conn = connect_by_classname(_BROKER, CLASSNAME(ref), s);
-                if (conn == NULL) {
-                        cu_statusf(_BROKER, s,
-                                   CMPI_RC_ERR_FAILED,
-                                   "Error connecting to libvirt");
-                        goto out;
-                }
-
-                dom = virDomainLookupByUUIDString(conn, domain->uuid);
-                if (dom != NULL) {
-                        cu_statusf(_BROKER, s,
-                                   CMPI_RC_ERR_FAILED,
-                                   "Guest '%s' is already defined with UUID %s",
-                                   virDomainGetName(dom),
-                                   domain->uuid);
-                        goto out;
-                }
-        }
-
+        *s = check_uuid_in_use(ref, domain);
+        if (s->rc != CMPI_RC_OK)
+                goto out;
+ 
         msg = classify_resources(resources, NAMESPACE(ref), domain);
         if (msg != NULL) {
                 CU_DEBUG("Failed to classify resources: %s", msg);
@@ -1644,6 +1659,10 @@
                 goto out;
         }
 
+        s = check_uuid_in_use(ref, dominfo);
+        if (s.rc != CMPI_RC_OK)
+                goto out;
+
         xml = system_to_xml(dominfo);
         if (xml != NULL) {
                 CU_DEBUG("New XML is:\n%s", xml);




More information about the Libvirt-cim mailing list