1 #pragma once 2 3 #include <shadow.h> 4 5 #include <phosphor-logging/elog-errors.hpp> 6 #include <xyz/openbmc_project/Common/error.hpp> 7 namespace phosphor 8 { 9 namespace user 10 { 11 namespace shadow 12 { 13 14 using InternalFailure = 15 sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure; 16 using namespace phosphor::logging; 17 18 /** @class Lock 19 * @brief Responsible for locking and unlocking /etc/shadow 20 */ 21 class Lock 22 { 23 public: 24 Lock(const Lock&) = delete; 25 Lock& operator=(const Lock&) = delete; 26 Lock(Lock&&) = delete; 27 Lock& operator=(Lock&&) = delete; 28 29 /** @brief Default constructor that just locks the shadow file */ 30 Lock() 31 { 32 if (!lckpwdf()) 33 { 34 log<level::ERR>("Locking Shadow failed"); 35 elog<InternalFailure>(); 36 } 37 } 38 ~Lock() 39 { 40 if (!ulckpwdf()) 41 { 42 log<level::ERR>("Un-Locking Shadow failed"); 43 elog<InternalFailure>(); 44 } 45 } 46 }; 47 48 } // namespace shadow 49 } // namespace user 50 } // namespace phosphor 51