[Libvirt-cim] [PATCH 1 of 2] Add reference validation to get_vsm_cap()

Kaitlin Rupert kaitlin at linux.vnet.ibm.com
Fri Feb 15 19:44:07 UTC 2008


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




More information about the Libvirt-cim mailing list