diff --git a/src/java/davmail/caldav/CaldavConnection.java b/src/java/davmail/caldav/CaldavConnection.java index 9339334e..360cb58e 100644 --- a/src/java/davmail/caldav/CaldavConnection.java +++ b/src/java/davmail/caldav/CaldavConnection.java @@ -7,6 +7,7 @@ import davmail.exchange.ExchangeSessionFactory; import davmail.tray.DavGatewayTray; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; +import org.apache.commons.httpclient.auth.AuthenticationException; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamConstants; @@ -109,7 +110,11 @@ public class CaldavConnection extends AbstractConnection { if (session == null) { // first check network connectivity ExchangeSessionFactory.checkConfig(); + try { session = ExchangeSessionFactory.getInstance(userName, password); + } catch (AuthenticationException e) { + sendErr(HttpStatus.SC_UNAUTHORIZED, e.getMessage()); + } } handleRequest(command, path, headers, content); } diff --git a/src/java/davmail/exchange/ExchangeSession.java b/src/java/davmail/exchange/ExchangeSession.java index 97579daa..168a0650 100644 --- a/src/java/davmail/exchange/ExchangeSession.java +++ b/src/java/davmail/exchange/ExchangeSession.java @@ -3,6 +3,7 @@ package davmail.exchange; import davmail.Settings; import davmail.http.DavGatewayHttpClientFacade; import org.apache.commons.httpclient.*; +import org.apache.commons.httpclient.auth.AuthenticationException; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.methods.PutMethod; @@ -316,8 +317,9 @@ public class ExchangeSession { } int status = method.getStatusCode(); - // User may be authenticated, get various session information - if (status != HttpStatus.SC_OK) { + if (status == HttpStatus.SC_UNAUTHORIZED) { + throw new AuthenticationException("Authentication failed: invalid user or password"); + } else if (status != HttpStatus.SC_OK) { HttpException ex = new HttpException(); ex.setReasonCode(status); ex.setReason(method.getStatusText()); @@ -328,9 +330,9 @@ public class ExchangeSession { if (queryString != null && queryString.contains("reason=2")) { method.releaseConnection(); if (poolKey.userName != null && poolKey.userName.contains("\\")) { - throw new HttpException("Authentication failed: invalid user or password"); + throw new AuthenticationException("Authentication failed: invalid user or password"); } else { - throw new HttpException("Authentication failed: invalid user or password, " + + throw new AuthenticationException("Authentication failed: invalid user or password, " + "retry with domain\\user"); } } @@ -349,6 +351,9 @@ public class ExchangeSession { wdr.setPath(URIUtil.getPath(inboxUrl)); + } catch (AuthenticationException exc) { + LOGGER.error(exc.toString()); + throw exc; } catch (IOException exc) { StringBuffer message = new StringBuffer(); message.append("DavMail login exception: ");