You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
FairEmail/patches/scarlet.patch

94 lines
2.6 KiB

diff --git a/app/src/main/java/com/sun/mail/imap/IMAPStore.java b/app/src/main/java/com/sun/mail/imap/IMAPStore.java
index 929e82d33..5dcf8ae67 100644
--- a/app/src/main/java/com/sun/mail/imap/IMAPStore.java
+++ b/app/src/main/java/com/sun/mail/imap/IMAPStore.java
@@ -888,9 +905,21 @@ public class IMAPStore extends Store
}
if (m.equals("PLAIN"))
- p.authplain(authzid, user, password);
+ try {
+ p.authplain(authzid, user, password);
+ } catch (ProtocolException ex) {
+ if (mechs.indexOf("LOGIN") > mechs.indexOf("PLAIN"))
+ continue;
+ else
+ throw ex;
+ }
else if (m.equals("LOGIN"))
- p.authlogin(user, password);
+ try {
+ p.authlogin(user, password);
+ } catch (ProtocolException ex) {
+ eu.faircode.email.Log.w(ex);
+ p.authloginold(user, password);
+ }
else if (m.equals("NTLM"))
p.authntlm(authzid, user, password);
else if (m.equals("XOAUTH2"))
diff --git a/app/src/main/java/com/sun/mail/imap/protocol/IMAPProtocol.java b/app/src/main/java/com/sun/mail/imap/protocol/IMAPProtocol.java
index a8a88b6c0..57a2ee924 100644
--- a/app/src/main/java/com/sun/mail/imap/protocol/IMAPProtocol.java
+++ b/app/src/main/java/com/sun/mail/imap/protocol/IMAPProtocol.java
@@ -628,6 +628,60 @@ public class IMAPProtocol extends Protocol {
}
+ public synchronized void authloginold(String u, String p)
+ throws ProtocolException {
+ List<Response> v = new ArrayList<>();
+ String tag = null;
+ Response r = null;
+ boolean done = false;
+
+ try {
+
+ if (noauthdebug && isTracing()) {
+ logger.fine("LOGIN command trace suppressed");
+ suspendTracing();
+ }
+
+ try {
+ Argument arg = new Argument();
+ arg.writeNString(u);
+ arg.writeNString(p);
+ tag = writeCommand("LOGIN", arg);
+ } catch (Exception ex) {
+ r = Response.byeResponse(ex);
+ done = true;
+ }
+
+ while (!done) {
+ try {
+ r = readResponse();
+ if (r.isTagged() && r.getTag().equals(tag))
+ done = true;
+ else if (r.isBYE()) // outta here
+ done = true;
+ } catch (Exception ioex) {
+ r = Response.byeResponse(ioex);
+ done = true;
+ }
+ v.add(r);
+ }
+
+ } finally {
+ resumeTracing();
+ }
+
+ Response[] responses = v.toArray(new Response[v.size()]);
+
+ handleCapabilityResponse(responses);
+ notifyResponseHandlers(responses);
+
+ if (noauthdebug && isTracing())
+ logger.fine("LOGIN command result: " + r);
+ handleLoginResult(r);
+ setCapabilities(r);
+ authenticated = true;
+ }
+
/**
* The AUTHENTICATE command with AUTH=PLAIN authentication scheme.
* This is based heavly on the {@link #authlogin} method.