version 1.59, 2006/01/30 16:17:08
|
version 1.67, 2006/11/08 20:38:30
|
|
|
// | // |
//============================================================================== | //============================================================================== |
// | // |
// Author: Mike Brasher (mbrasher@bmc.com) |
|
// |
|
// Modified By: Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com) |
|
// Dave Rosckes (rosckes@us.ibm.com) |
|
// Robert Kieninger, IBM (kieningr@de.ibm.com) for Bug#667 |
|
// David Dillard, VERITAS Software Corp. |
|
// (david.dillard@veritas.com) |
|
// Sean Keenan, Hewlett-Packard Company (sean.keenan@hp.com) |
|
// Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com) |
|
// |
|
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#ifndef Pegasus_System_h | #ifndef Pegasus_System_h |
|
|
#endif | #endif |
#endif | #endif |
| |
|
#if defined (PEGASUS_OS_TYPE_UNIX) || (PEGASUS_OS_VMS) |
|
# ifndef PEGASUS_OS_OS400 |
|
# include <unistd.h> |
|
# endif |
|
# include <fcntl.h> // File locking |
|
# define PEGASUS_UID_T uid_t |
|
# define PEGASUS_GID_T gid_t |
|
#else |
|
# define PEGASUS_UID_T Uint32 |
|
# define PEGASUS_GID_T Uint32 |
|
#endif |
| |
// | // |
// Protocal Type | // Protocal Type |
|
|
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
|
|
/** This is an opaque type which is used to represent dynamic library |
|
handles returned by the System::loadDynamicLibrary() method and |
|
accepted by the System::loadDynamicProcedure() method. |
|
*/ |
|
typedef struct DynamicLibraryHandle_* DynamicLibraryHandle; |
|
|
|
/** This is an opaque type which is returned by System::loadDynamicSymbol(). |
|
Values of this type may be casted to the appropriate target type. |
|
*/ |
|
#if !defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) && !defined(PEGASUS_PLATFORM_OS400_ISERIES_IBM) && !defined(PEGASUS_PLATFORM_AIX_RS_IBMCXX) |
|
typedef struct DynamicSymbolHandle_* DynamicSymbolHandle; |
|
#else |
|
extern "C" {typedef int (* DynamicSymbolHandle)(void);} |
|
#endif |
|
|
|
|
|
|
|
/** The System class defines wrappers for operating system related calls. | /** The System class defines wrappers for operating system related calls. |
These are only placed here if they are extremely light. These are | These are only placed here if they are extremely light. These are |
usually just direct wrappers which map more or less one to one to the | usually just direct wrappers which map more or less one to one to the |
|
|
| |
static Boolean copyFile(const char* fromPath, const char* toPath); | static Boolean copyFile(const char* fromPath, const char* toPath); |
| |
/** Unix issue:<br><br><b>RTLD_<blah></b> issue. Currently Pegasus uses RTLD_GLOBAL during |
|
loading of the library if supported by OS. Previous to 2.2, Pegasus used RTLD_GLOBAL on Linux. In between 2.3 and 2.4, it used RTDL_NOW. In 2.5 it is using RTLD_GLOBAL. Please consult doc/ProviderLoading.txt for more information. |
|
*/ |
|
static DynamicLibraryHandle loadDynamicLibrary(const char* fileName); |
|
|
|
static void unloadDynamicLibrary(DynamicLibraryHandle libraryHandle); |
|
|
|
static String dynamicLoadError(void); |
|
|
|
static DynamicSymbolHandle loadDynamicSymbol( |
|
DynamicLibraryHandle libraryHandle, |
|
const char* symbolName); |
|
|
|
static String getHostName(); | static String getHostName(); |
static String getFullyQualifiedHostName (); | static String getFullyQualifiedHostName (); |
static String getSystemCreationClassName (); | static String getSystemCreationClassName (); |
|
|
the host represented by the value returned by the | the host represented by the value returned by the |
getFullyQualifiedHostName() method. | getFullyQualifiedHostName() method. |
| |
Note: this method is modeled on the |
|
CIMClientRep::compareObjectPathtoCurrentConnection() method |
|
(Revision 1.44 of pegasus/src/Pegasus/Client/CIMClientRep.cpp) |
|
|
|
@param hostName the host name to validate | @param hostName the host name to validate |
| |
@return True if the input hostName can be validated to represent the | @return True if the input hostName can be validated to represent the |
|
|
*/ | */ |
static Boolean sameHost (const String & hostName); | static Boolean sameHost (const String & hostName); |
| |
|
/** |
|
* Attempts to find the given IP address(32bit) on any of the local defined |
|
* network interfaces |
|
*/ |
|
static Boolean isIpOnNetworkInterface(Uint32 inIP); |
|
|
|
/** |
|
* Attempts to resolve a given hostname |
|
* this function possibly can take some as it can request information |
|
* from the DNS |
|
* |
|
* Return: return value == true if successful, false if not successful |
|
* the IP address that was determined resides in resolvedNameIP |
|
*/ |
|
static Boolean resolveHostNameAtDNS(const char* hostname, Uint32 * resolvedNameIP); |
|
|
|
/** |
|
* Attempts to resolve a given IP address |
|
* this function possibly can take some as it can request information |
|
* from the DNS |
|
* Return: return value == true if successful, false if not successful |
|
* the IP address that was determined resides in resolvedNameIP |
|
*/ |
|
static Boolean resolveIPAtDNS(Uint32 ip_addr, Uint32 * resolvedIP); |
|
|
|
/** |
|
* Bundling function used to determine if a given hostname or IP address |
|
* belongs to the local host |
|
* this function has the potential to take some time as it will possibly |
|
* use the DNS |
|
*/ |
|
static Boolean isLocalHost(const String &hostName); |
|
|
static String getEffectiveUserName(); | static String getEffectiveUserName(); |
| |
/** | /** |
|
|
static Boolean isGroupMember(const char* userName, const char* groupName); | static Boolean isGroupMember(const char* userName, const char* groupName); |
| |
/** | /** |
Changes the process user context to the specified user. |
Gets the user and group IDs associated with the specified user. |
|
@param userName User name for which to look up user and group IDs. |
@param userName User name to set as the process user context. |
@param uid User ID for the specified user name. |
|
@param gid Group ID for the specified user name. |
|
@return True if the user and group IDs were retrieved |
|
successfully, false otherwise. |
|
*/ |
|
#ifndef PEGASUS_OS_OS400 |
|
static Boolean lookupUserId( |
|
const char* userName, |
|
PEGASUS_UID_T& uid, |
|
PEGASUS_GID_T& gid); |
|
#endif |
| |
|
/** |
|
Changes the process user context to the specified user and group ID. |
|
@param uid User ID to set as the process user context. |
|
@param gid Group ID to set as the process group context. |
@return True if the user context is successfully changed, | @return True if the user context is successfully changed, |
false otherwise. | false otherwise. |
*/ | */ |
#ifndef PEGASUS_OS_OS400 | #ifndef PEGASUS_OS_OS400 |
static Boolean changeUserContext(const char* userName); |
static Boolean changeUserContext( |
|
const PEGASUS_UID_T& uid, |
|
const PEGASUS_GID_T& gid); |
#endif | #endif |
|
|
/** | /** |
This function is used to get the process ID of the calling process. | This function is used to get the process ID of the calling process. |
| |
|
|
Uint32 severity, | Uint32 severity, |
const char* message); | const char* message); |
| |
|
static void openlog( |
|
const char *ident, |
|
int logopt, |
|
int facility); |
|
|
|
static void closelog(); |
|
|
// System ID constants for Logger::put and Logger::trace | // System ID constants for Logger::put and Logger::trace |
static const String CIMSERVER; | static const String CIMSERVER; |
| |
|
|
| |
}; | }; |
| |
|
/** |
|
The AutoFileLock class uses an advisory file lock to allow access to a |
|
resource to be controlled. |
|
*/ |
|
class PEGASUS_COMMON_LINKAGE AutoFileLock |
|
{ |
|
public: |
|
|
|
AutoFileLock(const char* fileName); |
|
~AutoFileLock(); |
|
|
|
private: |
|
|
|
AutoFileLock(); |
|
AutoFileLock(const AutoFileLock&); |
|
AutoFileLock& operator=(const AutoFileLock&); |
|
|
|
#ifdef PEGASUS_OS_TYPE_UNIX |
|
struct flock _fl; |
|
int _fd; |
|
#endif |
|
}; |
|
|
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |
| |
#endif /* Pegasus_System_h */ | #endif /* Pegasus_System_h */ |