| #pragma once | 
 |  | 
 | #include <shadow.h> | 
 |  | 
 | #include <phosphor-logging/elog-errors.hpp> | 
 | #include <xyz/openbmc_project/Common/error.hpp> | 
 | namespace phosphor | 
 | { | 
 | namespace user | 
 | { | 
 | namespace shadow | 
 | { | 
 |  | 
 | using InternalFailure = | 
 |     sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure; | 
 | using namespace phosphor::logging; | 
 |  | 
 | /** @class Lock | 
 |  *  @brief Responsible for locking and unlocking /etc/shadow | 
 |  */ | 
 | class Lock | 
 | { | 
 |   public: | 
 |     Lock(const Lock&) = delete; | 
 |     Lock& operator=(const Lock&) = delete; | 
 |     Lock(Lock&&) = delete; | 
 |     Lock& operator=(Lock&&) = delete; | 
 |  | 
 |     /** @brief Default constructor that just locks the shadow file */ | 
 |     Lock() | 
 |     { | 
 |         if (!lckpwdf()) | 
 |         { | 
 |             log<level::ERR>("Locking Shadow failed"); | 
 |             elog<InternalFailure>(); | 
 |         } | 
 |     } | 
 |     ~Lock() | 
 |     { | 
 |         if (!ulckpwdf()) | 
 |         { | 
 |             log<level::ERR>("Un-Locking Shadow failed"); | 
 |             elog<InternalFailure>(); | 
 |         } | 
 |     } | 
 | }; | 
 |  | 
 | } // namespace shadow | 
 | } // namespace user | 
 | } // namespace phosphor |