commit fe3619eaaa1ff136e0025620e26145f5d8e77e3d
Author: Michael Calmer
Date: Fri Jan 23 14:34:37 2009 +0100
add get_this_computersystem()
this function searches for an object which represent the computer system
where the provider runs.
---
CMakeLists.txt | 8 ++++++
cmake/modules/FindCmpiutil.cmake | 27 +++++++++++++++++++++
src/CMakeLists.txt | 1 +
src/SUSE_Common.cc | 47 ++++++++++++++++++++++++++++++++++++++
src/SUSE_Common.h | 4 +++
5 files changed, 87 insertions(+), 0 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 365162e..e7ab842 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -70,6 +70,14 @@ ELSE (SBLIMCMPI_FOUND)
MESSAGE( FATAL_ERROR "Sblim-cmpi not found" )
ENDIF (SBLIMCMPI_FOUND)
+FIND_PACKAGE(Cmpiutil REQUIRED)
+IF (CMPIUTIL_FOUND)
+MESSAGE(STATUS "Found Sblim-cmpiutil: ${CMPIUTIL_SOURCE}")
+INCLUDE_DIRECTORIES(${CMPIUTIL_INCLUDE_DIR})
+ELSE (CMPIUTIL_FOUND)
+MESSAGE( FATAL_ERROR "Sblim-cmpiutil not found" )
+ENDIF (CMPIUTIL_FOUND)
+
FIND_PROGRAM( DOXYGEN doxygen )
IF ( NOT DOXYGEN )
MESSAGE( FATAL_ERROR "doxygen not found: install doxygen to build the documentation." )
diff --git a/cmake/modules/FindCmpiutil.cmake b/cmake/modules/FindCmpiutil.cmake
new file mode 100644
index 0000000..a151d56
--- /dev/null
+++ b/cmake/modules/FindCmpiutil.cmake
@@ -0,0 +1,27 @@
+if(CMPIUTIL_INCLUDE_DIR AND CMPIUTIL_LIBRARY)
+ # Already in cache, be silent
+ set(CMPIUTIL_FIND_QUIETLY TRUE)
+endif(CMPIUTIL_INCLUDE_DIR AND CMPIUTIL_LIBRARY)
+
+set(CMPIUTIL_LIBRARY)
+set(CMPIUTIL_INCLUDE_DIR)
+
+FIND_PATH(CMPIUTIL_INCLUDE_DIR cmpiutil/base.h
+ /usr/include
+ /usr/local/include
+)
+
+FIND_LIBRARY(CMPIUTIL_LIBRARY NAMES sblim-cmpiutil
+ PATHS
+ /usr/lib
+ /usr/local/lib
+)
+
+if(CMPIUTIL_INCLUDE_DIR AND CMPIUTIL_LIBRARY)
+ MESSAGE( STATUS "sblim-cmpiutil found: includes in ${CMPIUTIL_INCLUDE_DIR}, library in ${CMPIUTIL_LIBRARY}")
+ set(CMPIUTIL_FOUND TRUE)
+else(CMPIUTIL_INCLUDE_DIR AND CMPIUTIL_LIBRARY)
+ MESSAGE( STATUS "sblim-cmpiutil not found")
+endif(CMPIUTIL_INCLUDE_DIR AND CMPIUTIL_LIBRARY)
+
+MARK_AS_ADVANCED(CMPIUTIL_INCLUDE_DIR CMPIUTIL_LIBRARY)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 468f667..2f342c8 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -33,5 +33,6 @@ ADD_LIBRARY(cmpi-zypp SHARED ${CMPIZYPP_SRCS})
TARGET_LINK_LIBRARIES(cmpi-zypp ${ZYPP_LIBRARY} )
TARGET_LINK_LIBRARIES(cmpi-zypp ${SBLIMCMPI_LIBRARY} )
TARGET_LINK_LIBRARIES(cmpi-zypp ${GETTEXT_LIBRARIES} )
+TARGET_LINK_LIBRARIES(cmpi-zypp ${CMPIUTIL_LIBRARY} )
INSTALL(TARGETS cmpi-zypp LIBRARY DESTINATION ${LIB_INSTALL_DIR}/cmpi )
diff --git a/src/SUSE_Common.cc b/src/SUSE_Common.cc
index 9408423..a308a08 100644
--- a/src/SUSE_Common.cc
+++ b/src/SUSE_Common.cc
@@ -1,5 +1,6 @@
#include
+#include
#include
#include
#include
@@ -20,7 +21,53 @@ std::ostream & operator<<( std::ostream & str, const CmpiObjectPath & obj )
namespace cmpizypp
{
+ CmpiObjectPath get_this_computersystem(CmpiBroker & broker, const CmpiContext& ctx, const CmpiObjectPath & cop)
+ {
+ _CMPIZYPP_TRACE(4,("--- get_this_computersystem() called"));
+
+ char hostname[256];
+ if(cmpiutilGetHostName(hostname, sizeof(hostname)) == NULL)
+ {
+ CmpiStatus st(CMPI_RC_ERR_FAILED, "Cannot get hostname");
+ _CMPIZYPP_TRACE(1,("--- get_this_computersystem() failed: %s", st.msg()));
+ throw st;
+ }
+
+ _CMPIZYPP_TRACE(1,("Our Hostname is: %s", hostname));
+
+ CmpiObjectPath op( cop.getNameSpace(), "CIM_ComputerSystem");
+ CmpiEnumeration en = broker.enumInstanceNames( ctx, op );
+ if( en.isNull() )
+ {
+ CmpiStatus st( CMPI_RC_ERR_FAILED, "No CIM_ComputerSystem found.");
+ _CMPIZYPP_TRACE(1,("--- get_this_computersystem failed: %s", st.msg() ) );
+ throw st;
+ }
+ CmpiObjectPath data("", "");
+ bool found = false;
+ while( en.hasNext() )
+ {
+ data = en.getNext();
+ const char *name = data.getKey("Name");
+
+ _CMPIZYPP_TRACE(1,("Found object with Hostname is: %s", name));
+
+ if(name && strcmp(name, hostname) == 0)
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if(!found)
+ {
+ CmpiStatus st( CMPI_RC_ERR_FAILED, "No CIM_ComputerSystem found.");
+ _CMPIZYPP_TRACE(1,("--- get_this_computersystem failed: %s", st.msg() ) );
+ throw st;
+ }
+ return data;
+ }
/* ---------------------------------------------------------------------------*/
/* _assoc_targetClass_Name() */
diff --git a/src/SUSE_Common.h b/src/SUSE_Common.h
index 9c6df76..73b5ea7 100644
--- a/src/SUSE_Common.h
+++ b/src/SUSE_Common.h
@@ -11,6 +11,10 @@ std::ostream & operator<<( std::ostream & str, const CmpiObjectPath & obj );
namespace cmpizypp
{
+ CmpiObjectPath get_this_computersystem(CmpiBroker & broker,
+ const CmpiContext& ctx,
+ const CmpiObjectPath & cop);
+
bool assoc_create_refs_1toN_ST( CmpiBroker & broker,
const CmpiContext & ctx,
CmpiResult & rslt,
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org