Update old password loading loggic of SW backend 30/319630/1
authorDongsun Lee <ds73.lee@samsung.com>
Thu, 13 Feb 2025 23:50:40 +0000 (08:50 +0900)
committerDongsun Lee <ds73.lee@samsung.com>
Thu, 13 Feb 2025 23:50:40 +0000 (08:50 +0900)
Change-Id: Id8f7f94774b751c8426f74524a867468d4f43d0c

src/server/plugin/generic-backend/password-file-buffer.cpp
src/server/plugin/sw-backend/password-file.cpp
src/server/plugin/sw-backend/password-file.h

index a9e5d5a09cd494929438617b76608bb84814eb38..ee809cdb037366d03bef8636ac3880ea9e09a024 100644 (file)
@@ -73,20 +73,20 @@ void PasswordFileBuffer::Save(const std::string &path)
        std::ofstream file(path, std::ofstream::trunc);
 
        if (!file.good()) {
-               LogError("Error while opening file stream.");
+               LogError("Error while opening file stream. file=" << path);
                Throw(PasswordException::FStreamOpenError);
        }
 
        file.write(m_buffer.data(), m_buffer.size());
 
        if (!file) {
-               LogError("Failed to write data.");
+               LogError("Failed to write data. file=" << path);
                Throw(PasswordException::FStreamWriteError);
        }
 
        file.flush();
        if (::fsync(DPL::FstreamAccessors<std::ofstream>::GetFd(file)) != 0)
-               LogError("Failed to synchronize a file's state.");
+               LogError("Failed to synchronize a file's state. file=" << path);
        file.close();
 }
 
@@ -95,7 +95,7 @@ void PasswordFileBuffer::Load(const std::string &path)
        std::ifstream file(path, std::ifstream::binary);
 
        if (!file.good()) {
-               LogError("Error while opening file stream.");
+               LogError("Error while opening file stream. file=" << path);
                Throw(PasswordException::FStreamOpenError);
        }
 
@@ -105,7 +105,8 @@ void PasswordFileBuffer::Load(const std::string &path)
                                        std::istreambuf_iterator<char>());
 
        if (!file) {
-               LogError("Failed to read data. Failbit: " << file.fail() << ", Badbit: " << file.bad());
+               LogError("Failed to read data. Failbit: " << file.fail()
+                       << ", Badbit: " << file.bad() << ", file=" << path);
                Throw(PasswordException::FStreamReadError);
        }
 }
index 900904ad45a266dfddc54662738248d255b8bd93..ca6122848e05570f8efa1e1c1931ecb87538c710 100644 (file)
@@ -125,7 +125,7 @@ void PasswordFile::preparePwdFile()
        // check if password file exists
        if (!fileExists(pwdFile)) {
                // if old format file exist - load it
-               if (tryLoadMemoryFromOldFormatFile()) {
+               if (loadMemoryFromFile(oldVersionPwdFile)) {
                        // save in new format
                        writeMemoryToFile();
 
@@ -146,7 +146,7 @@ void PasswordFile::preparePwdFile()
                LogSecureDebug("PWD_DBG found " << m_user << " password file. Opening.");
 
                try {
-                       loadMemoryFromFile();
+                       loadMemoryFromFile(pwdFile);
                } catch (...) {
                        LogError("Invalid " << pwdFile << " file format");
                        resetState();
@@ -203,13 +203,19 @@ std::string PasswordFile::createDir(const std::string &dir, unsigned int user) c
 }
 
 void PasswordFile::writeMemoryToFile() const
+{
+       std::string pwdFile = createDir(RW_DATA_DIR, m_user) + PASSWORD_FILE;
+       writeMemoryToFile(pwdFile);
+}
+
+void PasswordFile::writeMemoryToFile(const std::string& passwdFilePath) const
 {
        PasswordFileBuffer pwdBuffer;
        LogSecureDebug("User: " << m_user << ", saving max_att: " << m_maxAttempt <<
-                                  ", history_size: " << m_maxHistorySize << ", m_expireTime: " <<
-                                  m_expireTime << ", m_expireTimeLeft: " << m_expireTimeLeft <<
-                                  ", isActive: " << m_passwordActive << ", isRcvActive: " <<
-                                  m_passwordRcvActive << ", m_passwordType: " << m_passwordType);
+               ", history_size: " << m_maxHistorySize << ", m_expireTime: " <<
+               m_expireTime << ", m_expireTimeLeft: " << m_expireTimeLeft <<
+               ", isActive: " << m_passwordActive << ", isRcvActive: " <<
+               m_passwordRcvActive << ", m_passwordType: " << m_passwordType);
        //serialize password attributes
        Serialization::Serialize(pwdBuffer, CURRENT_FILE_VERSION);
        Serialization::Serialize(pwdBuffer, m_maxAttempt);
@@ -221,53 +227,23 @@ void PasswordFile::writeMemoryToFile() const
        Serialization::Serialize(pwdBuffer, m_passwordCurrent);
        Serialization::Serialize(pwdBuffer, m_passwordHistory);
        Serialization::Serialize(pwdBuffer, m_passwordType);
-       std::string pwdFile = createDir(RW_DATA_DIR, m_user) + PASSWORD_FILE;
-       pwdBuffer.Save(pwdFile);
 
-       if (chmod(pwdFile.c_str(), FILE_MODE)) {
-               LogError("Failed to chmod for " << pwdFile << " Error: " << errnoToString());
+       pwdBuffer.Save(passwdFilePath);
+       if (chmod(passwdFilePath.c_str(), FILE_MODE)) {
+               LogError("Failed to chmod for " << passwdFilePath << " Error: " << errnoToString());
                Throw(PasswordException::ChmodError);
        }
 }
 
-void PasswordFile::loadMemoryFromFile()
+bool PasswordFile::loadMemoryFromFile(const std::string& passwdFilePath)
 {
-       PasswordFileBuffer pwdBuffer;
-       std::string pwdFile = createDir(RW_DATA_DIR, m_user) + PASSWORD_FILE;
-       pwdBuffer.Load(pwdFile);
-       unsigned int fileVersion = 0;
-       Deserialization::Deserialize(pwdBuffer, fileVersion);
-
-       if (fileVersion != CURRENT_FILE_VERSION)
-               Throw(PasswordException::FStreamReadError);
+       struct stat fileStat;
 
-       m_passwordHistory.clear();
-       Deserialization::Deserialize(pwdBuffer, m_maxAttempt);
-       Deserialization::Deserialize(pwdBuffer, m_maxHistorySize);
-       Deserialization::Deserialize(pwdBuffer, m_expireTime);
-       Deserialization::Deserialize(pwdBuffer, m_expireTimeLeft);
-       Deserialization::Deserialize(pwdBuffer, m_passwordRcvActive);
-       Deserialization::Deserialize(pwdBuffer, m_passwordActive);
-       Deserialization::Deserialize(pwdBuffer, m_passwordCurrent);
-       Deserialization::Deserialize(pwdBuffer, m_passwordHistory);
-       Deserialization::Deserialize(pwdBuffer, m_passwordType);
-       LogSecureDebug("User: " << m_user << ", loaded max_att: " << m_maxAttempt <<
-                                  ", history_size: " << m_maxHistorySize << ", m_expireTime: " <<
-                                  m_expireTime << ", m_expireTimeLeft: " << m_expireTimeLeft <<
-                                  ", isActive: " << m_passwordActive << ", isRcvActive: " <<
-                                  m_passwordRcvActive<< ", m_passwordType: " << m_passwordType);
-}
-
-bool PasswordFile::tryLoadMemoryFromOldFormatFile()
-{
-       struct stat oldFileStat;
-       std::string oldVersionPwdFile = createDir(RW_DATA_DIR, m_user) + OLD_VERSION_PASSWORD_FILE;
-
-       if (stat(oldVersionPwdFile.c_str(), &oldFileStat) != 0)
+       if (stat(passwdFilePath.c_str(), &fileStat) != 0)
                return false;
 
        PasswordFileBuffer pwdBuffer;
-       pwdBuffer.Load(oldVersionPwdFile);
+       pwdBuffer.Load(passwdFilePath);
        unsigned int fileVersion = 0;
        Deserialization::Deserialize(pwdBuffer, fileVersion);
 
@@ -284,6 +260,8 @@ bool PasswordFile::tryLoadMemoryFromOldFormatFile()
                m_expireTime = PASSWORD_INFINITE_EXPIRATION_DAYS;
                m_passwordRcvActive = false;
                m_passwordType = 0; // Normal
+               // update file to new format
+               writeMemoryToFile(passwdFilePath);
                break;
        case 4:
                Deserialization::Deserialize(pwdBuffer, m_maxAttempt);
@@ -300,6 +278,13 @@ bool PasswordFile::tryLoadMemoryFromOldFormatFile()
                LogError("Invaild password version: " << fileVersion);
                Throw(PasswordException::FStreamReadError);
        }
+
+       LogSecureDebug("loadMemoryFromFile: File=" << passwdFilePath <<
+                ":: User: " << m_user << ", loaded max_att: " << m_maxAttempt <<
+               ", history_size: " << m_maxHistorySize << ", m_expireTime: " <<
+               m_expireTime << ", m_expireTimeLeft: " << m_expireTimeLeft <<
+               ", isActive: " << m_passwordActive << ", isRcvActive: " <<
+               m_passwordRcvActive<< ", m_passwordType: " << m_passwordType);
        return true;
 }
 
index 4a5a1f8da45e7d1680d2ed2985191f24b07ed190..323b8ab3e40f9341596bb38e80fe72079af4ca1e 100644 (file)
@@ -96,8 +96,8 @@ private:
        typedef std::chrono::duration<double> TimeDiff;
        typedef std::chrono::time_point<ClockType, TimeDiff> TimePoint;
 
-       void loadMemoryFromFile();
-       bool tryLoadMemoryFromOldFormatFile();
+       bool loadMemoryFromFile(const std::string &passwdFilePath);
+       void writeMemoryToFile(const std::string &passwdFilePath) const;
 
        void resetTimer();
        void preparePwdFile();