constexpr time_t PASSWORD_INFINITE_EXPIRATION_TIME = std::numeric_limits<time_t>::max();
struct IPasswordFile {
+ IPasswordFile() = default;
virtual ~IPasswordFile() = default;
+ IPasswordFile(const IPasswordFile&) = delete;
+ IPasswordFile& operator=(const IPasswordFile&) = delete;
+
+ IPasswordFile(IPasswordFile&&) = delete;
+ IPasswordFile& operator=(IPasswordFile&&) = delete;
+
virtual void writeMemoryToFile() const = 0;
virtual void writeAttemptToFile() const = 0;
class PasswordFile : public IPasswordFile {
public:
PasswordFile(unsigned int user);
+ ~PasswordFile() = default;
+
+ PasswordFile(const PasswordFile&) = delete;
+ PasswordFile& operator=(const PasswordFile&) = delete;
+
+ PasswordFile(PasswordFile&&) = delete;
+ PasswordFile& operator=(PasswordFile&&) = delete;
void writeMemoryToFile() const override;
void writeAttemptToFile() const override;
public:
PasswordFile(unsigned int user);
+ PasswordFile(const PasswordFile&) = delete;
+ PasswordFile& operator=(const PasswordFile&) = delete;
+
+ PasswordFile(PasswordFile&&) = delete;
+ PasswordFile& operator=(PasswordFile&&) = delete;
+
void writeMemoryToFile() const override;
void writeAttemptToFile() const override;
namespace AuthPasswd {
class PasswordManager final {
public:
- typedef std::map<unsigned int, std::shared_ptr<IPasswordFile>> PasswordFileMap;
+ typedef std::map<unsigned int, IPasswordFile*> PasswordFileMap;
PasswordManager();
- ~PasswordManager() = default;
+ ~PasswordManager();
//checking functions
//no const in checkPassword, attempts are update
m_pluginManager.loadFactory("PasswordFileFactory", m_factory);
}
+PasswordManager::~PasswordManager()
+{
+ PasswordFileMap::iterator iter;
+ for (iter = m_pwdFile.begin(); iter != m_pwdFile.end(); iter++) {
+ if (iter->second != nullptr)
+ delete iter->second;
+ }
+}
+
void PasswordManager::addPassword(unsigned int user)
{
- std::shared_ptr<IPasswordFile> passwordFile((*m_factory)(user));
- m_pwdFile.insert(PasswordFileMap::value_type(user, passwordFile));
+ IPasswordFile* passwordFile = (*m_factory)(user);
+ m_pwdFile[user] = passwordFile;
}
void PasswordManager::removePassword(unsigned int user)