TEST_F(FileV4Test, CoreRWTest) { PWScore core; const StringX passkey(L"3rdMambo"); fullItem.SetAttUUID(attItem.GetUUID()); EXPECT_EQ(0U, attItem.GetRefcount()); core.SetPassKey(passkey); core.Execute(AddEntryCommand::Create(&core, fullItem, pws_os::CUUID::NullUUID(), &attItem)); EXPECT_TRUE(core.HasAtt(attItem.GetUUID())); EXPECT_EQ(1U, core.GetAtt(attItem.GetUUID()).GetRefcount()); EXPECT_EQ(PWSfile::SUCCESS, core.WriteFile(fname.c_str(), PWSfile::V40)); core.ClearDBData(); EXPECT_EQ(PWSfile::FAILURE, core.ReadFile(fname.c_str(), L"WrongPassword", true)); EXPECT_EQ(PWSfile::SUCCESS, core.ReadFile(fname.c_str(), passkey, true)); ASSERT_EQ(1, core.GetNumEntries()); ASSERT_EQ(1, core.GetNumAtts()); ASSERT_TRUE(core.Find(fullItem.GetUUID()) != core.GetEntryEndIter()); const CItemData readFullItem = core.GetEntry(core.Find(fullItem.GetUUID())); EXPECT_TRUE(readFullItem.HasAttRef()); EXPECT_EQ(attItem.GetUUID(), readFullItem.GetAttUUID()); EXPECT_EQ(fullItem, readFullItem); ASSERT_TRUE(core.HasAtt(attItem.GetUUID())); EXPECT_EQ(1U, core.GetAtt(attItem.GetUUID()).GetRefcount()); core.Execute(DeleteEntryCommand::Create(&core, readFullItem)); ASSERT_EQ(0, core.GetNumEntries()); ASSERT_EQ(0, core.GetNumAtts()); // Get core to delete any existing commands core.ClearCommands(); }
int ReadCore(PWScore& othercore, const wxString& file, const StringX& combination, bool showMsgbox /*= true*/, wxWindow* msgboxParent /*= NULL*/) { othercore.ClearData(); // Reading a new file changes the preferences! const StringX sxSavePrefString(PWSprefs::GetInstance()->Store()); const bool bDBPrefsChanged = PWSprefs::GetInstance()->IsDBprefsChanged(); StringX dbpath(tostringx(file)); int rc = othercore.ReadFile(dbpath, combination); // Reset database preferences - first to defaults then add saved changes! PWSprefs::GetInstance()->Load(sxSavePrefString); PWSprefs::GetInstance()->SetDBprefsChanged(bDBPrefsChanged); switch (rc) { case PWScore::SUCCESS: othercore.SetCurFile(tostringx(file)); break; case PWScore::CANT_OPEN_FILE: if (showMsgbox) wxMessageBox(wxString(file) << _("\n\nCould not open file for reading!"), _("File Read Error"), wxOK | wxICON_ERROR, msgboxParent ); break; case PWScore::BAD_DIGEST: if (showMsgbox && wxMessageBox(wxString(file) << _("\n\nFile corrupt or truncated!\nData may have been lost or modified.\nContinue anyway?"), _("File Read Error"), wxYES_NO | wxICON_QUESTION, msgboxParent) == wxYES) { rc = PWScore::SUCCESS; } break; #ifdef DEMO case PWScore::LIMIT_REACHED: if( showMsgbox) wxMessageBox(wxString::Format(_("This version of PasswordSafe does not support more than %d entries in a database.\nTo get an unlimited version for the U3 platform, please visit http://software.u3.com\nNote: Saving this database will result in the removal of unread entries!"), MAXDEMO), _("Trial Version Limitation"), wxOK | wxICON_WARNING, msgboxParent); break; #endif default: if (showMsgbox) wxMessageBox( wxString(file) << _("\n\nUnknown error"), _("File Read Error"), wxOK | wxICON_ERROR, msgboxParent); break; } return rc; }
int ReadCore(PWScore& othercore, const wxString& file, const StringX& combination, bool showMsgbox /*= true*/, wxWindow* msgboxParent /*= NULL*/, bool setupCopy /*= false*/) { othercore.ClearData(); StringX dbpath(tostringx(file)); int rc = othercore.ReadFile(dbpath, combination); if (setupCopy) PWSprefs::GetInstance()->SetupCopyPrefs(); switch (rc) { case PWScore::SUCCESS: othercore.SetCurFile(tostringx(file)); break; case PWScore::CANT_OPEN_FILE: if (showMsgbox) wxMessageBox(wxString(file) << wxT("\n\n") << _("Could not open file for reading!"), _("File Read Error"), wxOK | wxICON_ERROR, msgboxParent ); break; case PWScore::BAD_DIGEST: if (showMsgbox && wxMessageBox(wxString(file) << wxT("\n\n") << _("File corrupt or truncated!\nData may have been lost or modified.\nContinue anyway?"), _("File Read Error"), wxYES_NO | wxICON_QUESTION, msgboxParent) == wxYES) { rc = PWScore::SUCCESS; } break; default: if (showMsgbox) wxMessageBox( wxString(file) << wxT("\n\n") << _("Unknown error"), _("File Read Error"), wxOK | wxICON_ERROR, msgboxParent); break; } return rc; }