[Libvirt-cim] [PATCH] (#4) Add read-only support

Chip Vincent cvincent at linux.vnet.ibm.com
Tue Jun 28 19:30:39 UTC 2011


According to cimtest, setting readonly = true works. I see lots of this 
on RHEL 6:

omputerSystem - 41_cs_to_settingdefinestate.py: FAIL
ERROR 	- Got CIM error Unauthorized with return code 0
ERROR 	- Failed to define the dom: CrossClass_GuestDom
InvokeMethod(DefineSystem): Unauthorized
--------------------------------------------------------------------
ComputerSystem - 42_cs_gi_errs.py: FAIL
ERROR 	- Got CIM error Unauthorized with return code 0
ERROR 	- Unable to define guest ETdomain
InvokeMethod(DefineSystem): Unauthorized
--------------------------------------------------------------------

+1. Pushed. Thanks.

On 06/28/2011 02:13 PM, Eduardo Lima (Etrunko) wrote:
> # HG changeset patch
> # User Eduardo Lima (Etrunko)<eblima at br.ibm.com>
> # Date 1308270993 14400
> # Node ID 83f0e989145d86bc84dac05ef371c536a9734673
> # Parent  a2f523cd39c29977ed07247a38316d44f5123874
> Add read-only support.
>
> This patch enables a consumer of libvirt-cim to put it in read-only
> mode by adding the key-value pair 'readonly=true' to libvirt-cim.conf.
>
> Also clean-up some extra whitespace in touched files.
>
> Changes from #1:
>    - Fix build error on RHEL 6
> Changes from #2:
>    - Small typo in libvirt-cim.conf
> Changes from #3:
>    - Removed unecessary debug messages
>
> Signed-off-by: Chip Vincent<cvincent at us.ibm.com>
> Signed-off-by: Eduardo Lima (Etrunko)<eblima at br.ibm.com>
>
> diff --git a/Makefile.am b/Makefile.am
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -172,6 +172,9 @@
>
>   pkgdata_SCRIPTS = provider-register.sh
>
> +libvirtcim_confdir = @sysconfdir@
> +dist_libvirtcim_conf_DATA = @PACKAGE at .conf
> +
>   EXTRA_DIST = schema $(MOFS) $(REGS) $(INTEROP_MOFS) $(INTEROP_REGS) \
>                $(pkgdata_SCRIPTS)	libvirt-cim.spec.in libvirt-cim.spec \
>   	     doc/CodingStyle doc/SubmittingPatches      \
> diff --git a/acinclude.m4 b/acinclude.m4
> --- a/acinclude.m4
> +++ b/acinclude.m4
> @@ -270,6 +270,15 @@
>   	LDFLAGS="$LDFLAGS $LIBUUID_LIBS"
>   	])
>
> +AC_DEFUN([CHECK_LIBCONFIG],
> +	[
> +	PKG_CHECK_MODULES([LIBCONFIG], [libconfig])
> +	AC_SUBST([LIBCONFIG_CFLAGS])
> +	AC_SUBST([LIBCONFIG_LIBS])
> +	CPPFLAGS="$CPPFLAGS $LIBCONFIG_CFLAGS"
> +	LDFLAGS="$LDFLAGS $LIBCONFIG_LIBS"
> +	])
> +
>   # A convenience macro that spits out a fail message for a particular test
>   #
>   # AC_CHECK_FAIL($LIBNAME,$PACKAGE_SUGGEST,$URL,$EXTRA)
> diff --git a/configure.ac b/configure.ac
> --- a/configure.ac
> +++ b/configure.ac
> @@ -166,6 +166,7 @@
>   CHECK_LIBXML2
>   CHECK_LIBCU
>   CHECK_LIBUUID
> +CHECK_LIBCONFIG
>
>   CFLAGS_STRICT="-Werror"
>
> diff --git a/libvirt-cim.conf b/libvirt-cim.conf
> new file mode 100644
> --- /dev/null
> +++ b/libvirt-cim.conf
> @@ -0,0 +1,13 @@
> +#
> +# libvirt-cim config file
> +#
> +# This config file is based on the libconfig format. For more information,
> +# please check http://www.hyperrealm.com/libconfig/
> +#
> +
> +# readonly (boolean)
> +#  Defines if connection to libvirt is read-only or not
> +#  Possible values: {true,false}
> +#  Default value: false
> +#
> +# readonly = false;
> diff --git a/libvirt-cim.spec.in b/libvirt-cim.spec.in
> --- a/libvirt-cim.spec.in
> +++ b/libvirt-cim.spec.in
> @@ -26,6 +26,7 @@
>
>   BuildRequires: libxml2-devel
>   BuildRequires: libcmpiutil-devel
> +BuildRequires: libconfig-devel
>   BuildConflicts: sblim-cmpi-devel
>
>   %description
> @@ -135,6 +136,7 @@
>   %{_datadir}/libvirt-cim/*.registration
>   %{_datadir}/libvirt-cim/cim_schema_*-MOFs.zip
>   %{_sysconfdir}/ld.so.conf.d/libvirt-cim.conf
> +%{_sysconfdir}/libvirt-cim.conf
>
>   %changelog
>   * Wed Oct 28 2009 Richard Maciel<rmaciel at linux.vnet.ibm.com>  - 0.1-1
> diff --git a/libxkutil/Makefile.am b/libxkutil/Makefile.am
> --- a/libxkutil/Makefile.am
> +++ b/libxkutil/Makefile.am
> @@ -1,7 +1,8 @@
>   # Copyright IBM Corp. 2007
>   SUBDIRS = tests
>
> -CFLAGS += $(CFLAGS_STRICT)
> +AM_CFLAGS = $(CFLAGS_STRICT) \
> +            -DLIBVIRTCIM_CONF=\"@sysconfdir@/@PACKAGE at .conf\"
>
>   noinst_HEADERS = cs_util.h misc_util.h device_parsing.h xmlgen.h infostore.h \
>                    pool_parsing.h acl_parsing.h
> diff --git a/libxkutil/misc_util.c b/libxkutil/misc_util.c
> --- a/libxkutil/misc_util.c
> +++ b/libxkutil/misc_util.c
> @@ -35,11 +35,12 @@
>
>   #include<libcmpiutil/libcmpiutil.h>
>   #include<libcmpiutil/std_association.h>
> +#include<libconfig.h>
>
>   #include "misc_util.h"
>   #include "cs_util.h"
>
> -#include<config.h>
> +#include "config.h"
>
>   #define URI_ENV "HYPURI"
>
> @@ -55,6 +56,37 @@
>                   return NULL;
>   }
>
> +static int is_read_only(void)
> +{
> +        config_t conf;
> +        int ret, readonly = 0;
> +        const char *readonly_str = "readonly";
> +
> +        config_init(&conf);
> +
> +        ret = config_read_file(&conf, LIBVIRTCIM_CONF);
> +        if (ret == CONFIG_FALSE) {
> +                CU_DEBUG("Error reading config file at line %d: '%s'\n",
> +                         conf.error_line, conf.error_text);
> +                goto out;
> +        }
> +
> +        ret = config_lookup_bool(&conf, readonly_str,&readonly);
> +        if (ret == CONFIG_FALSE) {
> +                CU_DEBUG("Error: '%s' not found in config file\n",
> +                         readonly_str);
> +                goto out;
> +        }
> +
> +        CU_DEBUG("'%s' value in '%s' config file: %d\n", readonly_str,
> +                 LIBVIRTCIM_CONF, readonly);
> +out:
> +        config_destroy(&conf);
> +
> +        /* Default value is 0 (false) */
> +        return readonly;
> +}
> +
>   virConnectPtr connect_by_classname(const CMPIBroker *broker,
>                                      const char *classname,
>                                      CMPIStatus *s)
> @@ -66,7 +98,7 @@
>
>           uri = cn_to_uri(classname);
>           if (!uri) {
> -                cu_statusf(broker, s,
> +                cu_statusf(broker, s,
>                              CMPI_RC_ERR_FAILED,
>                              "Unable to generate URI from classname");
>                   return NULL;
> @@ -74,7 +106,11 @@
>
>           CU_DEBUG("Connecting to libvirt with uri `%s'", uri);
>
> -        conn = virConnectOpen(uri);
> +        if (is_read_only())
> +                conn = virConnectOpenReadOnly(uri);
> +        else
> +                conn = virConnectOpen(uri);
> +
>           if (!conn) {
>                   CU_DEBUG("Unable to connect to `%s'", uri);
>                   return NULL;
> @@ -258,7 +294,7 @@
>           inst = CMNewInstance(broker, op,&s);
>           if ((s.rc != CMPI_RC_OK) || CMIsNullObject(inst))
>                   goto out;
> -
> +
>           CMSetProperty(inst, "CreationClassName",
>                         (CMPIValue *)new_cn, CMPI_chars);
>
> @@ -310,7 +346,7 @@
>           if (STREQC(pfx, "CIM")) {
>                   cu_statusf(broker, status,
>                              CMPI_RC_ERR_FAILED,
> -                           "Please exactly specify the class (check CIMOM behavior!): %s",
> +                           "Please exactly specify the class (check CIMOM behavior!): %s",
>                              CLASSNAME(reference));
>                   rc = false;
>           }
> @@ -347,7 +383,7 @@
>
>                   free(pfx);
>           }
> -
> +
>           free(ref_pfx);
>           return rc;
>   }
> @@ -367,13 +403,13 @@
>                                         CLASSNAME(source_ref),
>                                         assoc_classname,
>                                         NAMESPACE(source_ref));
> -
> +
>           if (ref_inst != NULL) {
>                   CMPIObjectPath *target_ref;
> -
> +
>                   target_ref = CMGetObjectPath(target_inst, NULL);
>
> -                set_reference(assoc, ref_inst,
> +                set_reference(assoc, ref_inst,
>                                 source_ref, target_ref);
>           }
>
>
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim

-- 
Chip Vincent
Open Virtualization
IBM Linux Technology Center
cvincent at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list