[Libvirt-cim] [PATCH 1 of 4] RAFP: validation of client given object path is missing

Heidi Eckhart heidieck at linux.vnet.ibm.com
Wed Jan 9 11:09:13 UTC 2008


# HG changeset patch
# User Heidi Eckhart <heidieck at linux.vnet.ibm.com>
# Date 1199880495 -3600
# Node ID ae476a5a5ab9891f4fbd3591e4175173f6b55c8b
# Parent  a6edc1c843ecbc619dbd40da2f4cedc58e45ba27
RAFP: validation of client given object path is missing

The validation of the client's given object path for a
ResourceAllocationSettingData instance is missing. The
provider accepts InstanceIDs that do not exist, instead
of returning NOT_FOUND.

Example:
wbemcli ain -ac KVM_ResourceAllocationFromPool http://localhost/root/virt:KVM_ProcResourceAllocationSettingData.InstanceID="NetworkPool/me"
returns
localhost:5988/root/virt:KVM_ProcessorPool.InstanceID="ProcessorPool/0"

Also removed unused inst_list _list.

Signed-off-by: Heidi Eckhart <heidieck at linux.vnet.ibm.com>

diff -r a6edc1c843ec -r ae476a5a5ab9 src/Virt_ResourceAllocationFromPool.c
--- a/src/Virt_ResourceAllocationFromPool.c	Tue Jan 08 13:23:53 2008 -0800
+++ b/src/Virt_ResourceAllocationFromPool.c	Wed Jan 09 13:08:15 2008 +0100
@@ -37,6 +37,28 @@
 
 const static CMPIBroker *_BROKER;
 
+static CMPIStatus validate_rasd_ref(const CMPIContext *context,
+                                    const CMPIObjectPath *ref,
+                                    uint16_t type,
+                                    const char *id)
+{
+        CMPIStatus s = {CMPI_RC_OK, NULL};
+        CMPIInstance *rasd = NULL;
+
+        rasd = get_rasd_instance(context,
+                                 ref, 
+                                 _BROKER, 
+                                 id, 
+                                 type);
+
+        if (CMIsNullObject(rasd))
+                cu_statusf(_BROKER, &s,
+                           CMPI_RC_ERR_NOT_FOUND,
+                           "No such instance (%s)", id);
+
+        return s;
+}
+
 static CMPIStatus rasd_to_pool(const CMPIObjectPath *ref,
                                struct std_assoc_info *info,
                                struct inst_list *list)
@@ -46,14 +68,11 @@ static CMPIStatus rasd_to_pool(const CMP
         const char *id = NULL;
         char *poolid = NULL;
         virConnectPtr conn = NULL;
-        struct inst_list _list;
         CMPIInstance *pool = NULL;
 
         if (!match_hypervisor_prefix(ref, info))
                 return s;
 
-        inst_list_init(&_list);
-
         if (rasd_type_from_classname(CLASSNAME(ref), &type) != CMPI_RC_OK) {
                 cu_statusf(_BROKER, &s,
                            CMPI_RC_ERR_FAILED,
@@ -67,6 +86,13 @@ static CMPIStatus rasd_to_pool(const CMP
                            "Missing InstanceID");
                 goto out;
         }
+
+        s = validate_rasd_ref(info->context,
+                              ref,
+                              type,
+                              id);
+        if (s.rc != CMPI_RC_OK)
+                goto out;
 
         poolid = pool_member_of(_BROKER, CLASSNAME(ref), type, id);
         if (poolid == NULL) {
@@ -96,7 +122,6 @@ static CMPIStatus rasd_to_pool(const CMP
  out:
         free(poolid);
         virConnectClose(conn);
-        inst_list_free(&_list);
 
         return s;
 }




More information about the Libvirt-cim mailing list