Added support for old style login command

This commit is contained in:
M66B
2020-07-13 09:46:39 +02:00
parent b395fd866a
commit 15a17d33d0
3 changed files with 161 additions and 2 deletions

View File

@@ -888,9 +888,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"))

View File

@@ -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.