[Libvirt-cim] [PATCH] [RFC] Check for matching hypervisor prefixes

Heidi Eckhart heidieck at linux.vnet.ibm.com
Tue Nov 27 11:48:00 UTC 2007


# HG changeset patch
# User Heidi Eckhart <heidieck at linux.vnet.ibm.com>
# Date 1196167642 -3600
# Node ID 901bcb9e9fb3272956e55b01d2b1eb05f7e35a9c
# Parent  6200efdd04aafa69f2f76b1cbc0c3567406e829f
[RFC] Check for matching hypervisor prefixes

The class prefixes need to be checked for compliance, as a
request for KVM_RegisteredProfile with Xen_ECTP as assoc
does not return any instances.
Signed-off-by: Heidi Eckhart <heidieck at linux.vnet.ibm.com>

diff -r 6200efdd04aa -r 901bcb9e9fb3 libxkutil/misc_util.c
--- a/libxkutil/misc_util.c	Tue Nov 27 11:12:59 2007 +0100
+++ b/libxkutil/misc_util.c	Tue Nov 27 13:47:22 2007 +0100
@@ -33,6 +33,7 @@
 #include "cmpimacs.h"
 
 #include "libcmpiutil.h"
+#include "std_association.h"
 
 #include "misc_util.h"
 #include "cs_util.h"
@@ -304,6 +305,43 @@ bool provider_is_responsible(const CMPIB
         free(pfx);
         return rc;
 }
+
+bool assoc_match_prefix(const CMPIObjectPath *reference,
+                        struct std_assoc_info *info)
+{
+        char *ref_pfx = NULL;
+        char *pfx = NULL;
+        bool rc = true;
+
+        ref_pfx = class_prefix_name(CLASSNAME(reference));
+
+        if (info->assoc_class) {
+                pfx = class_prefix_name(info->assoc_class);
+
+                if (!STREQC(ref_pfx, pfx)) {
+                        if (!STREQC("CIM", pfx))
+                                rc = false;
+                }
+
+                free(pfx);
+        }
+
+        if (info->result_class) {
+                pfx = class_prefix_name(info->result_class);
+
+                if (!STREQC(ref_pfx, pfx)) {
+                        if (!STREQC("CIM", pfx))
+                                rc = false;
+                }
+
+                free(pfx);
+        }
+        
+        free(ref_pfx);
+        return rc;
+}
+
+
 
 bool domain_online(virDomainPtr dom)
 {
diff -r 6200efdd04aa -r 901bcb9e9fb3 libxkutil/misc_util.h
--- a/libxkutil/misc_util.h	Tue Nov 27 11:12:59 2007 +0100
+++ b/libxkutil/misc_util.h	Tue Nov 27 13:47:22 2007 +0100
@@ -32,6 +32,7 @@
 #include "cmpimacs.h"
 
 #include <libcmpiutil.h>
+#include <std_association.h>
 
 /* Check if the provider is reponsible for the given class:
  * e.g. Xen is running on the system and KVM_... is asked for,
@@ -105,6 +106,9 @@ bool libvirt_cim_init(void);
 
 #endif
 
+bool assoc_match_prefix(const CMPIObjectPath *reference,
+                        struct std_assoc_info *info);
+
 /*
  * Local Variables:
  * mode: C
diff -r 6200efdd04aa -r 901bcb9e9fb3 src/Virt_ElementConformsToProfile.c
--- a/src/Virt_ElementConformsToProfile.c	Tue Nov 27 11:12:59 2007 +0100
+++ b/src/Virt_ElementConformsToProfile.c	Tue Nov 27 13:47:22 2007 +0100
@@ -107,6 +107,9 @@ static CMPIStatus prof_to_elem(const CMP
         char *id;
         int i;
         
+        if (!assoc_match_prefix(ref, info))
+                goto out;
+
         conn = connect_by_classname(_BROKER, CLASSNAME(ref), &s);
         if (conn == NULL)
                 return s;
@@ -147,6 +150,9 @@ static CMPIStatus elem_to_prof(const CMP
         char *classname;
         struct reg_prof *candidate;
         int i;
+        
+        if (!assoc_match_prefix(ref, info))
+                goto out;
 
         conn = connect_by_classname(_BROKER, CLASSNAME(ref), &s);
         if (conn == NULL)




More information about the Libvirt-cim mailing list