]>
git.ipfire.org Git - thirdparty/dovecot/core.git/log
Stephan Bosch [Tue, 3 Sep 2019 19:44:55 +0000 (21:44 +0200)]
lib: istream-base64-encoder - Fix handling of error, EOF and stream buffer overflow conditions.
Stephan Bosch [Tue, 3 Sep 2019 19:43:31 +0000 (21:43 +0200)]
lib: istream-base64-decoder - Fix handling of error, EOF and stream buffer overflow conditions.
Stephan Bosch [Tue, 3 Sep 2019 16:37:57 +0000 (18:37 +0200)]
lib: base64 - Restructure encoder to always fill the output buffer as much as possible.
This is not strictly required, but makes the encoder easier to use in streams
and less bug-prone in incremental encoding applications in general.
Stephan Bosch [Tue, 3 Sep 2019 16:15:57 +0000 (18:15 +0200)]
lib: base64 - Allow encoding line endings one octet at a time.
Stephan Bosch [Tue, 3 Sep 2019 19:10:55 +0000 (21:10 +0200)]
lib: base64 - Add more w_buf_len assertions to encoder.
Stephan Bosch [Tue, 3 Sep 2019 19:04:20 +0000 (21:04 +0200)]
lib: base64 - Use sizeof() for determining the size of the encoder w_buf.
Stephan Bosch [Tue, 3 Sep 2019 10:22:16 +0000 (12:22 +0200)]
lib: base64 - Fix base64_get_full_encoded_size() for size 0.
Stephan Bosch [Mon, 2 Sep 2019 20:48:30 +0000 (22:48 +0200)]
lib: istream-base64-decoder - Use i_stream_try_alloc() properly.
Stephan Bosch [Mon, 2 Sep 2019 19:56:37 +0000 (21:56 +0200)]
lib: istream-base64-encoder - Use i_stream_try_alloc() properly.
Markus Valentin [Tue, 3 Sep 2019 12:38:17 +0000 (14:38 +0200)]
imap: previews/snippets requested with lazy update the caching decision
If lazy is true set the lookup_abort to NOT_IN_CACHE_START_CACHING
which results in the snippet field becoming wanted for caching.
Markus Valentin [Tue, 3 Sep 2019 12:33:03 +0000 (14:33 +0200)]
lib-storage: change caching decision for lazy requests in cache lookup
In case lookup_abort is set to NOT_IN_CACHE_START_CACHING update the
cacheing decision for the requested field.
Markus Valentin [Tue, 3 Sep 2019 12:30:15 +0000 (14:30 +0200)]
lib-storage: introduce MAIL_LOOKUP_ABORT_NOT_IN_CACHE_START_CACHING
In some cases we would like to mark an field as to be cached but still
don't fetch it now. For this occasions this change introduces a new enum
value for mail_lookup_abort which allows to implement such a behaviour.
Markus Valentin [Tue, 3 Sep 2019 12:16:41 +0000 (14:16 +0200)]
lib-index: move mail_cache_decision_add to public header
To allow other components to mark fields as to be cached move the
declaration from mail-cache-private.h to mail-cache.h.
Aki Tuomi [Wed, 4 Sep 2019 07:50:06 +0000 (10:50 +0300)]
virtual: Free mail event when virtual mail is free'd
Forgotten on
c499c40caf37f766968a551909190c5b009a9b15
Timo Sirainen [Tue, 3 Sep 2019 16:23:09 +0000 (19:23 +0300)]
lib: test-event-flatten - Fix compiler warnings
For example:
test-event-flatten.c:170:18: warning: missing field 'tv_usec' initializer
[-Wmissing-field-initializers]
Timo Sirainen [Tue, 3 Sep 2019 12:49:13 +0000 (15:49 +0300)]
global: Replace timeout_add_short(0) calls with io_set_pending() where possible
These timeouts were added before io_set_pending() existed. This won't fix
anything, but makes the code cleaner.
Timo Sirainen [Tue, 3 Sep 2019 12:47:18 +0000 (15:47 +0300)]
login-common: Don't call client_input() directly in clients_notify_auth_connected()
This probably won't fix anything, but it's cleaner to get to client_input()
always from IO loop directly. Although it might shrink data stack's memory
usage.
Timo Sirainen [Tue, 3 Sep 2019 12:43:49 +0000 (15:43 +0300)]
login-common: Don't call client_input() directly in client_auth_failed()
Fixes a new assert-crash caused by
9aaf0554aeae4f8056eeef56cfd99bf386f4c009 :
Panic: file sasl-server.c: line 357 (authenticate_callback): assertion failed: (!client->authenticating)
This was caused by a code path:
- sasl_server_check_login()
- sasl_server_auth_failed()
- sasl_server_auth_cancel()
- call_client_callback()
- sasl_callback()
- client_auth_failed()
- client_input()
- another AUTHENTICATE/LOGIN was read
The solution is then to not call client_input() directly. It would have
also worked to just remove the assert though, but this fix is cleaner.
Aki Tuomi [Tue, 3 Sep 2019 08:58:18 +0000 (11:58 +0300)]
lib-dcrypt: Add static keyword to ECDSA_SIG_get0
Otherwise compilers complain as it's not declared anywhere.
Aki Tuomi [Tue, 3 Sep 2019 08:57:51 +0000 (11:57 +0300)]
lib-dcrypt: Free EVP_MD_CTX in dcrypt_openssl_digest
Aki Tuomi [Tue, 3 Sep 2019 08:57:17 +0000 (11:57 +0300)]
lib-dcrypt: Free existing BIGNUMs in setters
Aki Tuomi [Tue, 3 Sep 2019 06:10:13 +0000 (09:10 +0300)]
lib-dcrypt: Add ECDSA_SIG_set0 and ECDSA_SIG_get0 when missing
These are needed for low-level operations
Aki Tuomi [Tue, 3 Sep 2019 06:06:29 +0000 (09:06 +0300)]
m4: Check for ECDSA_SIG_set0 and ECDSA_SIG_get0
These are not present in older libssl
Aki Tuomi [Mon, 2 Sep 2019 11:09:04 +0000 (14:09 +0300)]
lib-ssl-iostream: Remove problematic unit tests
These unit tests are unreliable with new versions of openssl
present in ubuntu 18 and debian buster.
Timo Sirainen [Sun, 1 Sep 2019 17:50:05 +0000 (20:50 +0300)]
auth: winbind - Make static analyzer happier
Aki Tuomi [Mon, 2 Sep 2019 11:17:50 +0000 (14:17 +0300)]
lib-dcrypt: Ignore padding when decoding base64url
Aki Tuomi [Mon, 2 Sep 2019 09:54:12 +0000 (12:54 +0300)]
dcrypt: Add signature format
Needed to implement RFC7515
Timo Sirainen [Fri, 26 Jul 2019 07:31:12 +0000 (10:31 +0300)]
global: Use mail_user_deinit() wherever possible
This makes sure that the user is fully deinitialized in the places where we
expect it to be.
This mainly makes sure that lmtp won't continue running code for the user
after lmtp has already switched to running as root. That could then end up
reading/writing files as root. This can happen only if there are bugs in
the code that leaks user references. Normally user is supposed to be fully
unreferenced before switching to root, so this change just adds an assert
to make sure it is.
Timo Sirainen [Fri, 26 Jul 2019 07:31:07 +0000 (10:31 +0300)]
lib-storage: Add mail_user_deinit()
Timo Sirainen [Fri, 30 Aug 2019 15:28:05 +0000 (18:28 +0300)]
man: Update "doveadm fts rescan" to say it usually just deletes FTS indexes
Aki Tuomi [Thu, 29 Aug 2019 14:09:55 +0000 (17:09 +0300)]
lib-dcrypt: Only use compressed points with dovecot internal formats
Aki Tuomi [Thu, 29 Aug 2019 13:54:27 +0000 (16:54 +0300)]
lib-dcrypt: Implement dcrypt_ecdh_derive_secret for OpenSSL
Aki Tuomi [Thu, 29 Aug 2019 13:43:45 +0000 (16:43 +0300)]
lib-dcrypt: Move shared secret derivation to dcrypt_openssl_echd_derive_secret
Makes it possible to expose it on next commit.
Aki Tuomi [Thu, 29 Aug 2019 13:52:51 +0000 (16:52 +0300)]
lib-dcrypt: Add API for dcrypt_ecdh_derive_secret
Aki Tuomi [Thu, 29 Aug 2019 09:56:21 +0000 (12:56 +0300)]
lib-dcrypt: Return value from RSA_set0_crt_params
Aki Tuomi [Thu, 29 Aug 2019 09:52:46 +0000 (12:52 +0300)]
lib-dcrypt: Fix key format in raw & jwk keys
It needs to be point compressed with named curve
Aki Tuomi [Thu, 29 Aug 2019 09:25:07 +0000 (12:25 +0300)]
lib-dcrypt: Use correct variables names in RSA_set0_key
Broken in
79e9ccdc4a536f3881ec2b9304020514d1f92590
Aki Tuomi [Thu, 29 Aug 2019 09:24:42 +0000 (12:24 +0300)]
lib-dcrypt: Use ERR_R_PASSED_NULL_PARAMETER
It's the correct error and exists for older OpenSSL
Added in
79e9ccdc4a536f3881ec2b9304020514d1f92590
Aki Tuomi [Tue, 27 Aug 2019 07:09:30 +0000 (10:09 +0300)]
lib-dcrypt: Fix memory leak in raw key test
Aki Tuomi [Mon, 23 Jan 2017 12:56:54 +0000 (14:56 +0200)]
lib-dcrypt: Add unit tests for changes
Aki Tuomi [Mon, 23 Jan 2017 12:56:38 +0000 (14:56 +0200)]
dcrypt-openssl: Implement signature API for OpenSSL
Aki Tuomi [Mon, 23 Jan 2017 15:40:01 +0000 (17:40 +0200)]
lib-dcrypt: Add padding parameter for RSA encrypt/decrypt
Aki Tuomi [Mon, 23 Jan 2017 12:56:27 +0000 (14:56 +0200)]
lib-dcrypt: Add signature API
Aki Tuomi [Fri, 23 Aug 2019 09:34:54 +0000 (12:34 +0300)]
lib-dcrypt: Unit test for JWK keys
Aki Tuomi [Wed, 21 Aug 2019 13:16:22 +0000 (16:16 +0300)]
lib-dcrypt: Add JWK key format support
Aki Tuomi [Fri, 23 Aug 2019 08:51:45 +0000 (11:51 +0300)]
lib-dcrypt: Implement usage and key ID accessors for openssl
Aki Tuomi [Fri, 23 Aug 2019 07:42:09 +0000 (10:42 +0300)]
lib-dcrypt: Add key usage and id
These can be used for e.g. JWK keys.
Aki Tuomi [Fri, 23 Aug 2019 08:51:21 +0000 (11:51 +0300)]
lib-dcrypt: Add key id and usage fields to dcrypt keys
Simplifies next change
Aki Tuomi [Fri, 23 Aug 2019 09:27:23 +0000 (12:27 +0300)]
lib-dcrypt: Make key unref with NULL no-op
Aki Tuomi [Thu, 22 Aug 2019 11:28:17 +0000 (14:28 +0300)]
doveadm: Do not call dcrypt_deinitialize
It can break openssl
Aki Tuomi [Thu, 22 Aug 2019 10:58:52 +0000 (13:58 +0300)]
lib-dcrypt: Clarify when dcrypt_deinitialize is to be used
It should never be called if it's going to be used later on.
Aki Tuomi [Wed, 21 Aug 2019 13:15:57 +0000 (16:15 +0300)]
m4: Check if some RSA key manipulators are present
Needed for JWK
Aki Tuomi [Thu, 22 Aug 2019 15:43:11 +0000 (18:43 +0300)]
lib: hmac - Add hkdf for key derivation
Aki Tuomi [Sun, 25 Aug 2019 17:55:24 +0000 (20:55 +0300)]
lib-dcrypt: Use BN_secure_new when available for secrets
Aki Tuomi [Sun, 25 Aug 2019 17:54:12 +0000 (20:54 +0300)]
m4: Check for BN_secure_new
Stephan Bosch [Wed, 28 Aug 2019 21:21:31 +0000 (23:21 +0200)]
lib: base64 - Add high-level data and string encode functions with data stack buffer output.
Stephan Bosch [Wed, 28 Aug 2019 22:42:14 +0000 (00:42 +0200)]
lib: base64 - Add flags and max_line_size parameters to the new high-level encode functions.
Cannot change the API of existing functions.
Stephan Bosch [Wed, 28 Aug 2019 22:04:54 +0000 (00:04 +0200)]
lib: base64 - Add high-level data decode functions with data stack buffer output.
Similar functions accepting C string input already exist.
Stephan Bosch [Wed, 28 Aug 2019 21:34:54 +0000 (23:34 +0200)]
lib: base64 - Add flags parameters to the new high-level decode functions.
Cannot change the API of existing functions.
Stephan Bosch [Tue, 27 Aug 2019 23:21:01 +0000 (01:21 +0200)]
lib: base64 - Add BASE64_DECODE_FLAG_IGNORE_PADDING.
Makes padding optional rather than either disallowed or required.
Stephan Bosch [Tue, 27 Aug 2019 18:46:42 +0000 (20:46 +0200)]
lib: base64 - Reformat flag handling in base64_decode_more().
Stephan Bosch [Tue, 27 Aug 2019 18:37:40 +0000 (20:37 +0200)]
lib: base64 - Remove unused assignment.
Found by Clang scan-build.
Timo Sirainen [Fri, 17 May 2019 07:33:53 +0000 (10:33 +0300)]
lib-imap: Make sure str_unescape() won't be writing past allocated memory
The previous commit should already prevent this, but this makes sure it
can't become broken in the future either. It makes the performance a tiny
bit worse, but that's not practically noticeable.
Timo Sirainen [Fri, 10 May 2019 16:24:51 +0000 (19:24 +0300)]
lib-imap: Don't accept strings with NULs
IMAP doesn't allow NULs except in binary literals. We'll still allow them
in regular literals as well, but just not in strings.
This fixes a bug with unescaping a string with NULs: str_unescape() could
have been called for memory that points outside the allocated string,
causing heap corruption. This could cause crashes or theoretically even
result in remote code execution exploit.
Found by Nick Roessler and Rafi Rubin
Stephan Bosch [Fri, 17 May 2019 08:17:19 +0000 (10:17 +0200)]
lib: base64 - Add support for decoding without padding.
Stephan Bosch [Wed, 15 May 2019 13:36:18 +0000 (15:36 +0200)]
lib: base64 - Add support for encoding without padding.
Stephan Bosch [Tue, 2 Apr 2019 18:45:54 +0000 (20:45 +0200)]
lib: istream-base64-encoder - Use the new low-level incremental Base64 encoding API.
Stephan Bosch [Mon, 1 Apr 2019 23:49:57 +0000 (01:49 +0200)]
lib: base64 - Add support for adding line breaks to encoded output.
Stephan Bosch [Wed, 15 May 2019 08:09:01 +0000 (10:09 +0200)]
lib: base64 - Add base64_get_full_encoded_size().
Stephan Bosch [Sat, 30 Mar 2019 17:57:34 +0000 (18:57 +0100)]
lib: base64 - Add decode flag for prohibiting whitespace.
Stephan Bosch [Mon, 26 Aug 2019 11:09:30 +0000 (13:09 +0200)]
lib: base64 - Deprecate src_pos_r parameter of base64_decode().
Only NULL pointer is allowed. This allows using the new incremental API
internally, thereby dropping the old decoder implementation.
Stephan Bosch [Sat, 30 Mar 2019 18:12:39 +0000 (19:12 +0100)]
lib: istream-base64-decoder - Use the new low-level incremental Base64 decoding API.
Stephan Bosch [Sat, 30 Mar 2019 18:08:10 +0000 (19:08 +0100)]
lib: base64 - Properly implemenent incremental decoding.
Stephan Bosch [Sat, 16 Mar 2019 20:19:49 +0000 (21:19 +0100)]
lib: base64 - Properly implemenent incremental encoding.
Stephan Bosch [Sun, 31 Mar 2019 11:18:04 +0000 (13:18 +0200)]
lib: buffer - Add buffer_get_avail_size().
This determines how much data can be added to buffer.
Stephan Bosch [Wed, 13 Feb 2019 18:36:52 +0000 (19:36 +0100)]
lib: istream-base64 - Add support for base64url encoding.
Stephan Bosch [Wed, 13 Feb 2019 16:55:31 +0000 (17:55 +0100)]
lib: base64 - Add support for base64url encoding.
Stephan Bosch [Wed, 13 Feb 2019 18:00:11 +0000 (19:00 +0100)]
lib: base64 - Make code suitable for encoding/decoding different Base64 variants.
Stephan Bosch [Fri, 17 May 2019 08:09:11 +0000 (10:09 +0200)]
lib: base64 - Add structural comments.
Stephan Bosch [Wed, 13 Feb 2019 18:09:43 +0000 (19:09 +0100)]
lib: base64.h - Move size macros.
Stephan Bosch [Wed, 13 Feb 2019 18:05:38 +0000 (19:05 +0100)]
lib: base64 - Make encoding table an explicit array.
Before, it was a string constant.
Stephan Bosch [Wed, 13 Feb 2019 18:03:02 +0000 (19:03 +0100)]
lib: base64.c - Move mapping tables.
Timo Sirainen [Tue, 28 May 2019 19:44:43 +0000 (22:44 +0300)]
lib: test-base64 - Make sure base64_decode() won't allocate any extra space
I was just considering an optimization where it would, until I realized it
could break some existing code.
Timo Sirainen [Tue, 28 May 2019 09:57:24 +0000 (12:57 +0300)]
lib: test-base64 - Cleanup: Use more exact test_asserts
This way it's easier to see why tests are failing.
Timo Sirainen [Tue, 28 May 2019 09:51:09 +0000 (12:51 +0300)]
lib: test-base64 - Cleanup: Use the same struct for test input and output
Josef 'Jeff' Sipek [Fri, 29 Mar 2019 07:59:09 +0000 (09:59 +0200)]
lib: test-base64 - Test MAX_BASE64_{EN,DE}CODED_SIZE() with existing tests
Timo Sirainen [Tue, 28 May 2019 10:35:11 +0000 (13:35 +0300)]
lib: base64 - Change MAX_BASE64_DECODED_SIZE() to be more exact
If the input has only full base64 blocks (is divisible by 4), there's no
need to add the extra +3.
Josef 'Jeff' Sipek [Thu, 28 Mar 2019 09:25:41 +0000 (11:25 +0200)]
lib: base64 - Simplify MAX_BASE64_ENCODED_SIZE() calculation
Rely on (X + (Y - 1)) / Y being the same as ceil(X / Y) when operating on
integers.
This has a couple of benefits over the previous expression:
1) the size argument is evaluated only once
2) the generated code is simpler (no conditional instructions)
3) the generated code is smaller
The generated code shrinks in terms of both bytes and instruction count.
The following table lists the number of bytes (B) and instructions (I) used
by the code before and after this change on an assortment of architectures
when the input is not known at compile time. Unless otherwise noted, the
results are based clang 6.0.1 output.
| before | after | delta
---------+---------+--------+-------------
aarch64 | 32B 8I | 24B 6I | -25%B -25%I
amd64 | 38B 10I | 25B 5I | -34%B -50%I
amd64 [1]| 43B 10I | 31B 6I | -28%B -40%I
armv7 | 36B 9I | 24B 6I | -33%B -33%I
i386 | 32B 12I | 20B 6I | -38%B -50%I
i386 [1] | 35B 11I | 25B 7I | -29%B -36%I
ppc32 | 44B 11I | 20B 5I | -55%B -55%I
ppc64 | 52B 13I | 32B 8I | -38%B -38%I
s390x | 74B 16I | 26B 5I | -65%B -69%I
sparcv9 | 36B 9I | 12B 3I | -66%B -66%I
[1] gcc 8.2.0
Aki Tuomi [Wed, 21 Aug 2019 10:26:29 +0000 (13:26 +0300)]
lib-dcrypt: Implement dcrypt_key_get_curve_public using openssl
Aki Tuomi [Wed, 21 Aug 2019 10:25:33 +0000 (13:25 +0300)]
lib-dcrypt: Add dcrypt_key_get_curve_public
Returns name of the curve of public key
Aki Tuomi [Mon, 19 Aug 2019 19:40:02 +0000 (22:40 +0300)]
lib-dcrypt: Add tests for raw keys
Aki Tuomi [Mon, 19 Aug 2019 11:39:05 +0000 (14:39 +0300)]
lib-dcrypt: Implement raw key API using OpenSSL
Aki Tuomi [Mon, 19 Aug 2019 11:20:47 +0000 (14:20 +0300)]
lib-dcrypt: Add API for dealing with raw keys
Aki Tuomi [Fri, 23 Aug 2019 16:39:16 +0000 (19:39 +0300)]
lib-dcrypt: Fix i2d_ASN1_OBJECT usage
i2d_ASN1_OBJECT tells how much memory we need.
Aki Tuomi [Fri, 23 Aug 2019 10:48:03 +0000 (13:48 +0300)]
lib-dcrypt: Symbolize maximum OID length
Aki Tuomi [Fri, 23 Aug 2019 10:46:33 +0000 (13:46 +0300)]
lib-dcrypt: Use len instead of ln
Timo Sirainen [Mon, 19 Aug 2019 09:11:59 +0000 (12:11 +0300)]
lib-http: Make http_client_request_delay_from_response() public
Timo Sirainen [Sat, 17 Aug 2019 10:44:53 +0000 (13:44 +0300)]
lib: Fix updating timeouts after time moves backwards
Broken by
b258137d0e0618ae792e3606071a1715d26f107b
Fixes:
Panic: file ioloop.c: line 479 (timeout_get_wait_time): assertion failed: (ret > 0 && tv_r->tv_sec >= 0 && tv_r->tv_usec >= 0)
Timo Sirainen [Sat, 17 Aug 2019 10:43:21 +0000 (13:43 +0300)]
lib: timeval_add/sub_usecs() - Add assert to make sure negative values aren't used
The current code doesn't work correctly if negative values are used.
The code could of course be changed to handle them, but maybe assert is
better to catch bugs.
Timo Sirainen [Sun, 18 Aug 2019 14:44:33 +0000 (17:44 +0300)]
lib, lib-dcrypt: Fix unit tests to check i_stream_read() return value