bool NameChanger::RenameDomain(const String& oldDomainName, boost::shared_ptr<Domain> pDomain, String &errorMessage) { const String& newDomainName = pDomain->GetName(); if (!_RenameDomainDataDirectory(oldDomainName, pDomain->GetName(), errorMessage)) return false; // Update accounts... std::vector<boost::shared_ptr<Account> > vecAccounts = pDomain->GetAccounts()->GetVector(); std::vector<boost::shared_ptr<Account> >::iterator iterAccount = vecAccounts.begin(); std::vector<boost::shared_ptr<Account> >::iterator iterAccountEnd = vecAccounts.end(); for (; iterAccount != iterAccountEnd; iterAccount++) { boost::shared_ptr<Account> pAccount = (*iterAccount); String sAddress = pAccount->GetAddress(); _UpdateDomainName(sAddress, oldDomainName, newDomainName); pAccount->SetAddress(sAddress); String currentVal = pAccount->GetForwardAddress(); if (_UpdateDomainName(currentVal, oldDomainName, newDomainName)) pAccount->SetForwardAddress(currentVal); PersistentAccount::SaveObject(pAccount); } // Update aliases... std::vector<boost::shared_ptr<Alias> > vecAliases = pDomain->GetAliases()->GetVector(); std::vector<boost::shared_ptr<Alias> >::iterator iterAlias = vecAliases.begin(); std::vector<boost::shared_ptr<Alias> >::iterator iterAliasEnd = vecAliases.end(); for (; iterAlias != iterAliasEnd; iterAlias++) { boost::shared_ptr<Alias> pAlias = (*iterAlias); String sAddress = pAlias->GetName(); _UpdateDomainName(sAddress, oldDomainName, newDomainName); pAlias->SetName(sAddress); String aliasValue = pAlias->GetValue(); if (_UpdateDomainName(aliasValue, oldDomainName, newDomainName)) pAlias->SetValue(aliasValue); PersistentAlias::SaveObject(pAlias); } // Update lists... std::vector<boost::shared_ptr<DistributionList> > vecLists = pDomain->GetDistributionLists()->GetVector(); std::vector<boost::shared_ptr<DistributionList> >::iterator iterList = vecLists.begin(); std::vector<boost::shared_ptr<DistributionList> >::iterator iterListEnd = vecLists.end(); for (; iterList != iterListEnd; iterList++) { boost::shared_ptr<DistributionList> pList = (*iterList); String sAddress = pList->GetAddress(); _UpdateDomainName(sAddress, oldDomainName,newDomainName); pList->SetAddress(sAddress); vector<boost::shared_ptr<HM::DistributionListRecipient>> recipients = pList->GetMembers()->GetVector(); boost_foreach(boost::shared_ptr<DistributionListRecipient> recipient, recipients) { String address = recipient->GetAddress(); if (_UpdateDomainName(address,oldDomainName, newDomainName)) { recipient->SetAddress(address); PersistentDistributionListRecipient::SaveObject(recipient); } } PersistentDistributionList::SaveObject(pList); }