
# HG changeset patch # User Kaitlin Rupert <karupert@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@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);