version 1.6, 2006/10/25 22:14:36
|
version 1.16, 2007/09/12 21:30:58
|
|
|
#include <Pegasus/Common/Config.h> | #include <Pegasus/Common/Config.h> |
#include <Pegasus/Common/Constants.h> | #include <Pegasus/Common/Constants.h> |
#include <Pegasus/Common/Logger.h> | #include <Pegasus/Common/Logger.h> |
#include <Pegasus/Common/Formatter.h> |
#include <Pegasus/Common/AuditLogger.h> |
#include <Pegasus/Common/CIMPropertyList.h> |
|
#include <Pegasus/Common/InternalException.h> |
#ifdef PEGASUS_OS_DARWIN |
|
# include <crt_externs.h> |
|
#endif |
| |
#ifndef PEGASUS_OS_TYPE_WINDOWS | #ifndef PEGASUS_OS_TYPE_WINDOWS |
# include <unistd.h> | # include <unistd.h> |
#endif | #endif |
| |
#include <stdlib.h> |
#ifdef PEGASUS_OS_VMS |
|
# include <unixlib.h> |
#ifndef PEGASUS_DISABLE_AUDIT_LOGGER |
#endif |
| |
#include <Pegasus/Common/AuditLogger.h> |
#include <stdlib.h> |
| |
extern char ** environ; |
#ifdef PEGASUS_ENABLE_AUDIT_LOGGER |
| |
PEGASUS_USING_STD; | PEGASUS_USING_STD; |
| |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
static const String providerModuleStatus [] = {"Unknown", "Other", "OK", "Degraded", |
static const String providerModuleStatus [] = { |
|
"Unknown", "Other", "OK", "Degraded", |
"Stressed", "Predictive Failure", "Error", "Non-Recoverable Error", | "Stressed", "Predictive Failure", "Error", "Non-Recoverable Error", |
"Starting", "Stopping", "Stopped", "In Service", "No Contact", | "Starting", "Stopping", "Stopped", "In Service", "No Contact", |
"Lost Communication"}; | "Lost Communication"}; |
| |
Boolean AuditLogger::_auditLogFlag = false; | Boolean AuditLogger::_auditLogFlag = false; |
| |
AuditLogger::PEGASUS_AUDITLOGINITIALIZE_CALLBACK_T AuditLogger::_auditLogInitializeCallback; |
AuditLogger::PEGASUS_AUDITLOGINITIALIZE_CALLBACK_T |
|
AuditLogger::_auditLogInitializeCallback = 0; |
| |
AuditLogger::PEGASUS_AUDITLOG_CALLBACK_T AuditLogger::_writeAuditMessageToFile = | AuditLogger::PEGASUS_AUDITLOG_CALLBACK_T AuditLogger::_writeAuditMessageToFile = |
AuditLogger::_writeAuditMessage; | AuditLogger::_writeAuditMessage; |
|
|
const Array<String> & propertyNames, | const Array<String> & propertyNames, |
const Array<String> & propertyValues) | const Array<String> & propertyValues) |
{ | { |
String properties; |
|
|
|
for (Uint32 i = 0; i < propertyNames.size(); i++) | for (Uint32 i = 0; i < propertyNames.size(); i++) |
{ | { |
properties.append(propertyNames[i]); |
String propertyStr = propertyNames[i] + "=" + propertyValues[i]; |
properties.append("="); |
|
properties.append(propertyValues[i]); |
|
properties.append("\n"); |
|
} |
|
| |
MessageLoaderParms msgParms("Common.AuditLogger.CURRENT_CONFIG", | MessageLoaderParms msgParms("Common.AuditLogger.CURRENT_CONFIG", |
"The current configuration properties are:\n$0", properties); |
"cimserver configuration $0", propertyStr); |
| |
_writeAuditMessageToFile(TYPE_CONFIGURATION, | _writeAuditMessageToFile(TYPE_CONFIGURATION, |
SUBTYPE_CURRENT_CONFIGURATION, | SUBTYPE_CURRENT_CONFIGURATION, |
EVENT_START_UP, Logger::INFORMATION, msgParms); | EVENT_START_UP, Logger::INFORMATION, msgParms); |
|
} |
} | } |
| |
void AuditLogger::logCurrentRegProvider( | void AuditLogger::logCurrentRegProvider( |
const Array < CIMInstance > & instances) | const Array < CIMInstance > & instances) |
{ | { |
String moduleName, registeredModules; |
String moduleName; |
Array<Uint16> moduleStatus; | Array<Uint16> moduleStatus; |
String statusValue; | String statusValue; |
Uint32 pos; | Uint32 pos; |
|
|
instances[i].getProperty(instances[i].findProperty( | instances[i].getProperty(instances[i].findProperty( |
_PROPERTY_PROVIDERMODULE_NAME)).getValue().get(moduleName); | _PROPERTY_PROVIDERMODULE_NAME)).getValue().get(moduleName); |
| |
registeredModules.append(moduleName); |
|
registeredModules.append("="); |
|
|
|
pos = instances[i].findProperty(_PROPERTY_OPERATIONALSTATUS); | pos = instances[i].findProperty(_PROPERTY_OPERATIONALSTATUS); |
| |
if (pos == PEG_NOT_FOUND) | if (pos == PEG_NOT_FOUND) |
|
|
| |
statusValue = _getModuleStatusValue(moduleStatus); | statusValue = _getModuleStatusValue(moduleStatus); |
| |
registeredModules.append(statusValue); |
|
registeredModules.append("\n"); |
|
} |
|
|
|
MessageLoaderParms msgParms( | MessageLoaderParms msgParms( |
"Common.AuditLogger.CURRENT_PROVIDER_REGISTRATION", | "Common.AuditLogger.CURRENT_PROVIDER_REGISTRATION", |
"The current registered provider modules are:\n$0", registeredModules); |
"Provider module \"$0\" has status \"$1\".", |
|
moduleName, statusValue); |
| |
_writeAuditMessageToFile(TYPE_CONFIGURATION, | _writeAuditMessageToFile(TYPE_CONFIGURATION, |
SUBTYPE_CURRENT_PROVIDER_REGISTRATION, | SUBTYPE_CURRENT_PROVIDER_REGISTRATION, |
EVENT_START_UP, Logger::INFORMATION, msgParms); | EVENT_START_UP, Logger::INFORMATION, msgParms); |
} | } |
|
} |
| |
void AuditLogger::logCurrentEnvironmentVar() | void AuditLogger::logCurrentEnvironmentVar() |
{ | { |
|
#ifdef PEGASUS_OS_DARWIN |
String envList; |
char** envp = *_NSGetEnviron(); |
|
#else |
char ** envp = environ; | char ** envp = environ; |
|
#endif |
| |
Uint32 i = 0; | Uint32 i = 0; |
| |
while (envp[i]) | while (envp[i]) |
{ | { |
envList.append(envp[i]); |
|
envList.append("\n"); |
|
|
|
i++; |
|
} |
|
|
|
MessageLoaderParms msgParms("Common.AuditLogger.CURRENT_ENV", | MessageLoaderParms msgParms("Common.AuditLogger.CURRENT_ENV", |
"The current environment variables are:\n$0", envList); |
"cimserver environment variable: $0", envp[i]); |
| |
_writeAuditMessageToFile(TYPE_CONFIGURATION, | _writeAuditMessageToFile(TYPE_CONFIGURATION, |
SUBTYPE_CURRENT_ENVIRONMENT_VARIABLES, | SUBTYPE_CURRENT_ENVIRONMENT_VARIABLES, |
EVENT_START_UP, Logger::INFORMATION, msgParms); | EVENT_START_UP, Logger::INFORMATION, msgParms); |
|
|
|
i++; |
|
} |
} | } |
| |
void AuditLogger::logSetConfigProperty( | void AuditLogger::logSetConfigProperty( |
|
|
} | } |
} | } |
| |
|
void AuditLogger::logUpdateProvModuleStatus( |
|
const String & moduleName, |
|
const Array<Uint16> currentModuleStatus, |
|
const Array<Uint16> newModuleStatus) |
|
{ |
|
String currentModuleStatusValue = |
|
_getModuleStatusValue(currentModuleStatus); |
|
|
|
String newModuleStatusValue = _getModuleStatusValue(newModuleStatus); |
|
|
|
MessageLoaderParms msgParms( |
|
"Common.AuditLogger.UPDATE_PROVIDER_MODULE_STATUS", |
|
"The operational status of module \"$0\" has changed from \"$1\"" |
|
" to \"$2\".", |
|
moduleName, currentModuleStatusValue, newModuleStatusValue); |
|
|
|
_writeAuditMessageToFile(TYPE_CONFIGURATION, |
|
SUBTYPE_PROVIDER_MODULE_STATUS_CHANGE, |
|
EVENT_UPDATE, Logger::INFORMATION, msgParms); |
|
} |
|
|
|
void AuditLogger::logLocalAuthentication( |
|
const String& userName, |
|
Boolean successful) |
|
{ |
|
MessageLoaderParms msgParms( |
|
"Common.AuditLogger.LOCAL_AUTHENTICATION", |
|
"Local authentication attempt: " |
|
"successful = $0, user = $1. ", |
|
CIMValue(successful).toString(), |
|
userName); |
|
|
|
_writeAuditMessageToFile( |
|
TYPE_AUTHENTICATION, |
|
SUBTYPE_LOCAL_AUTHENTICATION, |
|
successful ? EVENT_AUTH_SUCCESS : EVENT_AUTH_FAILURE, |
|
successful ? Logger::INFORMATION : Logger::WARNING, |
|
msgParms); |
|
} |
|
|
|
void AuditLogger::logBasicAuthentication( |
|
const String& userName, |
|
const String& ipAddr, |
|
Boolean successful) |
|
{ |
|
MessageLoaderParms msgParms( |
|
"Common.AuditLogger.BASIC_AUTHENTICATION", |
|
"Basic authentication attempt: " |
|
"successful = $0, user = $1, IP address = $2.", |
|
CIMValue(successful).toString(), |
|
userName, |
|
ipAddr); |
|
|
|
_writeAuditMessageToFile( TYPE_AUTHENTICATION, |
|
SUBTYPE_BASIC_AUTHENTICATION, |
|
successful ? EVENT_AUTH_SUCCESS : EVENT_AUTH_FAILURE, |
|
successful ? Logger::INFORMATION: Logger::WARNING, |
|
msgParms); |
|
} |
|
|
|
void AuditLogger::logCertificateBasedAuthentication( |
|
const String& issuerName, |
|
const String& subjectName, |
|
const String& serialNumber, |
|
const String& ipAddr, |
|
Boolean successful) |
|
{ |
|
MessageLoaderParms msgParms( |
|
"Common.AuditLogger.CERTIFICATE_BASED_AUTHENTICATION", |
|
"Certificate based authentication attempt: " |
|
"successful = $0, issuer = $1, subject = $2, serialNumber = $3, " |
|
"IP address = $4.", |
|
CIMValue(successful).toString(), |
|
issuerName, |
|
subjectName, |
|
serialNumber, |
|
ipAddr); |
|
|
|
_writeAuditMessageToFile(TYPE_AUTHENTICATION, |
|
SUBTYPE_CERTIFICATE_BASED_AUTHENTICATION, |
|
successful ? EVENT_AUTH_SUCCESS : EVENT_AUTH_FAILURE, |
|
successful ? Logger::INFORMATION: Logger::WARNING, |
|
msgParms); |
|
} |
|
|
|
void AuditLogger::logCertificateBasedUserValidation( |
|
const String& userName, |
|
const String& issuerName, |
|
const String& subjectName, |
|
const String& serialNumber, |
|
const String& ipAddr, |
|
Boolean successful) |
|
{ |
|
MessageLoaderParms msgParms( |
|
"Common.AuditLogger.CERTIFICATE_BASED_USER_VALIDATION", |
|
"Certificate based user validation attempt: " |
|
"successful = $0, userName = $1, issuer = $2, subject = $3, " |
|
"serialNumber = $4, IP address = $5.", |
|
CIMValue(successful).toString(), |
|
userName, |
|
issuerName, |
|
subjectName, |
|
serialNumber, |
|
ipAddr); |
|
|
|
_writeAuditMessageToFile( TYPE_AUTHORIZATION, |
|
SUBTYPE_CERTIFICATE_BASED_USER_VALIDATION, |
|
successful ? EVENT_AUTH_SUCCESS : EVENT_AUTH_FAILURE, |
|
successful ? Logger::INFORMATION: Logger::WARNING, |
|
msgParms); |
|
} |
|
|
void AuditLogger::setInitializeCallback( | void AuditLogger::setInitializeCallback( |
PEGASUS_AUDITLOGINITIALIZE_CALLBACK_T auditLogInitializeCallback) | PEGASUS_AUDITLOGINITIALIZE_CALLBACK_T auditLogInitializeCallback) |
{ | { |
|
|
| |
void AuditLogger::setEnabled(Boolean enabled) | void AuditLogger::setEnabled(Boolean enabled) |
{ | { |
|
// Only write the enable/disable messages if we are set up to handle them |
|
if (_auditLogInitializeCallback != 0) |
|
{ |
if (enabled) | if (enabled) |
{ | { |
if (!_auditLogFlag) | if (!_auditLogFlag) |
{ | { |
_auditLogInitializeCallback(); | _auditLogInitializeCallback(); |
|
|
|
MessageLoaderParms msgParms( |
|
"Common.AuditLogger.ENABLE_AUDIT_LOG", |
|
"Audit logging is enabled."); |
|
|
|
_writeAuditMessageToFile(TYPE_CONFIGURATION, |
|
SUBTYPE_CONFIGURATION_CHANGE, |
|
EVENT_UPDATE, Logger::INFORMATION, msgParms); |
} | } |
} | } |
else | else |
|
|
EVENT_UPDATE, Logger::INFORMATION, msgParms); | EVENT_UPDATE, Logger::INFORMATION, msgParms); |
} | } |
} | } |
|
} |
| |
_auditLogFlag = enabled; | _auditLogFlag = enabled; |
} | } |
|
|
{ | { |
String localizedMsg = MessageLoader::getMessage(msgParms); | String localizedMsg = MessageLoader::getMessage(msgParms); |
| |
String identifier = "CIM Server Audit"; |
String identifier = "cimserver audit"; |
| |
Logger::put(Logger::AUDIT_LOG, identifier, logLevel, localizedMsg); | Logger::put(Logger::AUDIT_LOG, identifier, logLevel, localizedMsg); |
} | } |
|
|
} | } |
} | } |
| |
return (moduleStatusValue); |
return moduleStatusValue; |
} | } |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |