/** * Extract the host name from aContentLocation, and look it up in our list * of trusted domains. */ PRBool nsMsgContentPolicy::IsTrustedDomain(nsIURI * aContentLocation) { PRBool trustedDomain = PR_FALSE; // get the host name of the server hosting the remote image nsCAutoString host; nsresult rv = aContentLocation->GetHost(host); if (NS_SUCCEEDED(rv) && !mTrustedMailDomains.IsEmpty()) trustedDomain = MsgHostDomainIsTrusted(host, mTrustedMailDomains); return trustedDomain; }
NS_IMETHODIMP nsSpamSettings::CheckWhiteList(nsIMsgDBHdr *aMsgHdr, bool *aResult) { NS_ENSURE_ARG_POINTER(aMsgHdr); NS_ENSURE_ARG_POINTER(aResult); *aResult = false; // default in case of error or no whitelisting if (!mUseWhiteList || (!mWhiteListDirArray.Count() && mTrustedMailDomains.IsEmpty())) return NS_OK; // do per-message processing nsCString author; aMsgHdr->GetAuthor(getter_Copies(author)); nsresult rv; nsCOMPtr<nsIMsgHeaderParser> headerParser = do_GetService(NS_MAILNEWS_MIME_HEADER_PARSER_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); nsCAutoString authorEmailAddress; rv = headerParser->ExtractHeaderAddressMailboxes(author, authorEmailAddress); NS_ENSURE_SUCCESS(rv, rv); if (authorEmailAddress.IsEmpty()) return NS_OK; // should we skip whitelisting for the identity email? if (mInhibitWhiteListingIdentityUser) { for (PRUint32 i = 0; i < mEmails.Length(); ++i) { if (mEmails[i].Equals(authorEmailAddress, nsCaseInsensitiveCStringComparator())) return NS_OK; } } if (!mTrustedMailDomains.IsEmpty() || mInhibitWhiteListingIdentityDomain) { nsCAutoString domain; PRInt32 atPos = authorEmailAddress.FindChar('@'); if (atPos >= 0) domain = Substring(authorEmailAddress, atPos + 1); if (!domain.IsEmpty()) { if (!mTrustedMailDomains.IsEmpty() && MsgHostDomainIsTrusted(domain, mTrustedMailDomains)) { *aResult = true; return NS_OK; } if (mInhibitWhiteListingIdentityDomain) { for (PRUint32 i = 0; i < mEmails.Length(); ++i) { nsCAutoString identityDomain; PRInt32 atPos = mEmails[i].FindChar('@'); if (atPos >= 0) { identityDomain = Substring(mEmails[i], atPos + 1); if (identityDomain.Equals(domain, nsCaseInsensitiveCStringComparator())) return NS_OK; // don't whitelist } } } } } if (mWhiteListDirArray.Count()) { nsCOMPtr<nsIAbCard> cardForAddress; for (PRInt32 index = 0; index < mWhiteListDirArray.Count() && !cardForAddress; index++) { mWhiteListDirArray[index]->CardForEmailAddress(authorEmailAddress, getter_AddRefs(cardForAddress)); } if (cardForAddress) { *aResult = true; return NS_OK; } } return NS_OK; // default return is false }