diff options
-rw-r--r-- | special-mode-mgr/CMakeLists.txt | 10 | ||||
-rw-r--r-- | special-mode-mgr/include/specialmodemgr.hpp | 7 | ||||
-rw-r--r-- | special-mode-mgr/src/specialmodemgr.cpp | 20 |
3 files changed, 36 insertions, 1 deletions
diff --git a/special-mode-mgr/CMakeLists.txt b/special-mode-mgr/CMakeLists.txt index cefe6ff..ea54904 100644 --- a/special-mode-mgr/CMakeLists.txt +++ b/special-mode-mgr/CMakeLists.txt @@ -37,6 +37,16 @@ target_link_libraries(${PROJECT_NAME} phosphor_logging) link_directories(${EXTERNAL_INSTALL_LOCATION}/lib) +option( + BMC_VALIDATION_UNSECURE_FEATURE + "Enables unsecure features required by validation. Note: must + be turned off for production images." + OFF) +target_compile_definitions(${PROJECT_NAME} + PRIVATE + $<$<BOOL:${BMC_VALIDATION_UNSECURE_FEATURE}>: + -DBMC_VALIDATION_UNSECURE_FEATURE>) + set(SERVICE_FILES ${PROJECT_SOURCE_DIR}/specialmodemgr.service) install(TARGETS ${PROJECT_NAME} DESTINATION bin) diff --git a/special-mode-mgr/include/specialmodemgr.hpp b/special-mode-mgr/include/specialmodemgr.hpp index 2f0183b..9146b01 100644 --- a/special-mode-mgr/include/specialmodemgr.hpp +++ b/special-mode-mgr/include/specialmodemgr.hpp @@ -18,6 +18,7 @@ #include <sdbusplus/asio/object_server.hpp> #include <chrono> +#include <filesystem> static constexpr const char* strSpecialMode = "SpecialMode"; @@ -25,7 +26,10 @@ enum SpecialMode : uint8_t { none = 0, manufacturingExpired = 1, - manufacturingMode = 2 + manufacturingMode = 2, +#ifdef BMC_VALIDATION_UNSECURE_FEATURE + validationUnsecure = 3, +#endif }; class SpecialModeMgr @@ -38,6 +42,7 @@ class SpecialModeMgr std::unique_ptr<boost::asio::steady_timer> timer = nullptr; std::unique_ptr<sdbusplus::bus::match::match> intfAddMatchRule = nullptr; std::unique_ptr<sdbusplus::bus::match::match> propUpdMatchRule = nullptr; + std::filesystem::path validationModeFile = "/var/validation_unsecure_mode"; void addSpecialModeProperty(); void checkAndAddSpecialModeProperty(const std::string& provMode); void updateTimer(int countInSeconds); diff --git a/special-mode-mgr/src/specialmodemgr.cpp b/special-mode-mgr/src/specialmodemgr.cpp index f1ed722..44f12cc 100644 --- a/special-mode-mgr/src/specialmodemgr.cpp +++ b/special-mode-mgr/src/specialmodemgr.cpp @@ -50,6 +50,15 @@ SpecialModeMgr::SpecialModeMgr( timer(std::make_unique<boost::asio::steady_timer>(io)) { +#ifdef BMC_VALIDATION_UNSECURE_FEATURE + if (std::filesystem::exists(validationModeFile)) + { + specialMode = validationUnsecure; + addSpecialModeProperty(); + return; + } +#endif + // Following condition must match to indicate specialMode. // Mark the mode as None for any failure. // 1. U-Boot detected power button press & indicated "special=mfg" @@ -195,6 +204,17 @@ void SpecialModeMgr::addSpecialModeProperty() strSpecialMode, specialMode, // Ignore set [this](const uint8_t& req, uint8_t& propertyValue) { +#ifdef BMC_VALIDATION_UNSECURE_FEATURE + if ((req == validationUnsecure) && (specialMode != req)) + { + std::ofstream output(validationModeFile); + output.close(); + specialMode = req; + propertyValue = req; + return 1; + } +#endif + if (req == manufacturingExpired && specialMode != req) { specialMode = req; |