void DboxMain::OnTrayRunCommand(UINT nID) { ASSERT((nID >= ID_MENUITEM_TRAYRUNCMD1) && (nID <= ID_MENUITEM_TRAYRUNCMDMAX)); CItemData ci; if (!GetRUEntry(m_RUEList, nID - ID_MENUITEM_TRAYRUNCMD1, ci)) return; if (ci.IsShortcut()) { if (!SafeGetBaseEntry(ci, ci)) return; // fail safely in release } StringX cs_URL = ci.GetURL(); StringX::size_type ipos; ipos = cs_URL.find(L"[alt]"); if (ipos != StringX::npos) cs_URL.replace(ipos, 5, L""); ipos = cs_URL.find(L"[ssh]"); if (ipos != StringX::npos) cs_URL.replace(ipos, 5, L""); ipos = cs_URL.find(L"{alt}"); if (ipos != StringX::npos) cs_URL.replace(ipos, 5, L""); SetClipboardData(cs_URL); UpdateLastClipboardAction(CItemData::URL); UpdateAccessTime(ci.GetUUID()); }
void DboxMain::OnTraySendEmail(UINT nID) { ASSERT((nID >= ID_MENUITEM_TRAYSENDEMAIL1) && (nID <= ID_MENUITEM_TRAYSENDEMAILMAX)); CItemData ci; if (!GetRUEntry(m_RUEList, nID - ID_MENUITEM_TRAYSENDEMAIL1, ci)) return; if (ci.IsShortcut()) { if (!SafeGetBaseEntry(ci, ci)) return; // fail safely in release } CString cs_command; if (!ci.IsEmailEmpty()) { cs_command = L"mailto:"; cs_command += ci.GetEmail().c_str(); } else { cs_command = ci.GetURL().c_str(); } if (!cs_command.IsEmpty()) { std::vector<size_t> vactionverboffsets; LaunchBrowser(cs_command, L"", vactionverboffsets, false); UpdateAccessTime(ci.GetUUID()); } }
std::shared_ptr<FileSystem::Handle> RootFileSystem::DirectoryNode::Open(std::shared_ptr<FileSystem::Mount> mount, FileSystem::HandleAccess access, FileSystem::HandleFlags flags) { _ASSERTE(std::dynamic_pointer_cast<class Mount>(mount)); // Directory node handles must always be opened in read-only mode if(access != FileSystem::HandleAccess::ReadOnly) throw LinuxException(LINUX_EISDIR); // Check for flags that are incompatible with opening a directory file system object if(flags & (FileSystem::HandleFlags::Append | FileSystem::HandleFlags::Direct)) throw LinuxException(LINUX_EINVAL); // Read access to the directory node is required to open a handle against it sync::critical_section::scoped_lock cs{ m_cs }; FilePermission::Demand(FilePermission::Read, m_uid, m_gid, m_mode); // Construct the DirectoryHandle instance that will be returned to the caller auto handle = std::make_shared<DirectoryHandle>(m_fs, access, flags); // Place a weak reference to the handle into the tracking collection before returning it sync::critical_section::scoped_lock critsec{ m_fs->m_cs }; if(!m_fs->m_handles.emplace(handle.get(), handle).second) throw LinuxException(LINUX_ENOMEM); UpdateAccessTime(mount); return handle; }
std::weak_ptr<Page> PageManager::AllocatePage() { if (MAX_PAGE_CACHE_SIZE == m_pageCache.size()) PopLRUPage(); auto pageID = m_heapFile.GetFreePageID(); auto page = std::make_shared<Page>(pageID); m_pageCache[pageID] = page; UpdateAccessTime(page); return page; }
void DboxMain::OnTrayAutoType(UINT nID) { ASSERT((nID >= ID_MENUITEM_TRAYAUTOTYPE1) && (nID <= ID_MENUITEM_TRAYAUTOTYPEMAX)); CItemData ci; if (!GetRUEntry(m_RUEList, nID - ID_MENUITEM_TRAYAUTOTYPE1, ci)) return; m_bInAT = true; AutoType(ci); UpdateAccessTime(ci.GetUUID()); m_bInAT = false; }
void DboxMain::OnTrayCopyNotes(UINT nID) { ASSERT((nID >= ID_MENUITEM_TRAYCOPYNOTES1) && (nID <= ID_MENUITEM_TRAYCOPYNOTESMAX)); CItemData ci; if (!GetRUEntry(m_RUEList, nID - ID_MENUITEM_TRAYCOPYNOTES1, ci)) return; if (ci.IsShortcut()) if (!SafeGetBaseEntry(ci, ci)) return; SetClipboardData(ci.GetNotes()); UpdateLastClipboardAction(CItemData::NOTES); UpdateAccessTime(ci.GetUUID()); }
std::weak_ptr<Page> PageManager::GetPage(PageID id) { Log(LogType::Debug) << "Request for page with id = " << id << std::endl; auto it = m_pageCache.find(id); if (m_pageCache.end() == it) { if (MAX_PAGE_CACHE_SIZE == m_pageCache.size()) PopLRUPage(); auto page = std::make_shared<Page>(id); m_heapFile.ReadPage(page); it = m_pageCache.emplace(id, page).first; } auto page = it->second; UpdateAccessTime(page); return page; }
void DboxMain::OnTrayCopyPassword(UINT nID) { ASSERT((nID >= ID_MENUITEM_TRAYCOPYPASSWORD1) && (nID <= ID_MENUITEM_TRAYCOPYPASSWORDMAX)); CItemData ci; if (!GetRUEntry(m_RUEList, nID - ID_MENUITEM_TRAYCOPYPASSWORD1, ci)) return; if (ci.IsDependent()) { if (!SafeGetBaseEntry(ci, ci)) return; // fail safely in release } const StringX cs_password = ci.GetPassword(); SetClipboardData(cs_password); UpdateLastClipboardAction(CItemData::PASSWORD); UpdateAccessTime(ci.GetUUID()); }
void DboxMain::OnTrayCopyUsername(UINT nID) { ASSERT((nID >= ID_MENUITEM_TRAYCOPYUSERNAME1) && (nID <= ID_MENUITEM_TRAYCOPYUSERNAMEMAX)); CItemData ci; if (!GetRUEntry(m_RUEList, nID - ID_MENUITEM_TRAYCOPYUSERNAME1, ci)) return; if (ci.IsShortcut()) { if (!SafeGetBaseEntry(ci, ci)) return; // fail safely in release } const StringX cs_username = ci.GetUser(); SetClipboardData(cs_username); UpdateLastClipboardAction(CItemData::USER); UpdateAccessTime(ci.GetUUID()); }
void DboxMain::OnTrayCopyEmail(UINT nID) { ASSERT((nID >= ID_MENUITEM_TRAYCOPYEMAIL1) && (nID <= ID_MENUITEM_TRAYCOPYEMAILMAX)); CItemData ci; if (!m_RUEList.GetPWEntry(nID - ID_MENUITEM_TRAYCOPYEMAIL1, ci)) return; if (ci.IsShortcut()) { if (!SafeGetBaseEntry(ci, ci)) return; // fail safely in release } const StringX cs_email = ci.GetEmail(); SetClipboardData(cs_email); UpdateLastClipboardAction(CItemData::EMAIL); UpdateAccessTime(ci.GetUUID()); }
void DboxMain::OnTrayBrowse(UINT nID) { ASSERT(((nID >= ID_MENUITEM_TRAYBROWSE1) && (nID <= ID_MENUITEM_TRAYBROWSEMAX)) || ((nID >= ID_MENUITEM_TRAYBROWSEPLUS1) && (nID <= ID_MENUITEM_TRAYBROWSEPLUSMAX))); CItemData ci; const bool bDoAutotype = (nID >= ID_MENUITEM_TRAYBROWSEPLUS1) && (nID <= ID_MENUITEM_TRAYBROWSEPLUSMAX); if (!bDoAutotype) { if (!GetRUEntry(m_RUEList, nID - ID_MENUITEM_TRAYBROWSE1, ci)) return; } else { if (!GetRUEntry(m_RUEList, nID - ID_MENUITEM_TRAYBROWSEPLUS1, ci)) return; } if (ci.IsShortcut()) { if (!SafeGetBaseEntry(ci, ci)) return; } if (!ci.IsURLEmpty()) { std::vector<size_t> vactionverboffsets; StringX sxAutotype = PWSAuxParse::GetAutoTypeString(ci.GetAutoType(), ci.GetGroup(), ci.GetTitle(), ci.GetUser(), ci.GetPassword(), ci.GetPreviousPassword(), ci.GetNotes(), ci.GetURL(), ci.GetEmail(), vactionverboffsets); LaunchBrowser(ci.GetURL().c_str(), sxAutotype, vactionverboffsets, bDoAutotype); if (PWSprefs::GetInstance()->GetPref(PWSprefs::CopyPasswordWhenBrowseToURL)) { SetClipboardData(ci.GetPassword()); UpdateLastClipboardAction(CItemData::PASSWORD); } } UpdateAccessTime(ci.GetUUID()); }