📄 auditlogger.cpp
字号:
//%2006//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development// 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// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions:// // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================////%/////////////////////////////////////////////////////////////////////////////#include <Pegasus/Common/Config.h>#include <Pegasus/Common/Constants.h>#include <Pegasus/Common/Logger.h>#include <Pegasus/Common/Formatter.h>#include <Pegasus/Common/CIMPropertyList.h>#include <Pegasus/Common/InternalException.h>#include <Pegasus/Common/AuditLogger.h>#ifdef PEGASUS_OS_DARWIN# include <crt_externs.h>#endif#ifndef PEGASUS_OS_TYPE_WINDOWS# include <unistd.h>#endif#ifdef PEGASUS_OS_VMS# include <unixlib.h>#endif#include <stdlib.h>#ifndef PEGASUS_DISABLE_AUDIT_LOGGERPEGASUS_USING_STD;PEGASUS_NAMESPACE_BEGINstatic const String providerModuleStatus [] = { "Unknown", "Other", "OK", "Degraded", "Stressed", "Predictive Failure", "Error", "Non-Recoverable Error", "Starting", "Stopping", "Stopped", "In Service", "No Contact", "Lost Communication"};Boolean AuditLogger::_auditLogFlag = false;AuditLogger::PEGASUS_AUDITLOGINITIALIZE_CALLBACK_T AuditLogger::_auditLogInitializeCallback = 0;AuditLogger::PEGASUS_AUDITLOG_CALLBACK_T AuditLogger::_writeAuditMessageToFile = AuditLogger::_writeAuditMessage;void AuditLogger::logCurrentConfig( const Array<String> & propertyNames, const Array<String> & propertyValues){ for (Uint32 i = 0; i < propertyNames.size(); i++) { String propertyStr = propertyNames[i] + "=" + propertyValues[i]; MessageLoaderParms msgParms("Common.AuditLogger.CURRENT_CONFIG", "cimserver configuration $0", propertyStr); _writeAuditMessageToFile(TYPE_CONFIGURATION, SUBTYPE_CURRENT_CONFIGURATION, EVENT_START_UP, Logger::INFORMATION, msgParms); }}void AuditLogger::logCurrentRegProvider( const Array < CIMInstance > & instances){ String moduleName; Array<Uint16> moduleStatus; String statusValue; Uint32 pos; // get all the registered provider module names and status for (Uint32 i = 0; i <instances.size(); i++) { instances[i].getProperty(instances[i].findProperty( _PROPERTY_PROVIDERMODULE_NAME)).getValue().get(moduleName); pos = instances[i].findProperty(_PROPERTY_OPERATIONALSTATUS); if (pos == PEG_NOT_FOUND) { moduleStatus.append(0); } else { CIMValue theValue = instances[i].getProperty(pos).getValue(); if (theValue.isNull()) { moduleStatus.append(0); } else { theValue.get(moduleStatus); } } statusValue = _getModuleStatusValue(moduleStatus); MessageLoaderParms msgParms( "Common.AuditLogger.CURRENT_PROVIDER_REGISTRATION", "Provider module \"$0\" has status \"$1\".", moduleName, statusValue); _writeAuditMessageToFile(TYPE_CONFIGURATION, SUBTYPE_CURRENT_PROVIDER_REGISTRATION, EVENT_START_UP, Logger::INFORMATION, msgParms); }}void AuditLogger::logCurrentEnvironmentVar(){#ifdef PEGASUS_OS_DARWIN char** envp = *_NSGetEnviron();#else char** envp = environ;#endif Uint32 i = 0; while (envp[i]) { MessageLoaderParms msgParms("Common.AuditLogger.CURRENT_ENV", "cimserver environment variable: $0", envp[i]); _writeAuditMessageToFile(TYPE_CONFIGURATION, SUBTYPE_CURRENT_ENVIRONMENT_VARIABLES, EVENT_START_UP, Logger::INFORMATION, msgParms); i++; }}void AuditLogger::logSetConfigProperty( const String & userName, const String & propertyName, const String & prePropertyValue, const String & newPropertyValue, Boolean isPlanned){ if (isPlanned) { MessageLoaderParms msgParms( "Common.AuditLogger.SET_PLANNED_CONFIG_PROPERTY", "The planned value of property \"$0\" is modified from " "value \"$1\" to value \"$2\" by user \"$3\".", propertyName, prePropertyValue, newPropertyValue, userName); _writeAuditMessageToFile(TYPE_CONFIGURATION, SUBTYPE_CONFIGURATION_CHANGE, EVENT_UPDATE, Logger::INFORMATION, msgParms); } else { MessageLoaderParms msgParms( "Common.AuditLogger.SET_CURRENT_CONFIG_PROPERTY", "The current value of property \"$0\" is modified from " "value \"$1\" to value \"$2\" by user \"$3\".", propertyName, prePropertyValue, newPropertyValue, userName); _writeAuditMessageToFile(TYPE_CONFIGURATION, SUBTYPE_CONFIGURATION_CHANGE, EVENT_UPDATE, Logger::INFORMATION, msgParms); }}void AuditLogger::logUpdateClassOperation( const char* cimMethodName, AuditEvent eventType, const String& userName, const String& ipAddr, const CIMNamespaceName& nameSpace, const CIMName& className, CIMStatusCode statusCode){ MessageLoaderParms msgParms( "Common.AuditLogger.OPERATION_UPDATE_CLASS", "A CIM $0 operation on class \"$1\" in namespace \"$2\" by user " "\"$3\" connected from system \"$4\" resulted in status \"$5\".", cimMethodName, className.getString(), nameSpace.getString(), userName, ipAddr, cimStatusCodeToString(statusCode)); _writeAuditMessageToFile(TYPE_CIMOPERATION, SUBTYPE_SCHEMA_OPERATION, eventType, Logger::INFORMATION, msgParms);}void AuditLogger::logUpdateQualifierOperation( const char* cimMethodName, AuditEvent eventType, const String& userName, const String& ipAddr, const CIMNamespaceName& nameSpace, const CIMName& className, CIMStatusCode statusCode){ MessageLoaderParms msgParms( "Common.AuditLogger.OPERATION_UPDATE_QUALIFIER", "A CIM $0 operation on qualifier \"$1\" in namespace \"$2\" by user " "\"$3\" connected from system \"$4\" resulted in status \"$5\".", cimMethodName, className.getString(), nameSpace.getString(), userName, ipAddr, cimStatusCodeToString(statusCode)); _writeAuditMessageToFile(TYPE_CIMOPERATION, SUBTYPE_SCHEMA_OPERATION, eventType, Logger::INFORMATION, msgParms);}void AuditLogger::logUpdateInstanceOperation( const char* cimMethodName, AuditEvent eventType, const String& userName, const String& ipAddr, const CIMNamespaceName& nameSpace,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -