summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt A. Tobin <email@mattatobin.com>2019-11-10 17:53:59 -0500
committerMatt A. Tobin <email@mattatobin.com>2019-11-10 17:53:59 -0500
commit74e5265d3921f18c7d626004e898837adb466d0c (patch)
tree5bc34e298dd24e389781d2a1fce6132aed8b0819
parentbbf10b90975bc11e5ea2ac70196615a041b00f6f (diff)
downloadUXP-74e5265d3921f18c7d626004e898837adb466d0c.tar
UXP-74e5265d3921f18c7d626004e898837adb466d0c.tar.gz
UXP-74e5265d3921f18c7d626004e898837adb466d0c.tar.lz
UXP-74e5265d3921f18c7d626004e898837adb466d0c.tar.xz
UXP-74e5265d3921f18c7d626004e898837adb466d0c.zip
Bug 516464 - Remove passwords from cache when password manager contents are changed to prevent stale password attempts.
Tag #1273
-rw-r--r--mailnews/base/util/nsMsgIncomingServer.cpp42
-rw-r--r--mailnews/base/util/nsMsgIncomingServer.h6
-rw-r--r--mailnews/build/nsMailModule.cpp14
-rw-r--r--mailnews/compose/src/nsMsgSendLater.cpp2
4 files changed, 54 insertions, 10 deletions
diff --git a/mailnews/base/util/nsMsgIncomingServer.cpp b/mailnews/base/util/nsMsgIncomingServer.cpp
index a1e897f12..2677e149a 100644
--- a/mailnews/base/util/nsMsgIncomingServer.cpp
+++ b/mailnews/base/util/nsMsgIncomingServer.cpp
@@ -49,6 +49,7 @@
#include "nsIMsgFilter.h"
#include "nsIArray.h"
#include "nsArrayUtils.h"
+#include "nsIObserverService.h"
#define PORT_NOT_SET -1
@@ -64,12 +65,51 @@ nsMsgIncomingServer::nsMsgIncomingServer():
{
}
+nsresult nsMsgIncomingServer::Init()
+{
+ // We need to know when the password manager changes.
+ nsCOMPtr<nsIObserverService> observerService =
+ mozilla::services::GetObserverService();
+ NS_ENSURE_TRUE(observerService, NS_ERROR_UNEXPECTED);
+
+ observerService->AddObserver(this, "passwordmgr-storage-changed", false);
+ observerService->AddObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false);
+ return NS_OK;
+}
+
nsMsgIncomingServer::~nsMsgIncomingServer()
{
}
NS_IMPL_ISUPPORTS(nsMsgIncomingServer, nsIMsgIncomingServer,
- nsISupportsWeakReference)
+ nsISupportsWeakReference, nsIObserver)
+
+NS_IMETHODIMP
+nsMsgIncomingServer::Observe(nsISupports *aSubject, const char* aTopic,
+ const char16_t *aData)
+{
+ nsresult rv;
+
+ // When the state of the password manager changes we need to clear the
+ // password from the cache in case the user just removed it.
+ if (strcmp(aTopic, "passwordmgr-storage-changed") == 0)
+ {
+ rv = ForgetSessionPassword();
+ NS_ENSURE_SUCCESS(rv,rv);
+ }
+ else if (strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID) == 0)
+ {
+ // Now remove ourselves from the observer service as well.
+ nsCOMPtr<nsIObserverService> observerService =
+ mozilla::services::GetObserverService();
+ NS_ENSURE_TRUE(observerService, NS_ERROR_UNEXPECTED);
+
+ observerService->RemoveObserver(this, "passwordmgr-storage-changed");
+ observerService->RemoveObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID);
+ }
+
+ return NS_OK;
+}
NS_IMETHODIMP
nsMsgIncomingServer::SetServerBusy(bool aServerBusy)
diff --git a/mailnews/base/util/nsMsgIncomingServer.h b/mailnews/base/util/nsMsgIncomingServer.h
index 0c4219cd2..d19bdc930 100644
--- a/mailnews/base/util/nsMsgIncomingServer.h
+++ b/mailnews/base/util/nsMsgIncomingServer.h
@@ -21,6 +21,7 @@
#include "nsIMsgFilterPlugin.h"
#include "nsDataHashtable.h"
#include "nsIMsgPluggableStore.h"
+#include "nsIObserver.h"
class nsIMsgFolderCache;
class nsIMsgProtocolInfo;
@@ -36,13 +37,16 @@ class nsIMsgProtocolInfo;
#define IMETHOD_VISIBILITY NS_VISIBILITY_DEFAULT
class NS_MSG_BASE nsMsgIncomingServer : public nsIMsgIncomingServer,
- public nsSupportsWeakReference
+ public nsSupportsWeakReference,
+ public nsIObserver
{
public:
nsMsgIncomingServer();
+ nsresult Init();
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSIMSGINCOMINGSERVER
+ NS_DECL_NSIOBSERVER
protected:
virtual ~nsMsgIncomingServer();
diff --git a/mailnews/build/nsMailModule.cpp b/mailnews/build/nsMailModule.cpp
index 4f63a27bc..d0bcabe96 100644
--- a/mailnews/build/nsMailModule.cpp
+++ b/mailnews/build/nsMailModule.cpp
@@ -602,7 +602,7 @@ NS_DEFINE_NAMED_CID(NS_MSGCOMPUTILS_CID);
////////////////////////////////////////////////////////////////////////////////
NS_GENERIC_FACTORY_CONSTRUCTOR(JaCppAbDirectoryDelegator)
NS_GENERIC_FACTORY_CONSTRUCTOR(JaCppComposeDelegator)
-NS_GENERIC_FACTORY_CONSTRUCTOR(JaCppIncomingServerDelegator)
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(JaCppIncomingServerDelegator, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(JaCppMsgFolderDelegator)
NS_GENERIC_FACTORY_CONSTRUCTOR(JaCppSendDelegator)
NS_GENERIC_FACTORY_CONSTRUCTOR(JaCppUrlDelegator)
@@ -620,7 +620,7 @@ NS_DEFINE_NAMED_CID(JACPPURLDELEGATOR_CID);
NS_GENERIC_FACTORY_CONSTRUCTOR(nsImapUrl)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsImapProtocol)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsIMAPHostSessionList, Init)
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsImapIncomingServer)
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsImapIncomingServer, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsImapService)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsImapMailFolder)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsImapMockChannel)
@@ -646,14 +646,14 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(nsPop3Service)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsNoneService)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgLocalMailFolder)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsParseMailMessageState)
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsPop3IncomingServer)
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsRssIncomingServer)
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsPop3IncomingServer, Init)
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsRssIncomingServer, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsRssService)
#ifdef HAVE_MOVEMAIL
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsMovemailIncomingServer)
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMovemailIncomingServer, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMovemailService)
#endif /* HAVE_MOVEMAIL */
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsNoIncomingServer)
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsNoIncomingServer, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgBrkMBoxStore)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMsgMaildirStore)
@@ -728,7 +728,7 @@ NS_DEFINE_NAMED_CID(NS_FTS3TOKENIZER_CID);
////////////////////////////////////////////////////////////////////////////////
NS_GENERIC_FACTORY_CONSTRUCTOR(nsNntpUrl)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsNntpService)
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsNntpIncomingServer)
+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsNntpIncomingServer, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsNNTPArticleList)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsNNTPNewsgroupPost)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsNNTPNewsgroupList)
diff --git a/mailnews/compose/src/nsMsgSendLater.cpp b/mailnews/compose/src/nsMsgSendLater.cpp
index 97206f12b..66c90fc0b 100644
--- a/mailnews/compose/src/nsMsgSendLater.cpp
+++ b/mailnews/compose/src/nsMsgSendLater.cpp
@@ -154,7 +154,7 @@ nsMsgSendLater::Observe(nsISupports *aSubject, const char* aTopic,
mTimerSet = false;
}
- else if (!strcmp(aTopic, "xpcom-shutdown"))
+ else if (!strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID))
{
// We're shutting down. Unsubscribe from the unsentFolder notifications
// they aren't any use to us now, we don't want to start sending more