[PATCH 0 of 2] Add reference validation to get_vsm_cap().

Have get_vsm_cap() validate references. Also update providers that call get_vsm_cap().

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1203104501 28800 # Node ID 485d129ffabd639f7d28f29584065550dba4a267 # Parent 6792d7ab0cc36e99d95b6b8afd50fec887334007 Add reference validation to get_vsm_cap(). Adds reference validation to VirtualSystemManagementCapabilities. Also change names_only of return_vsm_cap() from an int to a bool. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 6792d7ab0cc3 -r 485d129ffabd src/Virt_VirtualSystemManagementCapabilities.c --- a/src/Virt_VirtualSystemManagementCapabilities.c Fri Feb 15 09:57:43 2008 -0800 +++ b/src/Virt_VirtualSystemManagementCapabilities.c Fri Feb 15 11:41:41 2008 -0800 @@ -83,11 +83,22 @@ static CMPIStatus set_inst_properties(co CMPIStatus get_vsm_cap(const CMPIBroker *broker, const CMPIObjectPath *ref, - CMPIInstance **inst) + CMPIInstance **inst, + bool is_get_inst) { CMPIStatus s; CMPIObjectPath *op; + virConnectPtr conn = NULL; char *classname = NULL; + + conn = connect_by_classname(broker, CLASSNAME(ref), &s); + if (conn == NULL) { + if (is_get_inst) + cu_statusf(broker, &s, + CMPI_RC_ERR_NOT_FOUND, + "No such instance"); + goto out; + } classname = get_typed_class(CLASSNAME(ref), "VirtualSystemManagementCapabilities"); @@ -116,26 +127,29 @@ CMPIStatus get_vsm_cap(const CMPIBroker s = set_inst_properties(broker, *inst, classname); + if (is_get_inst) { + s = cu_validate_ref(broker, ref, *inst); + if (s.rc != CMPI_RC_OK) + goto out; + } + out: free(classname); + virConnectClose(conn); return s; } static CMPIStatus return_vsm_cap(const CMPIObjectPath *ref, const CMPIResult *results, - int names_only) + bool names_only, + bool is_get_inst) { CMPIStatus s = {CMPI_RC_OK, NULL}; CMPIInstance *inst = NULL; - virConnectPtr conn = NULL; - - conn = connect_by_classname(_BROKER, CLASSNAME(ref), &s); - if (conn == NULL) - goto out; - - s = get_vsm_cap(_BROKER, ref, &inst); - if (s.rc != CMPI_RC_OK) + + s = get_vsm_cap(_BROKER, ref, &inst, is_get_inst); + if ((s.rc != CMPI_RC_OK) || (inst == NULL)) goto out; if (names_only) @@ -143,8 +157,6 @@ static CMPIStatus return_vsm_cap(const C else CMReturnInstance(results, inst); out: - virConnectClose(conn); - return s; } @@ -153,7 +165,7 @@ static CMPIStatus EnumInstanceNames(CMPI const CMPIResult *results, const CMPIObjectPath *reference) { - return return_vsm_cap(reference, results, 1); + return return_vsm_cap(reference, results, true, false); } static CMPIStatus EnumInstances(CMPIInstanceMI *self, @@ -163,7 +175,7 @@ static CMPIStatus EnumInstances(CMPIInst const char **properties) { - return return_vsm_cap(reference, results, 0); + return return_vsm_cap(reference, results, true, false); } static CMPIStatus GetInstance(CMPIInstanceMI *self, @@ -172,24 +184,7 @@ static CMPIStatus GetInstance(CMPIInstan const CMPIObjectPath *reference, const char **properties) { - CMPIInstance *inst; - CMPIStatus s; - const char *prop; - - s = get_vsm_cap(_BROKER, reference, &inst); - if (s.rc != CMPI_RC_OK) - return s; - - prop = cu_compare_ref(reference, inst); - if (prop != NULL) { - cu_statusf(_BROKER, &s, - CMPI_RC_ERR_NOT_FOUND, - "No such instance (%s)", prop); - } else { - CMReturnInstance(results, inst); - } - - return s; + return return_vsm_cap(reference, results, false, true); } DEFAULT_CI(); diff -r 6792d7ab0cc3 -r 485d129ffabd src/Virt_VirtualSystemManagementCapabilities.h --- a/src/Virt_VirtualSystemManagementCapabilities.h Fri Feb 15 09:57:43 2008 -0800 +++ b/src/Virt_VirtualSystemManagementCapabilities.h Fri Feb 15 11:41:41 2008 -0800 @@ -20,7 +20,8 @@ */ CMPIStatus get_vsm_cap(const CMPIBroker *broker, const CMPIObjectPath *ref, - CMPIInstance **inst); + CMPIInstance **inst, + bool is_get_inst); /* * Local Variables: * mode: C

# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1203104631 28800 # Node ID fa322bc4b62e52fd6afafa93bc933860c714f2af # Parent 485d129ffabd639f7d28f29584065550dba4a267 Update calls to get_vsm_cap() to use new param. This param indicates whether the reference should be validated, or if an instance (without ref validation) should be returned. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 485d129ffabd -r fa322bc4b62e src/Virt_ElementCapabilities.c --- a/src/Virt_ElementCapabilities.c Fri Feb 15 11:41:41 2008 -0800 +++ b/src/Virt_ElementCapabilities.c Fri Feb 15 11:43:51 2008 -0800 @@ -60,7 +60,7 @@ static CMPIStatus validate_caps_get_serv classname = class_base_name(CLASSNAME(ref)); if (STREQC(classname, "VirtualSystemManagementCapabilities")) { - s = get_vsm_cap(_BROKER, ref, &_inst); + s = get_vsm_cap(_BROKER, ref, &_inst, true); if ((s.rc != CMPI_RC_OK) || (_inst == NULL)) goto out; @@ -97,7 +97,7 @@ static CMPIStatus validate_service_get_c if ((s.rc != CMPI_RC_OK) || (_inst == NULL)) goto out; - s = get_vsm_cap(_BROKER, ref, &_inst); + s = get_vsm_cap(_BROKER, ref, &_inst, false); } else if (STREQC(classname, "VirtualSystemMigrationService")) { s = get_migration_service(ref, &_inst, _BROKER); if ((s.rc != CMPI_RC_OK) || (_inst == NULL)) @@ -131,7 +131,7 @@ static CMPIStatus sys_to_cap(const CMPIO if (s.rc != CMPI_RC_OK) goto out; - s = get_vsm_cap(_BROKER, ref, &inst); + s = get_vsm_cap(_BROKER, ref, &inst, false); if (s.rc == CMPI_RC_OK) inst_list_add(list, inst);
participants (1)
-
Kaitlin Rupert