version 1.68.4.4, 2008/01/09 05:55:51
|
version 1.82, 2008/02/11 11:56:05
|
|
|
| |
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <Pegasus/Common/String.h> | #include <Pegasus/Common/String.h> |
|
#include <Pegasus/Common/Array.h> |
#include <Pegasus/Common/Linkage.h> | #include <Pegasus/Common/Linkage.h> |
#include <Pegasus/Common/Logger.h> | #include <Pegasus/Common/Logger.h> |
|
#include <Pegasus/Common/Network.h> |
#include <sys/stat.h> | #include <sys/stat.h> |
| |
| |
|
|
#ifndef mode_t | #ifndef mode_t |
typedef unsigned long mode_t; | typedef unsigned long mode_t; |
#endif | #endif |
|
#include <windows.h> |
#endif | #endif |
| |
#if defined (PEGASUS_OS_TYPE_UNIX) || \ | #if defined (PEGASUS_OS_TYPE_UNIX) || \ |
defined (PEGASUS_OS_VMS) | defined (PEGASUS_OS_VMS) |
# ifndef PEGASUS_OS_OS400 |
|
# include <unistd.h> | # include <unistd.h> |
# endif |
|
# include <fcntl.h> // File locking | # include <fcntl.h> // File locking |
# define PEGASUS_UID_T uid_t | # define PEGASUS_UID_T uid_t |
# define PEGASUS_GID_T gid_t | # define PEGASUS_GID_T gid_t |
|
|
# define PEGASUS_GID_T Uint32 | # define PEGASUS_GID_T Uint32 |
#endif | #endif |
| |
|
#if defined(PEGASUS_OS_TYPE_WINDOWS) |
|
# define PEGASUS_SYSTEM_ERRORMSG_NLS \ |
|
System::getErrorMSG_NLS(GetLastError(),0) |
|
# define PEGASUS_SYSTEM_NETWORK_ERRORMSG_NLS \ |
|
System::getErrorMSG_NLS(WSAGetLastError(),0) |
|
# define PEGASUS_SYSTEM_ERRORMSG \ |
|
System::getErrorMSG(GetLastError(),0) |
|
# define PEGASUS_SYSTEM_NETWORK_ERRORMSG \ |
|
System::getErrorMSG(WSAGetLastError(),0) |
|
#elif defined(PEGASUS_OS_ZOS) |
|
# define PEGASUS_SYSTEM_ERRORMSG_NLS \ |
|
System::getErrorMSG_NLS(errno,__errno2()) |
|
# define PEGASUS_SYSTEM_NETWORK_ERRORMSG_NLS \ |
|
System::getErrorMSG_NLS(errno,__errno2()) |
|
# define PEGASUS_SYSTEM_ERRORMSG \ |
|
System::getErrorMSG(errno,__errno2()) |
|
# define PEGASUS_SYSTEM_NETWORK_ERRORMSG \ |
|
System::getErrorMSG(errno,__errno2()) |
|
#else |
|
# define PEGASUS_SYSTEM_ERRORMSG_NLS \ |
|
System::getErrorMSG_NLS(errno,0) |
|
# define PEGASUS_SYSTEM_NETWORK_ERRORMSG_NLS \ |
|
System::getErrorMSG_NLS(errno,0) |
|
# define PEGASUS_SYSTEM_ERRORMSG \ |
|
System::getErrorMSG(errno,0) |
|
# define PEGASUS_SYSTEM_NETWORK_ERRORMSG \ |
|
System::getErrorMSG(errno,0) |
|
#endif |
|
|
// | // |
// Protocal Type | // Protocal Type |
// | // |
|
|
class PEGASUS_COMMON_LINKAGE System | class PEGASUS_COMMON_LINKAGE System |
{ | { |
public: | public: |
|
|
|
/* Creates a String object containing the system message |
|
from the errno and if supported from a second level error |
|
number. The _NLS Method is looking up an internationalized version of |
|
the message. |
|
@param errorCode The system errno. |
|
@param errorCode2 The secondary error number like errno2 on z/OS |
|
*/ |
|
static String getErrorMSG_NLS(int errorCode,int errorCode2); |
|
static String getErrorMSG(int errorCode,int errorCode2); |
|
|
/** getCurrentTime - Gets the current time as seconds and milliseconds | /** getCurrentTime - Gets the current time as seconds and milliseconds |
into the provided variables using system functions. | into the provided variables using system functions. |
@param seconds Return for the seconds component of the time. | @param seconds Return for the seconds component of the time. |
|
|
static String getFullyQualifiedHostName (); | static String getFullyQualifiedHostName (); |
static String getSystemCreationClassName (); | static String getSystemCreationClassName (); |
| |
|
// The following 2 methods are wrappers around system functions |
|
// gethostbyname/gethostbyaddr or gethostbyname_r/gethostbyaddr_r. |
|
// In addition to calling corresponding system functions, these |
|
// methods introduce re-tries when errno is set to TRY_AGAIN. |
|
// Optional parameters are required to cover systems which use '_r' |
|
// versions of the system functions. |
|
static struct hostent* getHostByName( |
|
const char* name, |
|
struct hostent* he = 0, |
|
char* buf = 0, |
|
size_t len = 0); |
|
static struct hostent* getHostByAddr( |
|
const char *addr, |
|
int len, |
|
int type, |
|
struct hostent* he = 0, |
|
char* buf = 0, |
|
size_t buflen = 0); |
|
|
|
#if defined(PEGASUS_OS_ZOS) || \ |
|
defined(PEGASUS_OS_VMS) || \ |
|
defined(PEGASUS_ENABLE_IPV6) |
|
|
|
// The following 2 methods are wrappers around system functions |
|
// getaddrinfo/getnameinfo. |
|
// In addition to calling corresponding system functions, these |
|
// methods introduce re-tries on EAI_AGAIN error returns. |
|
static int getAddrInfo( |
|
const char *hostname, |
|
const char *servname, |
|
const struct addrinfo *hints, |
|
struct addrinfo **res); |
|
static int getNameInfo( |
|
const struct sockaddr *sa, |
|
size_t salen, |
|
char *host, |
|
size_t hostlen, |
|
char *serv, |
|
size_t servlen, |
|
int flags); |
|
|
|
#endif |
|
|
// Gets IP address assosiated with hostName. af indicates the | // Gets IP address assosiated with hostName. af indicates the |
// type of address (ipv4 or ipv6) returned. | // type of address (ipv4 or ipv6) returned. |
static Boolean getHostIP(const String &hostName, int *af, String &hostIP); | static Boolean getHostIP(const String &hostName, int *af, String &hostIP); |
| |
// Gets IP address in binary form. af indicates the type of | // Gets IP address in binary form. af indicates the type of |
// address (ipv4 or ipv6) returned. Address will be copied to dst. | // address (ipv4 or ipv6) returned. Address will be copied to dst. |
static Boolean _acquireIP(const char* hostname, int *af, void *dst); |
static Boolean acquireIP(const char* hostname, int *af, void *dst); |
| |
/** | /** |
Returns true if IPv6 stack is active by checking return code from | Returns true if IPv6 stack is active by checking return code from |
|
|
static Boolean isIPv6StackActive(); | static Boolean isIPv6StackActive(); |
#endif | #endif |
| |
|
/** |
|
Returns all interface addresses. Both ip4 and ip6 interface addresses |
|
will be returned. |
|
*/ |
|
static Array<String> getInterfaceAddrs(); |
|
|
static Uint32 lookupPort( | static Uint32 lookupPort( |
const char * serviceName, | const char * serviceName, |
Uint32 defaultPort); | Uint32 defaultPort); |
|
|
@return True if the user and group IDs were retrieved | @return True if the user and group IDs were retrieved |
successfully, false otherwise. | successfully, false otherwise. |
*/ | */ |
#ifndef PEGASUS_OS_OS400 |
|
static Boolean lookupUserId( | static Boolean lookupUserId( |
const char* userName, | const char* userName, |
PEGASUS_UID_T& uid, | PEGASUS_UID_T& uid, |
PEGASUS_GID_T& gid); | PEGASUS_GID_T& gid); |
#endif |
|
| |
/** | /** |
Changes the process user context to the specified user and group. | Changes the process user context to the specified user and group. |
IMPORTANT: This method uses non-reentrant functions and should only |
IMPORTANT: This method is not reentrant and not async signal safe. |
be called in a single-threaded program. |
It should only be called in a single-threaded program. |
@param userName User name to set as the process user context. | @param userName User name to set as the process user context. |
@param uid User ID to set as the process user context. | @param uid User ID to set as the process user context. |
@param gid Group ID to set as the process group 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 |
|
static Boolean changeUserContext_SingleThreaded( | static Boolean changeUserContext_SingleThreaded( |
const char* userName, | const char* userName, |
const PEGASUS_UID_T& uid, | const PEGASUS_UID_T& uid, |
const PEGASUS_GID_T& gid); | 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. |
|
|
struct flock _fl; | struct flock _fl; |
int _fd; | int _fd; |
#endif | #endif |
|
#ifdef PEGASUS_OS_TYPE_WINDOWS |
|
HANDLE _hFile; |
|
#endif |
}; | }; |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |