From f5f0988bafa80c3db498fe1cb56ec30560787d60 Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Fri, 29 Jun 2018 08:44:03 -0700 Subject: [PATCH] Make handlerSettings optional (#989) --- .../AspNetCore/src/aspnetcore_shim_config.cpp | 5 ++++- src/AspNetCoreModuleV2/CommonLib/config_utility.h | 7 ++++++- src/AspNetCoreModuleV2/CommonLib/debugutil.cpp | 8 ++++---- src/AspNetCoreModuleV2/CommonLib/utility.cxx | 8 +------- test/CommonLibTests/ConfigUtilityTests.cpp | 14 ++++++++++++++ 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/AspNetCoreModuleV2/AspNetCore/src/aspnetcore_shim_config.cpp b/src/AspNetCoreModuleV2/AspNetCore/src/aspnetcore_shim_config.cpp index 0cfc9b4133..9fb17be078 100644 --- a/src/AspNetCoreModuleV2/AspNetCore/src/aspnetcore_shim_config.cpp +++ b/src/AspNetCoreModuleV2/AspNetCore/src/aspnetcore_shim_config.cpp @@ -56,7 +56,10 @@ ASPNETCORE_SHIM_CONFIG::Populate( CS_ASPNETCORE_PROCESS_ARGUMENTS, &m_struArguments)); - RETURN_IF_FAILED(ConfigUtility::FindHandlerVersion(pAspNetCoreElement, &m_struHandlerVersion)); + if (m_hostingModel == HOSTING_OUT_PROCESS) + { + RETURN_IF_FAILED(ConfigUtility::FindHandlerVersion(pAspNetCoreElement, &m_struHandlerVersion)); + } return S_OK; } diff --git a/src/AspNetCoreModuleV2/CommonLib/config_utility.h b/src/AspNetCoreModuleV2/CommonLib/config_utility.h index 78efe9a04b..5585d14614 100644 --- a/src/AspNetCoreModuleV2/CommonLib/config_utility.h +++ b/src/AspNetCoreModuleV2/CommonLib/config_utility.h @@ -28,7 +28,12 @@ public: STRU strHandlerName; STRU strHandlerValue; - RETURN_IF_FAILED(GetElementChildByName(pElement, CS_ASPNETCORE_HANDLER_SETTINGS,&pHandlerSettings)); + // backwards complatibility with systems not having schema for handlerSettings + if (FAILED_LOG(GetElementChildByName(pElement, CS_ASPNETCORE_HANDLER_SETTINGS, &pHandlerSettings))) + { + return S_OK; + } + RETURN_IF_FAILED(pHandlerSettings->get_Collection(&pHandlerSettingsCollection)); RETURN_IF_FAILED(hr = FindFirstElement(pHandlerSettingsCollection, &index, &pHandlerVar)); diff --git a/src/AspNetCoreModuleV2/CommonLib/debugutil.cpp b/src/AspNetCoreModuleV2/CommonLib/debugutil.cpp index d3d6fa6b32..b7fff04a5c 100644 --- a/src/AspNetCoreModuleV2/CommonLib/debugutil.cpp +++ b/src/AspNetCoreModuleV2/CommonLib/debugutil.cpp @@ -67,19 +67,18 @@ DebugInitialize() try { - const auto debugOutputFile = Environment::ExpandEnvironmentVariables(L"%ASPNETCORE_MODULE_DEBUG_FILE%"); + auto debugOutputFile = Environment::ExpandEnvironmentVariables(L"%ASPNETCORE_MODULE_DEBUG_FILE%"); if (!debugOutputFile.empty()) { g_logFile = CreateFileW(debugOutputFile.c_str(), - FILE_GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, + (GENERIC_READ | GENERIC_WRITE), + (FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE), nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr ); - if (g_logFile != INVALID_HANDLE_VALUE) { InitializeSRWLock(&g_logFileLock); @@ -145,6 +144,7 @@ DebugPrint( SetFilePointer(g_logFile, 0, nullptr, FILE_END); WriteFile(g_logFile, strOutput.QueryStr(), strOutput.QueryCB(), &nBytesWritten, nullptr); + FlushFileBuffers(g_logFile); } } } diff --git a/src/AspNetCoreModuleV2/CommonLib/utility.cxx b/src/AspNetCoreModuleV2/CommonLib/utility.cxx index b98cc24359..a82a7d18b3 100644 --- a/src/AspNetCoreModuleV2/CommonLib/utility.cxx +++ b/src/AspNetCoreModuleV2/CommonLib/utility.cxx @@ -572,13 +572,7 @@ UTILITY::LogEvent( ); } - STACK_STRA(converted, 256); - if (converted.CopyW(pstrMsg)) - { - DebugPrintf( - dwEventInfoType == EVENTLOG_ERROR_TYPE ? ASPNETCORE_DEBUG_FLAG_ERROR : ASPNETCORE_DEBUG_FLAG_INFO, - "Event Log: %s", converted.QueryStr()); - } + WDebugPrintf(dwEventInfoType == EVENTLOG_ERROR_TYPE ? ASPNETCORE_DEBUG_FLAG_ERROR : ASPNETCORE_DEBUG_FLAG_INFO, L"Event Log: %s", pstrMsg); } VOID diff --git a/test/CommonLibTests/ConfigUtilityTests.cpp b/test/CommonLibTests/ConfigUtilityTests.cpp index 99ee323f43..dac87240e1 100644 --- a/test/CommonLibTests/ConfigUtilityTests.cpp +++ b/test/CommonLibTests/ConfigUtilityTests.cpp @@ -89,4 +89,18 @@ namespace ConfigUtilityTests EXPECT_EQ(hr, S_OK); EXPECT_STREQ(handlerVersion.QueryStr(), L"value2"); } + + TEST(ConfigUtilityTestSingle, IgnoresFailedGetElement) + { + STRU handlerVersion; + + auto element = std::make_unique>(); + ON_CALL(*element, GetElementByName(_, _)) + .WillByDefault(DoAll(testing::SetArgPointee<1>(nullptr), testing::Return(HRESULT_FROM_WIN32( ERROR_INVALID_INDEX )))); + + HRESULT hr = ConfigUtility::FindHandlerVersion(element.get(), &handlerVersion); + + EXPECT_EQ(hr, S_OK); + EXPECT_STREQ(handlerVersion.QueryStr(), L""); + } }