⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 auditlogger.cpp

📁 Pegasus is an open-source implementationof the DMTF CIM and WBEM standards. It is designed to be por
💻 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/PegasusAssert.h>#include <Pegasus/Common/Constants.h>#include <iostream>#include <Pegasus/Common/System.h>#include <Pegasus/Common/FileSystem.h>#include <Pegasus/Common/Logger.h>#include <Pegasus/Common/AuditLogger.h>PEGASUS_USING_PEGASUS;PEGASUS_USING_STD;#ifndef PEGASUS_DISABLE_AUDIT_LOGGERtypedef void (*PEGASUS_AUDITLOGINITIALIZE_CALLBACK_T)();const String TEST_USER("guest");const String TEST_IP("127.0.0.1");CIMInstance _createModuleInstance(    const String & name,    const String & location,    const Array<Uint16> status){    CIMInstance moduleInstance (PEGASUS_CLASSNAME_PROVIDERMODULE);    moduleInstance.addProperty (CIMProperty (CIMName ("Name"), name));    moduleInstance.addProperty (CIMProperty (CIMName ("Vendor"),        String ("Hewlett-Packard Company")));    moduleInstance.addProperty (CIMProperty (CIMName ("Version"),        String ("2.6")));    moduleInstance.addProperty (CIMProperty (CIMName ("InterfaceType"),        String ("C++Default")));    moduleInstance.addProperty (CIMProperty (CIMName ("InterfaceVersion"),        String ("2.6.0")));    moduleInstance.addProperty (CIMProperty (CIMName ("OperationalStatus"),        status));    moduleInstance.addProperty (CIMProperty (CIMName ("Location"), location));    return(moduleInstance);}void testLogCurrentConf(){    Array<String> propertyNames;    Array<String> propertyValues;    propertyNames.append("AuditLogProperty1");    propertyNames.append("AuditLogProperty2");    propertyNames.append("AuditLogProperty3");    propertyValues.append("AuditLogValue1");    propertyValues.append("AuditLogValue2");    propertyValues.append("AuditLogValue3");    AuditLogger::logCurrentConfig(propertyNames, propertyValues);}static void writeAuditLogToFile(    AuditLogger::AuditType auditType, AuditLogger::AuditSubType auditSubType,    AuditLogger::AuditEvent auditEvent,    Uint32 logLevel, MessageLoaderParms & msgParms){    const char* pegasusHomeDir = getenv ("PEGASUS_HOME");        if (pegasusHomeDir == NULL)    {        pegasusHomeDir = "./";    }    String auditTestLogFile (pegasusHomeDir);    auditTestLogFile.append("/AuditTest.log");    FILE * _auditTestLogFileHandle =        fopen(auditTestLogFile.getCString(), "a+");    fprintf(_auditTestLogFileHandle, "%s\n",        (const char *)MessageLoader::getMessage(msgParms).getCString());   fclose(_auditTestLogFileHandle);}void testLogCurrentRegProvider(){    Array<CIMInstance> instances;    Array<Uint16> status0, status1, status2, status3, status4, status5;     Array<Uint16> status6, status7, status8, status9, status10, status11;     Array<Uint16> status12, status13, status14;    status0.append(0);    status1.append(1);    status2.append(2);    status3.append(3);    status4.append(4);    status5.append(5);    status6.append(6);    status7.append(7);    status8.append(8);    status9.append(9);    status10.append(10);    status11.append(11);    status12.append(12);    status13.append(13);     instances.append(_createModuleInstance("AuditLogProviderModule0",         "AuditLogProvider0", status0));     instances.append(_createModuleInstance("AuditLogProviderModule1",         "AuditLogProvider1", status1));     instances.append(_createModuleInstance("AuditLogProviderModule2",         "AuditLogProvider2", status2));     instances.append(_createModuleInstance("AuditLogProviderModule3",         "AuditLogProvider3", status3));     instances.append(_createModuleInstance("AuditLogProviderModule4",         "AuditLogProvider4", status4));     instances.append(_createModuleInstance("AuditLogProviderModule5",         "AuditLogProvider5", status5));     instances.append(_createModuleInstance("AuditLogProviderModule6",         "AuditLogProvider6", status6));     instances.append(_createModuleInstance("AuditLogProviderModule7",         "AuditLogProvider7", status7));     instances.append(_createModuleInstance("AuditLogProviderModule8",         "AuditLogProvider8", status8));     instances.append(_createModuleInstance("AuditLogProviderModule9",         "AuditLogProvider9", status9));     instances.append(_createModuleInstance("AuditLogProviderModule10",         "AuditLogProvider10", status10));     instances.append(_createModuleInstance("AuditLogProviderModule11",         "AuditLogProvider11", status11));     instances.append(_createModuleInstance("AuditLogProviderModule12",         "AuditLogProvider12", status12));     instances.append(_createModuleInstance("AuditLogProviderModule13",         "AuditLogProvider13", status13));     AuditLogger::logCurrentRegProvider(instances);}void testLogSetConfigProperty(){    // log setting planned value of config property     AuditLogger::logSetConfigProperty("guest", "logdir", "./logs",         "/tmp", true);    // log setting current value of config property     AuditLogger::logSetConfigProperty("guest", "logdir",        "./logs", "/tmp", false);}void testLogSchemaOperations(){    AuditLogger::logUpdateClassOperation(        "CreateClass", AuditLogger::EVENT_CREATE,        "user1", "127.0.0.1", "root/test", "class1", CIM_ERR_FAILED);    AuditLogger::logUpdateClassOperation(        "ModifyClass", AuditLogger::EVENT_UPDATE,        "", "localhost", "test", "CIM_MyClass", CIM_ERR_ACCESS_DENIED);    AuditLogger::logUpdateClassOperation(        "DeleteClass", AuditLogger::EVENT_DELETE,        "guest", "1.1.1.1", "a/b/c/d", "ByeByeClass", CIM_ERR_SUCCESS);    AuditLogger::logUpdateQualifierOperation(        "SetQualifier", AuditLogger::EVENT_UPDATE,        "rootabc", "255.0.0.255", "test2", "Test", CIM_ERR_NOT_SUPPORTED);    AuditLogger::logUpdateQualifierOperation(        "DeleteQualifier", AuditLogger::EVENT_DELETE,        "r", "4.3.2.1", "test1/test2", "Bogus", CIM_ERR_NOT_FOUND);}void testLogInstanceOperations(){    AuditLogger::logUpdateInstanceOperation(        "CreateInstance", AuditLogger::EVENT_CREATE,        "user1", "127.0.0.9", "root/test", CIMObjectPath("class1"),        "", "", CIM_ERR_FAILED);    AuditLogger::logUpdateInstanceOperation(        "CreateInstance", AuditLogger::EVENT_CREATE,        "user1", "127.0.0.9", "root/test", CIMObjectPath("class1.id=\"v1\""),        "Module1", "Provider1", CIM_ERR_SUCCESS);    AuditLogger::logUpdateInstanceOperation(        "ModifyInstance", AuditLogger::EVENT_UPDATE,        "", "localhost", "test", CIMObjectPath("CIM_MyClass.id=1"),        "", "", CIM_ERR_INVALID_CLASS);    AuditLogger::logUpdateInstanceOperation(        "ModifyInstance", AuditLogger::EVENT_UPDATE,        "", "localhost", "test", CIMObjectPath("CIM_MyClass.id=1"),        "TheModule", "TheProvider", CIM_ERR_INVALID_CLASS);    AuditLogger::logUpdateInstanceOperation(        "DeleteInstance", AuditLogger::EVENT_DELETE,        "guest", "127.0.0.1", "a/b/c", CIMObjectPath("THE_Class.a=\"A\",z=10"),        "", "", CIM_ERR_NOT_FOUND);    AuditLogger::logUpdateInstanceOperation(        "DeleteInstance", AuditLogger::EVENT_DELETE,        "guest", "127.0.0.1", "a/b/c", CIMObjectPath("THE_Class.a=\"A\",z=10"),        "AHappyModule", "AHappyProvider", CIM_ERR_NOT_FOUND);    AuditLogger::logUpdateInstanceOperation(        "SetProperty", AuditLogger::EVENT_UPDATE,        "me", "1.0.0.0", "a/b/c/d/e/f/g", CIMObjectPath("Z.x=0"),        "", "", CIM_ERR_INVALID_CLASS);    AuditLogger::logUpdateInstanceOperation(        "SetProperty", AuditLogger::EVENT_UPDATE,        "me", "1.0.0.0", "a/b/c/d/e/f/g", CIMObjectPath("Z.x=0"),        "InstModule", "InstProv", CIM_ERR_INVALID_CLASS);    AuditLogger::logInvokeMethodOperation(        "guest", "1.1.1.1", "t", CIMObjectPath("Test"), "MyMethod",        "", "", CIM_ERR_FAILED);    AuditLogger::logInvokeMethodOperation(        "guest", "1.1.1.1", "t", CIMObjectPath("Test.a=1,b=2,c=3"), "MyMethod",        "m", "p", CIM_ERR_FAILED);}void testLogUpdateProvModuleStatus(){    Array<Uint16> currentModuleStatus, newModuleStatus;    currentModuleStatus.append(10);    newModuleStatus.append(2);    // module status is updated successfully    AuditLogger::logUpdateProvModuleStatus("AuditLogUpdateModuleStatus",        currentModuleStatus, newModuleStatus);    // Failed to update the module status    newModuleStatus.clear();    newModuleStatus.append(10);    AuditLogger::logUpdateProvModuleStatus("AuditLogUpdateModuleStatus",        currentModuleStatus, newModuleStatus);    currentModuleStatus.clear();    newModuleStatus.clear();    currentModuleStatus.append(9);    currentModuleStatus.append(10);    newModuleStatus.append(8);    newModuleStatus.append(2);    AuditLogger::logUpdateProvModuleStatus("AuditLogUpdateModuleStatus",        currentModuleStatus, newModuleStatus);}void testLogLocalAuthentication(){    // log success message    AuditLogger::logLocalAuthentication(                    TEST_USER,                    true);    // log failure message    AuditLogger::logLocalAuthentication(                    TEST_USER,                    false);}void testLogBasicAuthentication(){    // log success message    AuditLogger::logBasicAuthentication(                    TEST_USER,                    TEST_IP,                    true);    // log failure message    AuditLogger::logBasicAuthentication(                    TEST_USER,                    TEST_IP,                    false);}void auditLogInitializeCallback(){    PEGASUS_TEST_ASSERT(!AuditLogger::isEnabled());}void testSetInitializeCallback(){    AuditLogger::setInitializeCallback(auditLogInitializeCallback);}void testSetEnabled(Boolean enabled){    AuditLogger::setEnabled(enabled);}void testEnabled(){    PEGASUS_TEST_ASSERT(AuditLogger::isEnabled());}void testDisabled(){    PEGASUS_TEST_ASSERT(!(AuditLogger::isEnabled()));}#endifint main(int argc, char** argv){#ifndef PEGASUS_DISABLE_AUDIT_LOGGER    AuditLogger::writeAuditLogToFileCallback(writeAuditLogToFile);    const char* pegasusHomeDir = getenv ("PEGASUS_HOME");    String auditTestLogFile (pegasusHomeDir);    auditTestLogFile.append("/AuditTest.log");    System::removeFile(auditTestLogFile.getCString());    const char * masterDir = getenv("PEGASUS_ROOT");    String masterFile (masterDir);    masterFile.append("/src/Pegasus/Common/tests/AuditLogger/masterOutput");     try    {        testSetInitializeCallback();        testSetEnabled(true);        testEnabled();        testLogCurrentConf();        testLogCurrentRegProvider();        testLogSetConfigProperty();        testLogSchemaOperations();        testLogInstanceOperations();        testLogUpdateProvModuleStatus();        testLogLocalAuthentication();        testLogBasicAuthentication();        testSetEnabled(false);        testDisabled();        PEGASUS_TEST_ASSERT(FileSystem::compareFiles(            auditTestLogFile, masterFile));    }    catch (Exception& e)    {        cout << "Caught unexpected exception: " << e.getMessage() << endl;        return 1;    }    catch (...)    {        cout << "Caught unexpected exception" << endl;        return 1;    }    cout << argv[0] << " +++++ passed all tests" << endl;    return 0;#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -