Commit Graph

926 Commits

Author SHA1 Message Date
cketti bcb6c75c2e Add support for storing raw header fields 2014-12-08 16:32:23 +01:00
cketti 9e6fc7c7d1 Merge pull request #13 from k9mail/art/update-certificates-in-tests
Update certificates in tests
2014-11-12 16:30:53 +01:00
cketti bd4a236525 Merge pull request #11 from k9mail/art/fix-tests-on-jvm
fix tests on JVM
2014-11-11 19:46:58 +01:00
cketti 7211080415 Merge pull request #10 from k9mail/art/more-tidying-arrays
Replace many arrays with collections
2014-11-11 19:45:35 +01:00
Art O Cathain 438a350f55 remove unnecessary method parameters 2014-10-19 18:40:17 +01:00
Art O Cathain d980e49fd1 chain the exception 2014-10-11 16:11:12 +01:00
Art O Cathain 668ee71b6c fix tests on JVM 2014-10-11 12:10:07 +01:00
Art O Cathain 40102d560d Set interface makes more sense for flags 2014-10-05 12:40:35 +01:00
Art O Cathain 195f28db00 Revert accidental change 2014-10-05 12:23:43 +01:00
Art O Cathain 444756839c EnumSet is more efficient than HashSet 2014-10-05 12:08:55 +01:00
Art O Cathain 159017e91d removed unneeded variables and clarified names 2014-10-05 11:50:04 +01:00
Art O Cathain d38f21265d use isEmpty instead of size() == 0 for clarify 2014-10-05 10:37:50 +01:00
Art O Cathain 02c0b5f2a3 Use collections instead of arrays to enable stronger typing and reduce cruft 2014-10-05 10:37:36 +01:00
Art O Cathain 203dcfe2c3 use interfaces, not implementions 2014-10-04 12:00:48 +01:00
tobiasbaum dadf5e0865 Merge pull request #7 from artbristol/art/tidying
Art/tidying
2014-09-29 22:15:59 +02:00
Art O Cathain 010d8c9f7e always use import for UrlEncodingHelper 2014-09-29 18:06:21 +01:00
Art O Cathain 2226ae6a8e fix IDE error 2014-09-28 12:48:46 +01:00
Art O Cathain c438bc1222 remove some more catches 2014-09-28 12:09:34 +01:00
Art O Cathain afb65d5ad7 remove some try-catch cruft 2014-09-28 11:39:32 +01:00
Art O Cathain 46d083bcad fix warnings 2014-09-28 11:19:33 +01:00
Tobias Baum 2be10febf9 Added (still rather shallow) missing Javadocs for classes in BinaryAttachmentBody hierarchy 2014-09-22 21:55:08 +02:00
Tobias Baum 547eb74774 Changed access to mParts in MimeMultipart so that it can be private too 2014-09-22 21:54:02 +02:00
Tobias Baum b6079d6460 UCDetector warnings: Made things private, deleted unused methods and fields 2014-09-22 21:52:59 +02:00
Tobias Baum 1ea34d2378 Flagged some code with TODOs, added Javadoc for Body 2014-09-14 11:20:18 +02:00
Tobias Baum be954d729c Whitespace, Tabs to Spaces 2014-09-14 11:18:57 +02:00
Tobias Baum 7d32b3d462 Removed unnecessary overriding methods 2014-09-14 11:17:02 +02:00
Tobias Baum a9aa4645af Removed unused methods 2014-09-14 11:15:44 +02:00
Tobias Baum 545dd0db06 Added a getBodyparts method to Multipart so that foreach loops can be used. Removed unnecessary mutators from Multipart. 2014-09-14 11:13:34 +02:00
Tobias Baum 5513d5a99b Pulled down getSize from Part to Message which makes ImapBodyPart superfluous 2014-09-14 11:11:48 +02:00
Tobias Baum d467dca32c Added testcases for parsing and removed unused methods for parsing 2014-09-14 11:05:55 +02:00
cketti 601e2880ac Merge remote-tracking branch 'upstream/master'
Conflicts:
	src/com/fsck/k9/mail/transport/SmtpTransport.java
2014-09-12 07:11:32 +02:00
Christian Frommeyer 9dba60c997 Some minor code cleanings and logging for LockableDatabase 2014-09-11 20:26:40 +02:00
Christian Frommeyer eced036d69 Extracting Database Setup Schema definition form LocalStore. 2014-09-11 20:26:40 +02:00
Christian Frommeyer 91ef5fa816 Extracted LocalFolder and LocalMessage definition from LocalStore 2014-09-11 20:26:40 +02:00
Christian Frommeyer 89ba2c510b More nested classes extracted from LocalStore. 2014-09-11 20:26:40 +02:00
Christian Frommeyer f92da3af59 Extracting local attachment classes from LocalStore to reduce file size. 2014-09-11 20:26:39 +02:00
Christian Frommeyer 038fceabf0 Move LocalStore to new subpackage to prepare decomposition of nested
classes.
2014-09-11 20:26:39 +02:00
Joe Steele 6f14294164 Remove SslHelper. Don't use SecureRandom.
SslHelper has been removed, and its functionality has been transferred
into TrustedSocketFactory.  The added layer of indirection wasn't really
simplifying anything.  It's now easier to see what happens when
createSocket() is invoked.

A new instance of SecureRandom is no longer passed to SSLContext.init().
Instead, null is passed.

The (default) provider of the TLS SSLContext used is OpenSSLProvider,
which provides an SSLSocket instance of type OpenSSLSocketImpl.  The only
use of SecureRandom is in OpenSSLSocketImpl.startHandshake(), where it is
used to seed the OpenSSL PRNG with additional random data.  But if
SecureRandom is null, then /dev/urandom is used for seeding instead.

Meanwhile, the default provider for the SecureRandom service is
OpenSSLRandom, which uses the OpenSSL PRNG as its data source.  So we were
effectively seeding the OpenSSL PRNG with itself.  That's probably okay
(we trust that the OpenSSL PRNG was properly initialized with random data
before first use), but using /dev/urandom would seem like a better source
(or at least as good a source) for the additional seed data added with
each new connection.

Note that our PRNGFixes class replaces the default SecureRandom service
with one whose data source is /dev/urandom for certain vulnerable API
levels anyway.  (It also makes sure that the OpenSSL PRNG is properly
seeded before first use for certain vulnerable API levels.)
2014-09-06 18:15:25 -04:00
cketti 5f0f4e9c21 Merge pull request #485 from haselwarter
Conflicts:
	src/com/fsck/k9/preferences/Settings.java
2014-09-04 23:55:30 +02:00
cketti 5802e6a36a Remove getNotifyClass() from Folder 2014-09-04 23:54:06 +02:00
cketti 7edd1cb53c Simplify database upgrade when adding 'notify_class' to 'folders' 2014-09-04 23:54:06 +02:00
cketti bd9efa8d01 Whitespace fixes 2014-09-04 22:58:38 +02:00
Joe Steele 1783dd1a63 Merge branch 'master' into tls-client-cert-auth
Conflicts:
	res/layout/account_setup_basics.xml
	res/values/strings.xml
	src/com/fsck/k9/activity/setup/AccountSetupBasics.java
2014-08-19 16:19:02 -04:00
Joe Steele f7fb0cca41 Compare Enum types with ==, !=
Per comments in PR #473

https://github.com/k9mail/k-9/pull/474#commitcomment-7416979

https://github.com/k9mail/k-9/pull/474#commitcomment-7416999
2014-08-18 18:12:39 -04:00
Joe Steele c8f6c4d625 Eliminate searching for '3' in exception message
This was dead code.  The exception message will always start with either
"SMTP response is 0 length" from checkLine() or else "Negative SMTP reply"
from NegativeSmtpReplyException().

The problem originated from way back before 4.904.
2014-08-11 11:08:51 -04:00
Joe Steele 301ac48a38 Throw CertificateValidationException if EXTERNAL authentication fails
This is done when the SASL EXTERNAL mechanism isn't advertised (indicating
the possibility that the server did not accept the client certificate) or
when the command for authenticating with SASL EXTERNAL fails.

The CertificateValidationException will trigger a notification to the user
that there's an authentication problem that needs addressing.

Also, there were instances where CertificateValidationException was being
thrown with a new CertificateException as the cause for the purpose of
notifying the user when STARTTLS is not available.  This has been slightly
simplified by eliminating the need to include a new CertificateException
as a cause.
2014-08-11 11:07:54 -04:00
Joe Steele b557ba008c Implement SMTP AUTH EXTERNAL
Also, simplify by using Utility.base64Encode(String) in lieu of
new String(Base64.encodeBase64(String.getBytes())
2014-08-11 11:07:53 -04:00
Joe Steele c0be0eea12 Use the correct POP3 AUTH command 2014-08-11 11:07:51 -04:00
Joe Steele 65144e3759 Handle client certificate errors
If the alias is empty or null, don't bother using KeyChainKeyManager.

If the alias is not empty, confirm that it is associated with a
certificate, otherwise throw a CertificateValidationException
which will notify the user of the problem and ask the user to
check the server settings.

Likewise, the user is notified if the client certificate was
not accepted by the server.
2014-08-11 11:07:48 -04:00
Joe Steele 21cc3d9176 Remove ClientCertificateRequiredException
With this commit, KeyChainKeyManager no longer throws the exception and
AccountSetupCheckSettings no longer catches it.

It was being thrown when the server requested a client certificate but no
client certificate alias had been configured for the server.

The code was making the incorrect assumption that the server would only
request a client certificate when such a certificate was *required*.
However, servers can be configured to accept multiple forms of
authentication, including both password authentication and client
certificate authentication.  So a server may request a certificate without
requiring it.  If a user has not configured a client certificate, then
that should not be treated as an error because the configuration may be
valid and the server may accept it.

The only indication that a certificate is *required* is when a
SSLProtocolException is thrown, caused by a SSLHandshakeException
resulting from a fatal handshake alert message received from the server.
Unfortunately, such a message is fairly generic and only "indicates that
the sender was unable to negotiate an acceptable set of security
parameters given the options available."  So there is no definitive way to
know that a client certificate is required.

Also, KeyChainKeyManager.getCertificateChain() and getPrivateKey() no
longer throw IllegalStateException().  These methods are permitted to
return null, and such a response is appropriate if the user has deleted
client certificates from the device.  Again, this may or may not cause the
server to abort the connection, depending on whether the server *requires*
a client certificate.
2014-08-11 11:07:44 -04:00