mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-20 15:27:32 +09:00
Bug 1315662 - delete SMTP server login credentials when deleting the account or if hostname/username changes.
Tag #1273
This commit is contained in:
parent
a4ab7d01df
commit
97e994c45a
3 changed files with 47 additions and 18 deletions
|
|
@ -121,6 +121,18 @@ nsresult nsSmtpServer::getPrefs()
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
// This function is intentionally called the same as in nsIMsgIncomingServer.
|
||||
nsresult
|
||||
nsSmtpServer::OnUserOrHostNameChanged(const nsACString& oldName,
|
||||
const nsACString& newName,
|
||||
bool hostnameChanged)
|
||||
{
|
||||
// Reset password so that users are prompted for new password for the new user/host.
|
||||
(void)ForgetPassword();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsSmtpServer::GetHostname(nsACString &aHostname)
|
||||
{
|
||||
|
|
@ -137,12 +149,22 @@ nsSmtpServer::GetHostname(nsACString &aHostname)
|
|||
NS_IMETHODIMP
|
||||
nsSmtpServer::SetHostname(const nsACString &aHostname)
|
||||
{
|
||||
nsCString oldName;
|
||||
nsresult rv = GetHostname(oldName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// A few things to take care of if we're changing the hostname.
|
||||
if (!oldName.Equals(aHostname, nsCaseInsensitiveCStringComparator())) {
|
||||
rv = OnUserOrHostNameChanged(oldName, aHostname, true);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
if (!aHostname.IsEmpty())
|
||||
return mPrefBranch->SetCharPref("hostname", PromiseFlatCString(aHostname).get());
|
||||
|
||||
// If the pref value is already empty, ClearUserPref will return
|
||||
// NS_ERROR_UNEXPECTED, so don't check the rv here.
|
||||
mPrefBranch->ClearUserPref("hostname");
|
||||
(void)mPrefBranch->ClearUserPref("hostname");
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
@ -284,12 +306,22 @@ nsSmtpServer::GetUsername(nsACString &aUsername)
|
|||
NS_IMETHODIMP
|
||||
nsSmtpServer::SetUsername(const nsACString &aUsername)
|
||||
{
|
||||
// Need to take care of few things if we're changing the username.
|
||||
nsCString oldName;
|
||||
nsresult rv = GetUsername(oldName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!oldName.Equals(aUsername)) {
|
||||
rv = OnUserOrHostNameChanged(oldName, aUsername, false);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
if (!aUsername.IsEmpty())
|
||||
return mPrefBranch->SetCharPref("username", PromiseFlatCString(aUsername).get());
|
||||
|
||||
// If the pref value is already empty, ClearUserPref will return
|
||||
// NS_ERROR_UNEXPECTED, so don't check the rv here.
|
||||
mPrefBranch->ClearUserPref("username");
|
||||
(void)mPrefBranch->ClearUserPref("username");
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
|
@ -575,22 +607,10 @@ nsSmtpServer::ForgetPassword()
|
|||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// Get the current server URI without the username
|
||||
nsAutoCString serverUri(NS_LITERAL_CSTRING("smtp://"));
|
||||
|
||||
nsCString hostname;
|
||||
rv = GetHostname(hostname);
|
||||
|
||||
if (NS_SUCCEEDED(rv) && !hostname.IsEmpty()) {
|
||||
nsCString escapedHostname;
|
||||
MsgEscapeString(hostname, nsINetUtil::ESCAPE_URL_PATH, escapedHostname);
|
||||
// not all servers have a hostname
|
||||
serverUri.Append(escapedHostname);
|
||||
}
|
||||
|
||||
uint32_t count;
|
||||
nsILoginInfo** logins;
|
||||
|
||||
NS_ConvertUTF8toUTF16 currServer(serverUri);
|
||||
NS_ConvertASCIItoUTF16 serverUri(GetServerURIInternal(false));
|
||||
|
||||
nsCString serverCUsername;
|
||||
rv = GetUsername(serverCUsername);
|
||||
|
|
@ -598,8 +618,8 @@ nsSmtpServer::ForgetPassword()
|
|||
|
||||
NS_ConvertUTF8toUTF16 serverUsername(serverCUsername);
|
||||
|
||||
rv = loginMgr->FindLogins(&count, currServer, EmptyString(),
|
||||
currServer, &logins);
|
||||
rv = loginMgr->FindLogins(&count, serverUri, EmptyString(),
|
||||
serverUri, &logins);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// There should only be one-login stored for this url, however just in case
|
||||
|
|
|
|||
|
|
@ -30,13 +30,17 @@ private:
|
|||
nsCString mKey;
|
||||
nsCOMPtr<nsIPrefBranch> mPrefBranch;
|
||||
nsCOMPtr<nsIPrefBranch> mDefPrefBranch;
|
||||
|
||||
|
||||
nsresult getPrefs();
|
||||
void getIntPrefWithDefault(const char *prefName, int32_t *val,
|
||||
int32_t defval);
|
||||
nsresult GetPasswordWithoutUI();
|
||||
nsCString GetServerURIInternal(const bool aIncludeUsername);
|
||||
|
||||
nsresult OnUserOrHostNameChanged(const nsACString& oldName,
|
||||
const nsACString& newName,
|
||||
bool hostnameChanged);
|
||||
|
||||
nsCString m_password;
|
||||
bool m_logonFailed;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue