UUIDVector OTSDPAttribute::getAllUUIDs() { UUIDVector uuids; if (getType() == UUID) { uuids.resize( uuids.size()+1 ); uuids[uuids.size()-1] = getUUID(); } else { AttributeVector * subAttributes = 0 ; if (getType() == SEQUENCE) { subAttributes = getSequence(); } else if (getType() == ALTERNATIVE) { subAttributes = getAlternative(); } if (!subAttributes) return 0; int os; for( unsigned int i = 0; i < subAttributes->count(); i++ ) { UUIDVector subUUIDs = (*subAttributes)[i]->getAllUUIDs(); os = uuids.size(); uuids.resize( uuids.size()+subUUIDs.count() ); for( unsigned int k = 0; k < subUUIDs.count(); k++ ) { uuids[os + k] = subUUIDs[k]; } } } return uuids; }
void CAddEdit_PropertySheet::SetupInitialValues() { // Basic Data m_AEMD.entrysize = m_AEMD.pci->GetSize(); m_AEMD.entry_uuid = m_AEMD.pci->GetUUID(); m_AEMD.group = m_AEMD.pci->GetGroup(); m_AEMD.title = m_AEMD.pci->GetTitle(); m_AEMD.username = m_AEMD.pci->GetUser(); m_AEMD.realpassword = m_AEMD.oldRealPassword = m_AEMD.pci->GetPassword(); m_AEMD.realnotes = m_AEMD.originalrealnotesTRC = m_AEMD.pci->GetNotes(); m_AEMD.URL = m_AEMD.pci->GetURL(); m_AEMD.email = m_AEMD.pci->GetEmail(); m_AEMD.symbols = m_AEMD.oldsymbols = m_AEMD.pci->GetSymbols(); m_AEMD.ioldownsymbols = m_AEMD.symbols.IsEmpty() == TRUE ? DEFAULT_SYMBOLS : OWN_SYMBOLS; m_AEMD.iownsymbols = m_AEMD.ioldownsymbols; m_AEMD.pci->GetProtected(m_AEMD.ucprotected); if (m_AEMD.realnotes.GetLength() > MAXTEXTCHARS) { // Limit the Notes field to what can be displayed m_AEMD.realnotes = m_AEMD.realnotes.Left(MAXTEXTCHARS); m_AEMD.originalrealnotesTRC = m_AEMD.realnotes; CGeneralMsgBox gmb; CString cs_text, cs_title(MAKEINTRESOURCE(IDS_WARNINGTEXTLENGTH)); cs_text.Format(IDS_TRUNCATETEXT, MAXTEXTCHARS); gmb.MessageBox(cs_text, cs_title, MB_OK | MB_ICONEXCLAMATION); } // Entry type initialisation m_AEMD.original_entrytype = m_AEMD.pci->GetEntryType(); const CItemData *pciA(m_AEMD.pci); if (m_AEMD.pci->IsAlias()) { pciA = m_AEMD.pcore->GetBaseEntry(m_AEMD.pci); if (pciA == NULL) { CString err(MAKEINTRESOURCE(IDS_ABASE_MISSING)); throw err; } } // Additional data m_AEMD.autotype = m_AEMD.pci->GetAutoType(); m_AEMD.runcommand = m_AEMD.pci->GetRunCommand(); m_AEMD.pci->GetDCA(m_AEMD.DCA); m_AEMD.oldDCA = m_AEMD.DCA; m_AEMD.pci->GetShiftDCA(m_AEMD.ShiftDCA); m_AEMD.oldShiftDCA = m_AEMD.ShiftDCA; m_AEMD.pci->GetKBShortcut(m_AEMD.KBShortcut); m_AEMD.oldKBShortcut = m_AEMD.KBShortcut; // Date Time fields m_AEMD.locCTime = m_AEMD.pci->GetCTimeL(); if (m_AEMD.locCTime.IsEmpty()) m_AEMD.locCTime.LoadString(IDS_NA); m_AEMD.locATime = m_AEMD.pci->GetATimeL(); if (m_AEMD.locATime.IsEmpty()) m_AEMD.locATime.LoadString(IDS_NA); m_AEMD.locRMTime = m_AEMD.pci->GetRMTimeL(); if (m_AEMD.locRMTime.IsEmpty()) m_AEMD.locRMTime = m_AEMD.locCTime; m_AEMD.locPMTime = m_AEMD.pci->GetPMTimeL(); if (m_AEMD.locPMTime.IsEmpty()) m_AEMD.locPMTime = m_AEMD.locCTime; if (!m_AEMD.locPMTime.IsEmpty()) // ??? always true ??? m_AEMD.pci->GetPMTime(m_AEMD.tttCPMTime); if ((long)m_AEMD.tttCPMTime == 0L) // if never changed - try creation date m_AEMD.pci->GetCTime(m_AEMD.tttCPMTime); // Note different pci depending on if Alias m_AEMD.locXTime = pciA->GetXTimeL(); if (m_AEMD.locXTime.IsEmpty()) { m_AEMD.locXTime.LoadString(IDS_NEVER); m_AEMD.tttXTime = 0; } else { pciA->GetXTime(m_AEMD.tttXTime); } m_AEMD.oldlocXTime = m_AEMD.locXTime; // Note different pci depending on if Alias pciA->GetXTimeInt(m_AEMD.XTimeInt); m_AEMD.oldXTimeInt = m_AEMD.XTimeInt; // PWHistory fields // Note different pci depending on if Alias size_t num_err; m_AEMD.PWHistory = pciA->GetPWHistory(); BOOL HasHistory = CreatePWHistoryList(m_AEMD.PWHistory, m_AEMD.MaxPWHistory, num_err, m_AEMD.pwhistlist, PWSUtil::TMC_EXPORT_IMPORT) ? TRUE : FALSE; m_AEMD.oldNumPWHistory = m_AEMD.NumPWHistory = m_AEMD.pwhistlist.size(); m_AEMD.oldSavePWHistory = m_AEMD.SavePWHistory = HasHistory; if (m_AEMD.MaxPWHistory == 0) m_AEMD.MaxPWHistory = PWSprefs::GetInstance()-> GetPref(PWSprefs::NumPWHistoryDefault); // PWPolicy fields // Note different pci depending on if Alias pciA->GetPWPolicy(m_AEMD.pwp); m_AEMD.policyname = m_AEMD.oldpolicyname = pciA->GetPolicyName(); if (!m_AEMD.policyname.IsEmpty()) m_AEMD.ipolicy = NAMED_POLICY; else if (pciA->GetPWPolicy().empty()) m_AEMD.ipolicy = DEFAULT_POLICY; else m_AEMD.ipolicy = SPECIFIC_POLICY; m_AEMD.oldipolicy = m_AEMD.ipolicy; if (m_AEMD.ipolicy == DEFAULT_POLICY) { m_AEMD.pwp = m_AEMD.default_pwp; } m_AEMD.oldpwp = m_AEMD.pwp; // Set up dependents pws_os::CUUID original_base_uuid(pws_os::CUUID::NullUUID()); CItemData::EntryType entrytype = m_AEMD.pci_original->GetEntryType(); m_AEMD.num_dependents = 0; pws_os::CUUID original_uuid = m_AEMD.pci_original->GetUUID(); // Edit doesn't change this! if (m_AEMD.pci_original->IsBase()) { UUIDVector dependentslist; StringX csDependents(L""); m_AEMD.pcore->GetAllDependentEntries(original_uuid, dependentslist, m_AEMD.pci_original->IsAliasBase() ? CItemData::ET_ALIAS : CItemData::ET_SHORTCUT); size_t num_dependents = dependentslist.size(); if (num_dependents > 0) { m_AEMD.pcore->SortDependents(dependentslist, csDependents); } m_AEMD.num_dependents = (int)num_dependents; m_AEMD.original_entrytype = entrytype; m_AEMD.dependents = CSecString(csDependents); dependentslist.clear(); } else if (m_AEMD.pci_original->IsAlias()) { // Get corresponding base entry const CItemData *pbci = m_AEMD.pcore->GetBaseEntry(m_AEMD.pci_original); ASSERT(pbci != NULL); if (pbci != NULL) { original_base_uuid = pbci->GetUUID(); m_AEMD.base_uuid = original_base_uuid; CSecString cs_base = L"[" + pbci->GetGroup() + L":" + pbci->GetTitle() + L":" + pbci->GetUser() + L"]"; m_AEMD.base = cs_base; m_AEMD.original_entrytype = CItemData::ET_ALIAS; } } // IsAlias // Attachment if (m_AEMD.pci->HasAttRef()) { ASSERT(m_AEMD.pcore->HasAtt(m_AEMD.pci->GetAttUUID())); m_AEMD.oldattachment = m_AEMD.attachment = m_AEMD.pcore->GetAtt(m_AEMD.pci->GetAttUUID()); } }
int PWScore::MergeDependents(PWScore *pothercore, MultiCommands *pmulticmds, uuid_array_t &base_uuid, uuid_array_t &new_base_uuid, const bool bTitleRenamed, stringT &str_timestring, const CItemData::EntryType et, std::vector<StringX> &vs_added) { UUIDVector dependentslist; UUIDVectorIter paiter; ItemListIter iter; ItemListConstIter foundPos; CItemData ci_temp; int numadded(0); StringX sx_merged; LoadAString(sx_merged, IDSC_MERGED); // Get all the dependents pothercore->GetAllDependentEntries(base_uuid, dependentslist, et); for (paiter = dependentslist.begin(); paiter != dependentslist.end(); paiter++) { iter = pothercore->Find(*paiter); if (iter == pothercore->GetEntryEndIter()) continue; CItemData *pci = &iter->second; ci_temp = (*pci); if (Find(*paiter) != GetEntryEndIter()) { ci_temp.CreateUUID(); } // If the base title was renamed - we should automatically rename any dependent. // If we didn't, we still need to check uniqueness! StringX sx_newTitle = ci_temp.GetTitle(); if (bTitleRenamed) { StringX sx_otherTitle(sx_newTitle); Format(sx_newTitle, L"%ls%ls%ls", sx_otherTitle.c_str(), sx_merged.c_str(), str_timestring.c_str()); ci_temp.SetTitle(sx_newTitle); } // Check this is unique - if not - don't add this one! - its only an alias/shortcut! // We can't keep trying for uniqueness after adding a timestamp! foundPos = Find(ci_temp.GetGroup(), sx_newTitle, ci_temp.GetUser()); if (foundPos != GetEntryEndIter()) continue; Command *pcmd1 = AddEntryCommand::Create(this, ci_temp, new_base_uuid); pcmd1->SetNoGUINotify(); pmulticmds->Add(pcmd1); if (et == CItemData::ET_ALIAS) { ci_temp.SetPassword(_T("[Alias]")); ci_temp.SetAlias(); } else if (et == CItemData::ET_SHORTCUT) { ci_temp.SetPassword(_T("[Shortcut]")); ci_temp.SetShortcut(); } else ASSERT(0); StringX sx_added; Format(sx_added, GROUPTITLEUSERINCHEVRONS, ci_temp.GetGroup().c_str(), ci_temp.GetTitle().c_str(), ci_temp.GetUser().c_str()); vs_added.push_back(sx_added); numadded++; } return numadded; }