From 5a4ce93882aa49446b87d1277cad33d07a60a067 Mon Sep 17 00:00:00 2001 From: "jgmyers%netscape.com" Date: Sat, 3 Feb 2001 00:17:52 +0000 Subject: [PATCH] Fix SMTP/SSL: bug 32018 sr=mscott git-svn-id: svn://10.0.0.236/trunk@86131 18797224-902f-48f8-a5cc-f745e15eee43 --- .../resources/content/smtpEditOverlay.js | 11 ++++++-- .../resources/content/smtpEditOverlay.xul | 15 ++++++----- .../locale/en-US/smtpEditOverlay.dtd | 1 + .../mailnews/compose/src/nsSmtpProtocol.cpp | 27 ++++++++++--------- mozilla/mailnews/compose/src/nsSmtpProtocol.h | 11 ++++---- mozilla/mailnews/compose/src/nsSmtpServer.cpp | 2 +- mozilla/mailnews/mailnews.js | 1 + mozilla/modules/libpref/src/init/mailnews.js | 1 + 8 files changed, 41 insertions(+), 28 deletions(-) diff --git a/mozilla/mailnews/base/prefs/resources/content/smtpEditOverlay.js b/mozilla/mailnews/base/prefs/resources/content/smtpEditOverlay.js index c32b07c0d46..64cedc742c9 100644 --- a/mozilla/mailnews/base/prefs/resources/content/smtpEditOverlay.js +++ b/mozilla/mailnews/base/prefs/resources/content/smtpEditOverlay.js @@ -30,6 +30,7 @@ var gSmtpUsernameLabel; var gSmtpHostname; var gSmtpUseUsername; var gSmtpAuthMethod; +var gSmtpTrySSL; var gSavedUsername=""; @@ -40,14 +41,19 @@ function initSmtpSettings(server) { gSmtpHostname = document.getElementById("smtp.hostname"); gSmtpUseUsername = document.getElementById("smtp.useUsername"); gSmtpAuthMethod = document.getElementById("smtp.authMethod"); + gSmtpTrySSL = document.getElementById("smtp.trySSL"); if (server) { gSmtpHostname.value = server.hostname; gSmtpUsername.value = server.username; gSmtpAuthMethod.setAttribute("value", server.authMethod); - // radio groups not implemented - //document.getElementById("smtp.trySSL").value = server.trySSL; + var elements = []; + if (server.trySSL != "") + elements = gSmtpTrySSL.getElementsByAttribute("data", server.trySSL); + if (elements.length == 0) + elements = gSmtpTrySSL.getElementsByAttribute("data", "1"); + gSmtpTrySSL.selectedItem = elements[0]; } if (gSmtpAuthMethod.getAttribute("value") == "1") @@ -75,6 +81,7 @@ function saveSmtpSettings(server) //dump("Saved authmethod = " + server.authMethod + // " but checked = " + gSmtpUseUsername.checked + "\n"); server.username = gSmtpUsername.value; + server.trySSL = gSmtpTrySSL.selectedItem.data; } } diff --git a/mozilla/mailnews/base/prefs/resources/content/smtpEditOverlay.xul b/mozilla/mailnews/base/prefs/resources/content/smtpEditOverlay.xul index 178ea7bd6a2..323cc08cd27 100644 --- a/mozilla/mailnews/base/prefs/resources/content/smtpEditOverlay.xul +++ b/mozilla/mailnews/base/prefs/resources/content/smtpEditOverlay.xul @@ -52,15 +52,16 @@ - diff --git a/mozilla/mailnews/base/prefs/resources/locale/en-US/smtpEditOverlay.dtd b/mozilla/mailnews/base/prefs/resources/locale/en-US/smtpEditOverlay.dtd index d4fb8e69206..3259e0710c0 100644 --- a/mozilla/mailnews/base/prefs/resources/locale/en-US/smtpEditOverlay.dtd +++ b/mozilla/mailnews/base/prefs/resources/locale/en-US/smtpEditOverlay.dtd @@ -3,5 +3,6 @@ + diff --git a/mozilla/mailnews/compose/src/nsSmtpProtocol.cpp b/mozilla/mailnews/compose/src/nsSmtpProtocol.cpp index 4a68f38e172..334a77bc649 100644 --- a/mozilla/mailnews/compose/src/nsSmtpProtocol.cpp +++ b/mozilla/mailnews/compose/src/nsSmtpProtocol.cpp @@ -296,6 +296,7 @@ void nsSmtpProtocol::Initialize(nsIURI * aURL) m_flags = 0; m_prefAuthMethod = PREF_AUTH_NONE; + m_prefTrySSL = PREF_SSL_TRY; m_port = SMTP_PORT; m_tlsInitiated = PR_FALSE; @@ -336,10 +337,10 @@ void nsSmtpProtocol::Initialize(nsIURI * aURL) // round trip communication between the client and server nsCOMPtr smtpServer; m_runningURL->GetSmtpServer(getter_AddRefs(smtpServer)); - if (smtpServer) + if (smtpServer) { smtpServer->GetAuthMethod(&m_prefAuthMethod); - else - m_prefAuthMethod = PREF_AUTH_NONE; + smtpServer->GetTrySSL(&m_prefTrySSL); + } rv = RequestOverrideInfo(smtpServer); // if we aren't waiting for a login override, then go ahead an @@ -349,11 +350,15 @@ void nsSmtpProtocol::Initialize(nsIURI * aURL) aURL->GetHost(getter_Copies(hostName)); PR_LOG(SMTPLogModule, PR_LOG_ALWAYS, ("SMTP Connecting to: %s", (const char *) hostName)); - // pass in "ssl" for the last arg if you want this to be over SSL - if (m_prefAuthMethod == PREF_AUTH_TLS_ONLY) + if (m_prefTrySSL != PREF_SSL_NEVER) { rv = OpenNetworkSocket(aURL, "tls"); - else + if (NS_FAILED(rv) && m_prefTrySSL == PREF_SSL_TRY) { + m_prefTrySSL = PREF_SSL_NEVER; + rv = OpenNetworkSocket(aURL, nsnull); + } + } else { rv = OpenNetworkSocket(aURL, nsnull); + } } } @@ -709,8 +714,8 @@ PRInt32 nsSmtpProtocol::SendEhloResponse(nsIInputStream * inputStream, PRUint32 /* EHLO must not be implemented by the server so fall back to the HELO case */ if (m_prefAuthMethod == PREF_AUTH_ANY || - m_prefAuthMethod == PREF_AUTH_TLS_ONLY || - m_prefAuthMethod == PREF_AUTH_LOGIN) + m_prefAuthMethod == PREF_AUTH_LOGIN || + m_prefTrySSL == PREF_SSL_ALWAYS) { m_nextState = SMTP_ERROR_DONE; m_urlErrorState = NS_ERROR_COULD_NOT_LOGIN_TO_SMTP_SERVER; @@ -794,9 +799,7 @@ PRInt32 nsSmtpProtocol::ProcessAuth() { if(TestFlag(SMTP_EHLO_STARTTLS_ENABLED)) { - if (m_prefAuthMethod == PREF_AUTH_ANY || - m_prefAuthMethod == PREF_AUTH_TLS_TRY || - m_prefAuthMethod == PREF_AUTH_TLS_ONLY) + if (m_prefTrySSL != PREF_SSL_NEVER) { buffer = "STARTTLS"; buffer += CRLF; @@ -812,7 +815,7 @@ PRInt32 nsSmtpProtocol::ProcessAuth() return status; } } - else if (m_prefAuthMethod == PREF_AUTH_TLS_ONLY) + else if (m_prefTrySSL == PREF_SSL_ALWAYS) { m_nextState = SMTP_ERROR_DONE; m_urlErrorState = NS_ERROR_COULD_NOT_LOGIN_TO_SMTP_SERVER; diff --git a/mozilla/mailnews/compose/src/nsSmtpProtocol.h b/mozilla/mailnews/compose/src/nsSmtpProtocol.h index a1fb6bb34ee..6e5c961aa0f 100644 --- a/mozilla/mailnews/compose/src/nsSmtpProtocol.h +++ b/mozilla/mailnews/compose/src/nsSmtpProtocol.h @@ -89,15 +89,13 @@ SMTP_AUTH_PROCESS_STATE // 21 typedef enum _PrefAuthMethod { PREF_AUTH_NONE = 0, PREF_AUTH_ANY = 1, - PREF_AUTH_LOGIN = 2, - PREF_AUTH_TLS_TRY = 3, - PREF_AUTH_TLS_ONLY = 4 + PREF_AUTH_LOGIN = 2 } PrefAuthMethod; typedef enum _PrefTrySSL { - PREF_NO_SSL = 0, - PREF_TRY_SSL = 1, - PREF_ALWAYS_SSL = 2 + PREF_SSL_NEVER = 0, + PREF_SSL_TRY = 1, + PREF_SSL_ALWAYS = 2 } PrefTrySSL; class nsSmtpProtocol : public nsMsgProtocol, @@ -160,6 +158,7 @@ private: // *** the following should move to the smtp server when we support // multiple smtp servers PRInt32 m_prefAuthMethod; + PRInt32 m_prefTrySSL; PRBool m_tlsEnabled; PRBool m_tlsInitiated; diff --git a/mozilla/mailnews/compose/src/nsSmtpServer.cpp b/mozilla/mailnews/compose/src/nsSmtpServer.cpp index be5405044da..506525b39f1 100644 --- a/mozilla/mailnews/compose/src/nsSmtpServer.cpp +++ b/mozilla/mailnews/compose/src/nsSmtpServer.cpp @@ -102,7 +102,7 @@ nsSmtpServer::GetTrySSL(PRInt32 *trySSL) *trySSL= 0; getPrefString("try_ssl", pref); rv = prefs->GetIntPref(pref, trySSL); - if (NS_FAILED(rv)) *trySSL = 0; + if (NS_FAILED(rv)) *trySSL = 1; return NS_OK; } diff --git a/mozilla/mailnews/mailnews.js b/mozilla/mailnews/mailnews.js index 9e25cdd382f..2e435d730a7 100644 --- a/mozilla/mailnews/mailnews.js +++ b/mozilla/mailnews/mailnews.js @@ -278,6 +278,7 @@ pref("mail.server.default.canDelete", false); pref("mail.server.default.login_at_startup", false); pref("mail.smtpserver.default.auth_method", 2); // auth login +pref("mail.smtpserver.default.try_ssl", 1); pref("mail.display_glyph", true); // see pref("mail.display_struct", true); // ditto diff --git a/mozilla/modules/libpref/src/init/mailnews.js b/mozilla/modules/libpref/src/init/mailnews.js index 9e25cdd382f..2e435d730a7 100644 --- a/mozilla/modules/libpref/src/init/mailnews.js +++ b/mozilla/modules/libpref/src/init/mailnews.js @@ -278,6 +278,7 @@ pref("mail.server.default.canDelete", false); pref("mail.server.default.login_at_startup", false); pref("mail.smtpserver.default.auth_method", 2); // auth login +pref("mail.smtpserver.default.try_ssl", 1); pref("mail.display_glyph", true); // see pref("mail.display_struct", true); // ditto