version 1.33, 2003/08/04 13:30:39
|
version 1.60, 2006/04/19 19:39:24
|
|
|
//%///////////////////////////////////////////////////////////////////////////// |
//%2006//////////////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Company, IBM, |
// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development |
// The Open Group, Tivoli Systems |
// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems. |
|
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.; |
|
// IBM Corp.; EMC Corporation, The Open Group. |
|
// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.; |
|
// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; VERITAS Software Corporation; The Open Group. |
|
// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.; |
|
// EMC Corporation; Symantec Corporation; The Open Group. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy | // Permission is hereby granted, free of charge, to any person obtaining a copy |
// of this software and associated documentation files (the "Software"), to | // of this software and associated documentation files (the "Software"), to |
|
|
// | // |
// Author: Mike Brasher (mbrasher@bmc.com) | // Author: Mike Brasher (mbrasher@bmc.com) |
// | // |
// Modified By: |
// Modified By: Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com) |
// 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 |
// Modified By: Dave Rosckes (rosckes@us.ibm.com) |
// 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) |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
#include <Pegasus/Common/String.h> | #include <Pegasus/Common/String.h> |
#include <Pegasus/Common/Linkage.h> | #include <Pegasus/Common/Linkage.h> |
#include <Pegasus/Common/Logger.h> | #include <Pegasus/Common/Logger.h> |
|
#include <sys/stat.h> |
|
|
|
|
|
#if defined(PEGASUS_OS_TYPE_WINDOWS) |
|
#ifndef mode_t |
|
typedef unsigned long mode_t; |
|
#endif |
|
#endif |
|
|
|
#ifdef PEGASUS_OS_TYPE_UNIX |
|
# ifndef PEGASUS_OS_OS400 |
|
# include <unistd.h> |
|
# endif |
|
# 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 |
|
|
/** This is an opaque type which is returned by System::loadDynamicSymbol(). | /** This is an opaque type which is returned by System::loadDynamicSymbol(). |
Values of this type may be casted to the appropriate target type. | 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) |
#if !defined(PEGASUS_PLATFORM_ZOS_ZSERIES_IBM) && !defined(PEGASUS_PLATFORM_OS400_ISERIES_IBM) && !defined(PEGASUS_PLATFORM_AIX_RS_IBMCXX) |
typedef struct DynamicSymbolHandle_* DynamicSymbolHandle; | typedef struct DynamicSymbolHandle_* DynamicSymbolHandle; |
#else | #else |
extern "C" {typedef int (* DynamicSymbolHandle)(void);} | extern "C" {typedef int (* DynamicSymbolHandle)(void);} |
|
|
*/ | */ |
static void getCurrentTime(Uint32& seconds, Uint32& milliseconds); | static void getCurrentTime(Uint32& seconds, Uint32& milliseconds); |
| |
|
/** Similar to getCurrentTime() above but get microseconds (rather than |
|
milliseconds). |
|
*/ |
|
static void getCurrentTimeUsec(Uint32& seconds, Uint32& microseconds); |
|
|
/** getCurrentASCIITime Gets time/date in a fixed format. The format is | /** getCurrentASCIITime Gets time/date in a fixed format. The format is |
YY MM DD-HH:MM:SS | YY MM DD-HH:MM:SS |
@return Returns String with the ASCII time date. | @return Returns String with the ASCII time date. |
|
|
| |
static Boolean copyFile(const char* fromPath, const char* toPath); | static Boolean copyFile(const char* fromPath, const char* toPath); |
| |
/** Unix issue:<br><br><b>RTLD_<bah></b> issue. Currently Pegasus uses RTLD_NOW during |
/** 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 |
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. |
- that behaviour is now deprecated. |
|
*/ | */ |
static DynamicLibraryHandle loadDynamicLibrary(const char* fileName); | static DynamicLibraryHandle loadDynamicLibrary(const char* fileName); |
| |
|
|
static String getHostName(); | static String getHostName(); |
static String getFullyQualifiedHostName (); | static String getFullyQualifiedHostName (); |
static String getSystemCreationClassName (); | static String getSystemCreationClassName (); |
|
static String getHostIP(const String &hostName); |
|
|
|
static Uint32 _acquireIP(const char* hostname); |
| |
static Uint32 lookupPort( | static Uint32 lookupPort( |
const char * serviceName, | const char * serviceName, |
Uint32 defaultPort); | Uint32 defaultPort); |
| |
|
/** |
|
Attempts to validate that the input hostName represents the same host as |
|
the host represented by the value returned by the |
|
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 |
|
|
|
@return True if the input hostName can be validated to represent the |
|
same host; |
|
False otherwise |
|
*/ |
|
static Boolean sameHost (const String & hostName); |
|
|
static String getEffectiveUserName(); | static String getEffectiveUserName(); |
| |
/** | /** |
|
|
@param userName User name to be checked. | @param userName User name to be checked. |
@return true if the user is a privileged user, else false | @return true if the user is a privileged user, else false |
*/ | */ |
static Boolean isPrivilegedUser(const String userName); |
static Boolean isPrivilegedUser(const String& userName); |
| |
/** | /** |
This function returns the privileged user name on the system. | This function returns the privileged user name on the system. |
|
|
static String getPrivilegedUserName(); | static String getPrivilegedUserName(); |
| |
/** | /** |
|
This function is used to verify whether the specified user is a member |
|
of the specified user group. |
|
|
|
@param userName User name to be verified. |
|
|
|
@param groupName User group name. |
|
|
|
@return true if the user is a member of the user group, |
|
false otherwise. |
|
|
|
@throw InternalSystemError - If there is an error |
|
accessing the specified user or group information. |
|
*/ |
|
static Boolean isGroupMember(const char* userName, const char* groupName); |
|
|
|
/** |
|
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 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, |
|
false otherwise. |
|
*/ |
|
#ifndef PEGASUS_OS_OS400 |
|
static Boolean changeUserContext( |
|
const PEGASUS_UID_T& uid, |
|
const PEGASUS_GID_T& gid); |
|
#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. |
| |
@return Process ID | @return Process ID |
|
|
// Is absolute path? | // Is absolute path? |
static Boolean is_absolute_path(const char *path); | static Boolean is_absolute_path(const char *path); |
| |
#if defined(PEGASUS_OS_HPUX) |
/** Changes file permissions on the given file. |
static Boolean bindVerbose; |
@param path path of the file. |
#endif |
@param mode the bit-wise inclusive OR of the values for the desired |
|
permissions. |
/** This function is an abstraction for the openlog interface used in the Logger |
@return true on success, false on error and errno is set appropriately. |
class. Each platform intending to use system logs should support this interface |
*/ |
|
static Boolean changeFilePermissions(const char* path, mode_t mode); |
|
|
|
/** Checks whether the specified file is a regular file owned by the |
|
effective user for the current process. |
|
@param path Path of the file to check. |
|
@return True if the file is owned by the effective user for the |
|
current process, false otherwise. |
*/ | */ |
static void openlog(const String); |
static Boolean verifyFileOwnership(const char* path); |
| |
/** This function is an abstraction for the syslog interface used in the Logger |
/** |
class. Each platform intending to use system logs should support this interface |
Flag indicating whether shared libraries are loaded with the |
*/ |
BIND_VERBOSE option. |
static void syslog(Uint32, const char *); |
|
| |
/** This function is an abstraction for the closelog interface used in the Logger |
THIS FLAG IS USED ON HP-UX ONLY. |
class. Each platform intending to use system logs should support this interface |
|
*/ | */ |
static void closelog(); |
static Boolean bindVerbose; |
|
|
|
/** |
|
Writes a message to the system log. This method encapsulates the |
|
semantics of opening the system log, writing the specified message, |
|
and closing the log. |
|
|
|
@param ident An identifier to be prepended to the log messages |
|
(typically a program name). |
|
@param severity A severity value to be associated with the message. |
|
Severity values are defined in Logger.h. |
|
@param message A message to be written to the system log. |
|
*/ |
|
static void syslog( |
|
const String& ident, |
|
Uint32 severity, |
|
const char* message); |
| |
// 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; |
|
|
|
// System ID constants for Logger::put and Logger::trace |
|
static const String CIMLISTENER; |
|
|
}; | }; |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |