]> git.ipfire.org Git - thirdparty/dovecot/core.git/log
thirdparty/dovecot/core.git
4 years agozlib: Handle empty zlib_save_level the same as if it doesn't exist
Timo Sirainen [Thu, 29 Jul 2021 08:37:23 +0000 (11:37 +0300)] 
zlib: Handle empty zlib_save_level the same as if it doesn't exist

4 years agozlib: Fix crash when zlib_save_level is set, but zlib_save is unset
Timo Sirainen [Thu, 29 Jul 2021 08:29:37 +0000 (11:29 +0300)] 
zlib: Fix crash when zlib_save_level is set, but zlib_save is unset

4 years agodriver-pgsql: Fix error leak
Siavash Tavakoli [Mon, 4 Oct 2021 10:14:04 +0000 (11:14 +0100)] 
driver-pgsql: Fix error leak

4 years agolib-compression: ostream-zlib - Fix non-blocking gz header write
Timo Sirainen [Mon, 4 Oct 2021 10:37:11 +0000 (12:37 +0200)] 
lib-compression: ostream-zlib - Fix non-blocking gz header write

Broken by 373dc6a93da1f6a0ad0c80dbb72566c2b3a295f2

4 years agolib-storage: mailbox_get_expunge*() - Fix assert-crash on index corruption
Timo Sirainen [Tue, 3 Aug 2021 17:38:13 +0000 (20:38 +0300)] 
lib-storage: mailbox_get_expunge*() - Fix assert-crash on index corruption

This happened in the very unlikely situation that indexes became corrupted
between two mail_transaction_log_view_set() calls.

Fixes:
Panic: file mailbox-get.c: line 112 (mailbox_get_expunges_init): assertion failed: (ret != 0)

4 years agolib: str_hash() - Ignore integer wrapping with ubsan
Timo Sirainen [Fri, 1 Oct 2021 12:21:38 +0000 (15:21 +0300)] 
lib: str_hash() - Ignore integer wrapping with ubsan

ATTR_NO_SANITIZE_INTEGER was already set for other hash functions, but
forgotten for this one.

Fixes e.g.:
Error: hash.c:529:16: runtime error: unsigned integer overflow: 4294967200 + 115 cannot be represented in type â€˜unsigned int’

4 years agolib: ostream-wrapper - Make sure o_stream_finish() has stream_errno != 0 when -1...
Stephan Bosch [Mon, 27 Sep 2021 22:51:03 +0000 (00:51 +0200)] 
lib: ostream-wrapper - Make sure o_stream_finish() has stream_errno != 0 when -1 is to be returned.

Fixes:

Panic: file ostream.c: line 209 (o_stream_flush): assertion failed: (stream->stream_errno != 0)

4 years agodriver-cassandra: Fix prepared statement pool leak
Siavash Tavakoli [Fri, 1 Oct 2021 09:42:16 +0000 (10:42 +0100)] 
driver-cassandra: Fix prepared statement pool leak

4 years agostats: Remove metric from stats dump, when removing dynamically.
sergey.kitov [Thu, 30 Sep 2021 15:42:08 +0000 (18:42 +0300)] 
stats: Remove metric from stats dump, when removing dynamically.

4 years agolib-ssl-iostream: istream-openssl - Remove assert() in i_stream_ssl_read().
Stephan Bosch [Wed, 23 Sep 2020 21:35:53 +0000 (23:35 +0200)] 
lib-ssl-iostream: istream-openssl - Remove assert() in i_stream_ssl_read().

4 years agolib-ssl-iostream: iostream-openssl - Allow plain_input buffer to remain filled in...
Stephan Bosch [Wed, 23 Sep 2020 21:35:30 +0000 (23:35 +0200)] 
lib-ssl-iostream: iostream-openssl - Allow plain_input buffer to remain filled in openssl_iostream_bio_input().

4 years agolib-ssl-iostream: iostream-openssl - Use o_stream_uncork_flush() to uncork the plain...
Stephan Bosch [Wed, 23 Sep 2020 20:02:41 +0000 (22:02 +0200)] 
lib-ssl-iostream: iostream-openssl - Use o_stream_uncork_flush() to uncork the plain output.

This flushes the stream after uncorking it, fixing I/O hang with nested SSL
layers.

4 years agolib-ssl-iostream: iostream-openssl - Return immediately from openssl_iostream_bio_out...
Stephan Bosch [Wed, 29 Sep 2021 22:17:47 +0000 (00:17 +0200)] 
lib-ssl-iostream: iostream-openssl - Return immediately from openssl_iostream_bio_output() upon error.

4 years agolib-ssl-iostream: iostream-openssl - Move error handling out of openssl_iostream_bio_...
Stephan Bosch [Wed, 23 Sep 2020 21:58:12 +0000 (23:58 +0200)] 
lib-ssl-iostream: iostream-openssl - Move error handling out of openssl_iostream_bio_output().

Makes the next commit clearer.

4 years agolib-ssl-iostream: test-iostream-ssl - Make finishing the ssl streams more robust.
Stephan Bosch [Fri, 16 Apr 2021 11:55:06 +0000 (13:55 +0200)] 
lib-ssl-iostream: test-iostream-ssl - Make finishing the ssl streams more robust.

Fixes:

Panic: file ostream.c: line 59 (o_stream_close_full): assertion failed: (stream->real_stream->error_handling_disabled)

4 years agolib-ssl-iostream: test-iostream-ssl - Properly mark client endpoints.
Stephan Bosch [Fri, 16 Apr 2021 16:18:07 +0000 (18:18 +0200)] 
lib-ssl-iostream: test-iostream-ssl - Properly mark client endpoints.

4 years agolib-ssl-iostream: test-iostream-ssl - Move small_packets_flush_callback().
Stephan Bosch [Fri, 16 Apr 2021 16:21:01 +0000 (18:21 +0200)] 
lib-ssl-iostream: test-iostream-ssl - Move small_packets_flush_callback().

4 years agolib-ssl-iostream: test-iostream-ssl - Move bufsize_flush_callback().
Stephan Bosch [Fri, 16 Apr 2021 16:19:55 +0000 (18:19 +0200)] 
lib-ssl-iostream: test-iostream-ssl - Move bufsize_flush_callback().

4 years agolib-ssl-iostream: ostream-openssl - Call SSL_shutdown() once stream is finished and...
Stephan Bosch [Fri, 16 Apr 2021 12:52:34 +0000 (14:52 +0200)] 
lib-ssl-iostream: ostream-openssl - Call SSL_shutdown() once stream is finished and buffer is empty.

4 years agolib: istream - Remove try_alloc_limit.
Stephan Bosch [Fri, 16 Apr 2021 10:31:13 +0000 (12:31 +0200)] 
lib: istream - Remove try_alloc_limit.

4 years agolib-ssl-iostream - iostream-openssl - Use i_stream_read_limited().
Stephan Bosch [Fri, 16 Apr 2021 10:27:48 +0000 (12:27 +0200)] 
lib-ssl-iostream - iostream-openssl - Use i_stream_read_limited().

4 years agolib: istream - Add i_stream_read_limited().
Stephan Bosch [Fri, 16 Apr 2021 10:25:43 +0000 (12:25 +0200)] 
lib: istream - Add i_stream_read_limited().

4 years agolib-ssl-iostream: istream-openssl - Simplify i_stream_ssl_read().
Stephan Bosch [Sun, 27 Sep 2020 13:19:05 +0000 (15:19 +0200)] 
lib-ssl-iostream: istream-openssl - Simplify i_stream_ssl_read().

Avoid using a stack buffer. Just fill the stream to the maximum buffer size.

4 years agolib-ssl-iostream: iostream-openssl - Add OPENSSL_IOSTREAM_SYNC_TYPE_NONE.
Stephan Bosch [Fri, 16 Apr 2021 16:08:50 +0000 (18:08 +0200)] 
lib-ssl-iostream: iostream-openssl - Add OPENSSL_IOSTREAM_SYNC_TYPE_NONE.

This is useful for calling openssl_iostream_handle_error() while avoiding
processing more I/O.

4 years agolib-ssl-iostream: Fix error handling if parent iostream fails
Timo Sirainen [Fri, 24 Sep 2021 16:16:43 +0000 (19:16 +0300)] 
lib-ssl-iostream: Fix error handling if parent iostream fails

Expand out and remove openssl_iostream_more(). It could have returned
errors to two different locations depending on whether the failure came
from SSL handshake or parent iostream.

4 years agolib-ssl-iostream: ostream-ssl - Add ssl_io helper variable
Timo Sirainen [Fri, 24 Sep 2021 16:15:22 +0000 (19:15 +0300)] 
lib-ssl-iostream: ostream-ssl - Add ssl_io helper variable

4 years agolib: o_stream_copy_error_from_parent() - Assert-crash if source stream_errno is 0
Timo Sirainen [Fri, 24 Sep 2021 15:59:29 +0000 (18:59 +0300)] 
lib: o_stream_copy_error_from_parent() - Assert-crash if source stream_errno is 0

This can help debug situations where error is missing.

4 years agoglobal: Call o_stream_copy_error_from_parent() only on errors
Timo Sirainen [Fri, 24 Sep 2021 15:59:21 +0000 (18:59 +0300)] 
global: Call o_stream_copy_error_from_parent() only on errors

4 years agolib-compression: ostream-zlib - Fix sending partial gz header to parent ostream
Timo Sirainen [Fri, 24 Sep 2021 15:58:02 +0000 (18:58 +0300)] 
lib-compression: ostream-zlib - Fix sending partial gz header to parent ostream

This practically wouldn't happen.

4 years agolib-http: test-http-client-errors - Revert previous retry changes
Timo Sirainen [Thu, 30 Sep 2021 13:38:23 +0000 (15:38 +0200)] 
lib-http: test-http-client-errors - Revert previous retry changes

The real bug is found now, so the previous fix attempt isn't useful.
Reverts ed1264368a5435c3080871380156978a8951fe26

4 years agolib-http: test-http-client-errors - Reset USR1 notification signal between tests
Timo Sirainen [Thu, 30 Sep 2021 13:32:24 +0000 (15:32 +0200)] 
lib-http: test-http-client-errors - Reset USR1 notification signal between tests

The "connection refused" test already set the signal as being received,
which caused the "connection refused backoff" test to randomly fail since it
thought the signal was immediately received.

4 years agolib: istream-concat - Prevent inheriting SIZE_MAX max buffer size from parent streams.
Stephan Bosch [Fri, 24 Sep 2021 22:48:12 +0000 (00:48 +0200)] 
lib: istream-concat - Prevent inheriting SIZE_MAX max buffer size from parent streams.

Only when all parent streams have SIZE_MAX for max buffer size, the concat stream will follow suit.

4 years agolib-storage: Add mailbox_list.disable_rebuild_on_corruption
Timo Sirainen [Mon, 27 Sep 2021 17:35:19 +0000 (20:35 +0300)] 
lib-storage: Add mailbox_list.disable_rebuild_on_corruption

If set, don't try to rebuild the mailbox list index even if corruption is
detected.

4 years agolib-dcrypt: Fix istream-decrypt snapshotting
Timo Sirainen [Fri, 24 Sep 2021 14:59:06 +0000 (17:59 +0300)] 
lib-dcrypt: Fix istream-decrypt snapshotting

This is mostly copy&pasted from istream-header-filter.

4 years agolib-storage: hide mail_cache_min_mail_count setting
Michael M Slusarz [Fri, 24 Sep 2021 00:02:17 +0000 (18:02 -0600)] 
lib-storage: hide mail_cache_min_mail_count setting

4 years agomaster: Avoid leaking master client fds to forked processes
Timo Sirainen [Sat, 25 Sep 2021 22:16:53 +0000 (01:16 +0300)] 
master: Avoid leaking master client fds to forked processes

4 years agostats: Improve error message for doveadm stats add.
sergey.kitov [Wed, 29 Sep 2021 11:58:22 +0000 (14:58 +0300)] 
stats: Improve error message for doveadm stats add.

4 years agostats: Check if metric already exists when adding dynamically.
sergey.kitov [Wed, 29 Sep 2021 11:57:34 +0000 (14:57 +0300)] 
stats: Check if metric already exists when adding dynamically.

4 years agodriver-pglsqlpool: Implement sql_get_flags() reliably
Timo Sirainen [Tue, 28 Sep 2021 12:35:05 +0000 (15:35 +0300)] 
driver-pglsqlpool: Implement sql_get_flags() reliably

Try to use one of the already connected databases. If none were found,
create a new database.

4 years agodriver-pgsql: Implement sql_get_flags() reliably
Timo Sirainen [Tue, 28 Sep 2021 12:32:56 +0000 (15:32 +0300)] 
driver-pgsql: Implement sql_get_flags() reliably

Some of the flags aren't known until server is connected to, so wait for the
connect to finish if necessary before returning the flags.

4 years agodriver-sqlpool: Implement sql_wait()
Timo Sirainen [Tue, 28 Sep 2021 12:33:47 +0000 (15:33 +0300)] 
driver-sqlpool: Implement sql_wait()

4 years agodriver-cassandra: Add wait() implementation
Siavash Tavakoli [Mon, 27 Sep 2021 10:59:09 +0000 (11:59 +0100)] 
driver-cassandra: Add wait() implementation

4 years agodriver-pgsql: Add wait() implementation
Siavash Tavakoli [Mon, 27 Sep 2021 10:58:21 +0000 (11:58 +0100)] 
driver-pgsql: Add wait() implementation

4 years agodict-sql: Add "sql_dict_wait()" implementation
Siavash Tavakoli [Mon, 27 Sep 2021 10:48:34 +0000 (11:48 +0100)] 
dict-sql: Add "sql_dict_wait()" implementation

lib-sql now has sql_wait().

4 years agolib-sql: Add "wait" vfunc
Siavash Tavakoli [Mon, 27 Sep 2021 10:46:07 +0000 (11:46 +0100)] 
lib-sql: Add "wait" vfunc

To be used in backends that support async operations. On deinit dicts
should wait for results and then exit.

4 years agodriver-pgsql: Keep a list of pending query results
Siavash Tavakoli [Mon, 27 Sep 2021 18:43:54 +0000 (19:43 +0100)] 
driver-pgsql: Keep a list of pending query results

To be used in wait() to determine if there are pending operations.

4 years agodict: Wait for all dicts to finish pending operations at shutdown
Timo Sirainen [Wed, 22 Sep 2021 17:57:06 +0000 (20:57 +0300)] 
dict: Wait for all dicts to finish pending operations at shutdown

This also changes the dict process to exit cleanly instead of early via
lib_exit().

4 years agodict: Unref dict connection immediately when connection is destroyed
Timo Sirainen [Thu, 11 Jul 2019 09:05:37 +0000 (12:05 +0300)] 
dict: Unref dict connection immediately when connection is destroyed

The delayed unrefing is needed when calling from dict command callbacks to
avoid calling dict_deinit() too early. But the connection's destroy() vfunc
can't be called directly from dict command callbacks, so there's no need
to add further delays. Especially when this happens at deinit where there is
no possibility of calling the delayed callback anymore.

4 years agodriver-pgsql: Fix escaped blob prefix
Siavash Tavakoli [Mon, 27 Sep 2021 10:42:07 +0000 (11:42 +0100)] 
driver-pgsql: Fix escaped blob prefix

Escaped strings must be prefixed with double backslash.

4 years agodriver-pgsql: Fix assert-crash when using binary fields
Siavash Tavakoli [Mon, 27 Sep 2021 10:35:38 +0000 (11:35 +0100)] 
driver-pgsql: Fix assert-crash when using binary fields

array_idx_modifiable() changed behavior in
1d4e5de8414ed93d1c810b30a91ad83d6d954861 and doesn't allocate space
anymore.

Fixes:
Panic: file array.c: line 10 (array_idx_modifiable_i): assertion failed: (idx < array->buffer->used / array->element_size)

4 years agodoveadm mail batch: Fix run() return value on errors
Timo Sirainen [Wed, 29 Sep 2021 16:04:37 +0000 (18:04 +0200)] 
doveadm mail batch: Fix run() return value on errors

The function always returned 0, even when there was an error. This practically
doesn't fix anything, but makes it work the way it was intended. It also makes
scan-build happier.

Broken by fd4360e30b695e596a5081a6080152188a12852a

4 years agomdbox: Add assert to help static analyzers
Timo Sirainen [Wed, 22 Sep 2021 16:34:32 +0000 (19:34 +0300)] 
mdbox: Add assert to help static analyzers

mdbox_sync_begin() can return 0 with sync_ctx=NULL, but not with the
parameters given here.

4 years agolib-smtp: smtp_client_transaction_get_state_name() - Fix return value
Timo Sirainen [Wed, 22 Sep 2021 16:02:24 +0000 (19:02 +0300)] 
lib-smtp: smtp_client_transaction_get_state_name() - Fix return value

Only the "new" state was returned correctly, while everything else was
wrong. This didn't really cause problems, because it was used only by
imaptest.

4 years agolib: Ignore COMPILE_ERROR_IF_TRUE() with --enable-static-checker
Timo Sirainen [Wed, 22 Sep 2021 15:46:39 +0000 (18:46 +0300)] 
lib: Ignore COMPILE_ERROR_IF_TRUE() with --enable-static-checker

4 years agolib: container_of() - Always return NULL if input pointer is NULL
Timo Sirainen [Mon, 27 Sep 2021 22:24:24 +0000 (01:24 +0300)] 
lib: container_of() - Always return NULL if input pointer is NULL

4 years agolib: container_of() - Avoid uintptr_t
Timo Sirainen [Wed, 22 Sep 2021 15:40:11 +0000 (18:40 +0300)] 
lib: container_of() - Avoid uintptr_t

Using uintptr_t confused Coverity, but char* works fine.

4 years agoindexer: Abort requests if indexer-worker disconnects unexpectedly
Timo Sirainen [Tue, 28 Sep 2021 21:21:17 +0000 (00:21 +0300)] 
indexer: Abort requests if indexer-worker disconnects unexpectedly

4 years agolib-storage: Add reason_code=mail:header_fields
Timo Sirainen [Mon, 19 Apr 2021 18:43:17 +0000 (21:43 +0300)] 
lib-storage: Add reason_code=mail:header_fields

4 years agolib-storage: Add more specific mail:* reason_codes in when prefetching
Timo Sirainen [Mon, 19 Apr 2021 18:38:35 +0000 (21:38 +0300)] 
lib-storage: Add more specific mail:* reason_codes in when prefetching

Added:
 * mail:attachment_keywords
 * mail:date
 * mail:snippet
 * mail:mime_parts
 * mail:imap_envelope
 * mail:imap_bodystructure

4 years agofts: Add reason_code=fts:index and fts:lookup
Timo Sirainen [Thu, 11 Mar 2021 21:38:01 +0000 (23:38 +0200)] 
fts: Add reason_code=fts:index and fts:lookup

Note that fts:index won't be used for email opening events, because the
emails are already opened by the indexer precache searching code due to
wanted_fields.

4 years agolib-storage: Add reason_code=mailbox:*
Timo Sirainen [Thu, 9 Sep 2021 13:45:23 +0000 (16:45 +0300)] 
lib-storage: Add reason_code=mailbox:*

Added:
 * mailbox:create
 * mailbox:update
 * mailbox:delete
 * mailbox:rename
 * mailbox:subscribe
 * mailbox:unsubscribe
 * mailbox:attributes_changed

4 years agolib-storage: Add reason_code=mailbox:search
Timo Sirainen [Wed, 17 Mar 2021 13:15:00 +0000 (15:15 +0200)] 
lib-storage: Add reason_code=mailbox:search

4 years agolib-storage: Add reason_code=mailbox:thread
Timo Sirainen [Wed, 17 Mar 2021 12:49:24 +0000 (14:49 +0200)] 
lib-storage: Add reason_code=mailbox:thread

This is split into a few different locations in the code.

4 years agolib-storage: Add reason_code=mailbox:vsize*
Timo Sirainen [Wed, 17 Mar 2021 15:48:57 +0000 (17:48 +0200)] 
lib-storage: Add reason_code=mailbox:vsize*

 * mailbox:vsize - mailbox vsize is asked
 * mailbox:vsize_update - mailbox vsize is updated (append/expunge)

4 years agolib-storage: Add reason_code=mailbox:sort
Timo Sirainen [Wed, 17 Mar 2021 15:48:33 +0000 (17:48 +0200)] 
lib-storage: Add reason_code=mailbox:sort

4 years agolib-storage: Add reason_code=mail:*
Timo Sirainen [Thu, 11 Mar 2021 17:43:22 +0000 (19:43 +0200)] 
lib-storage: Add reason_code=mail:*

 * mail:virtual_size
 * mail:physical_size
 * mail:snippet
 * mail:prefetch
 * mail:mime_parts
 * mail:date
 * mail:received_date
 * mail:save_date
 * mail:storage_id
 * mail:pop3_uidl
 * mail:pop3_order
 * mail:guid
 * mail:refcount
 * mail:refcount_id

4 years agolib-storage: Remove mailbox_set_reason()
Timo Sirainen [Thu, 11 Mar 2021 17:07:10 +0000 (19:07 +0200)] 
lib-storage: Remove mailbox_set_reason()

Event reason_codes should be used instead. Keep the "Mailbox opened"
debug message mainly because it's often used in CI tests.

4 years agoglobal: Remove mailbox_set_reason() calls
Timo Sirainen [Thu, 11 Mar 2021 17:06:00 +0000 (19:06 +0200)] 
global: Remove mailbox_set_reason() calls

These ones that are left are all rather unnecessary.

4 years agopop3: Add reason_code=pop3:cmd_<command name> to events
Timo Sirainen [Wed, 17 Mar 2021 15:40:46 +0000 (17:40 +0200)] 
pop3: Add reason_code=pop3:cmd_<command name> to events

4 years agopop3: Replace mailbox_set_reason() with reason_code=pop3:initialize
Timo Sirainen [Thu, 11 Mar 2021 17:04:36 +0000 (19:04 +0200)] 
pop3: Replace mailbox_set_reason() with reason_code=pop3:initialize

4 years agovirtual: Replace mailbox_set_reason() with reason_code=virtual:config_read
Timo Sirainen [Thu, 11 Mar 2021 15:29:59 +0000 (17:29 +0200)] 
virtual: Replace mailbox_set_reason() with reason_code=virtual:config_read

4 years agotrash: Replace mailbox_set_reason() with reason_code=trash:clean
Timo Sirainen [Thu, 11 Mar 2021 15:27:54 +0000 (17:27 +0200)] 
trash: Replace mailbox_set_reason() with reason_code=trash:clean

4 years agoquota: Replace mailbox_set_reason() with reason_code=quota:recalculate and quota...
Timo Sirainen [Tue, 9 Mar 2021 14:49:12 +0000 (16:49 +0200)] 
quota: Replace mailbox_set_reason() with reason_code=quota:recalculate and quota:count

4 years agopop3-migration: Replace mailbox_set_reason() with reason_code=pop3_migration:uidl_sync
Timo Sirainen [Thu, 11 Mar 2021 15:22:31 +0000 (17:22 +0200)] 
pop3-migration: Replace mailbox_set_reason() with reason_code=pop3_migration:uidl_sync

4 years agolazy_expunge: Replace mailbox_set_reason() with reason_code=lazy_expunge:expunge
Timo Sirainen [Thu, 11 Mar 2021 15:03:49 +0000 (17:03 +0200)] 
lazy_expunge: Replace mailbox_set_reason() with reason_code=lazy_expunge:expunge

4 years agolazy-expunge: Split off lazy_expunge_mail_expunge_move()
Timo Sirainen [Wed, 17 Mar 2021 16:23:11 +0000 (18:23 +0200)] 
lazy-expunge: Split off lazy_expunge_mail_expunge_move()

4 years agolib-storage: Replace mailbox_set_reason() with reason_code=storage:autoexpunge and...
Timo Sirainen [Thu, 11 Mar 2021 14:56:32 +0000 (16:56 +0200)] 
lib-storage: Replace mailbox_set_reason() with reason_code=storage:autoexpunge and storage:mailbox_list_rebuild

4 years agomdbox: Replace mailbox_set_reason() with reason_code=mdbox:rebuild
Timo Sirainen [Thu, 11 Mar 2021 14:53:35 +0000 (16:53 +0200)] 
mdbox: Replace mailbox_set_reason() with reason_code=mdbox:rebuild

4 years agomdbox: Split off mdbox_storage_rebuild_scan_prepare()
Timo Sirainen [Tue, 16 Mar 2021 17:02:06 +0000 (19:02 +0200)] 
mdbox: Split off mdbox_storage_rebuild_scan_prepare()

4 years agoindexer: Replace mailbox_set_reason() with reason_code=indexer:index_mailbox
Timo Sirainen [Thu, 11 Mar 2021 13:46:11 +0000 (15:46 +0200)] 
indexer: Replace mailbox_set_reason() with reason_code=indexer:index_mailbox

4 years agoimap: Add reason_code=imap:fetch_*
Timo Sirainen [Wed, 17 Mar 2021 15:28:03 +0000 (17:28 +0200)] 
imap: Add reason_code=imap:fetch_*

The main reason for these is to allow understanding why mails are being
opened. The possibilities:

 * imap:fetch_body
 * imap:fetch_header
 * imap:fetch_header_fields
 * imap:fetch_bodystructure
 * imap:fetch_size

4 years agoimap: Remove mailbox_set_reason() calls
Timo Sirainen [Thu, 11 Mar 2021 13:44:47 +0000 (15:44 +0200)] 
imap: Remove mailbox_set_reason() calls

They are now unnecessary because of the new reason_code field.

4 years agoimap: Add reason_code=imap:unhibernate for events during unhibernation.
Timo Sirainen [Thu, 11 Mar 2021 13:44:10 +0000 (15:44 +0200)] 
imap: Add reason_code=imap:unhibernate for events during unhibernation.

4 years agoimap: Add reason_code=imap:notify_update for events during NOTIFY updates
Timo Sirainen [Thu, 11 Mar 2021 13:39:09 +0000 (15:39 +0200)] 
imap: Add reason_code=imap:notify_update for events during NOTIFY updates

4 years agoimap: Add and use client_command_context.global_event
Timo Sirainen [Tue, 9 Mar 2021 14:37:18 +0000 (16:37 +0200)] 
imap: Add and use client_command_context.global_event

This way all the (potentially large) IMAP command parameters won't be
included in all the events. This change might be reverted in the future
if the performance worries go away.

The global event also contains reason_code=imap:cmd_<command name> field.

4 years agodoveadm: Remove mailbox_set_reason() calls
Timo Sirainen [Thu, 11 Mar 2021 13:26:56 +0000 (15:26 +0200)] 
doveadm: Remove mailbox_set_reason() calls

They are now unnecessary because of the new reason_code field.

4 years agodoveadm: Add reason_code=doveadm:cmd_<command name> to events
Timo Sirainen [Thu, 11 Mar 2021 13:26:09 +0000 (15:26 +0200)] 
doveadm: Add reason_code=doveadm:cmd_<command name> to events

4 years agodsync: ioloop context shouldn't deactivate after ioloop has run
Timo Sirainen [Mon, 19 Apr 2021 21:05:23 +0000 (00:05 +0300)] 
dsync: ioloop context shouldn't deactivate after ioloop has run

Normally that is wanted, but dsync reuses the same ioloop as the parent
doveadm connection, so after the inner io_loop_run() it's still running
in the doveadm connection's io callback.

Without this all the global events will be popped out, and the following
global event change commit will cause crashes.

4 years agodoveadm copy: Don't permanently activate source user's ioloop
Timo Sirainen [Mon, 19 Apr 2021 21:28:02 +0000 (00:28 +0300)] 
doveadm copy: Don't permanently activate source user's ioloop

4 years agodoveadm import: Don't permanently activate source user's ioloop
Timo Sirainen [Mon, 19 Apr 2021 21:24:39 +0000 (00:24 +0300)] 
doveadm import: Don't permanently activate source user's ioloop

After the source user is initialized, the original user's ioloop should be
activated back.

4 years agosubmission: Add reason_code=submission:cmd_<name>
Timo Sirainen [Wed, 17 Mar 2021 16:48:37 +0000 (18:48 +0200)] 
submission: Add reason_code=submission:cmd_<name>

4 years agolmtp: Add reason_code=lmtp:cmd_<name>
Timo Sirainen [Wed, 17 Mar 2021 16:48:24 +0000 (18:48 +0200)] 
lmtp: Add reason_code=lmtp:cmd_<name>

4 years agolib-smtp: Add reason_code=<reason_code_module>:cmd_*
Timo Sirainen [Wed, 17 Mar 2021 16:44:09 +0000 (18:44 +0200)] 
lib-smtp: Add reason_code=<reason_code_module>:cmd_*

This requires caller to set smtp_server_settings.reason_code_module.
For now only cmd_mail, cmd_rcpt and cmd_data are implemented. The other
commands are likely not very useful.

4 years agolib-http: http-client-request - Preserve global events' reason_code in request events
Timo Sirainen [Thu, 22 Apr 2021 17:27:45 +0000 (20:27 +0300)] 
lib-http: http-client-request - Preserve global events' reason_code in request events

Since HTTP requests are asynchronous, it's possible that the global events
go away before the HTTP request is finished. This way the reason_code will
be preserved in http_request_finished event.

4 years agolib: Add event_reason_code() for building reason codes easily
Timo Sirainen [Thu, 11 Mar 2021 15:54:18 +0000 (17:54 +0200)] 
lib: Add event_reason_code() for building reason codes easily

4 years agolib: Add event_reason_begin/end() API
Timo Sirainen [Tue, 9 Mar 2021 14:45:20 +0000 (16:45 +0200)] 
lib: Add event_reason_begin/end() API

This can be used to easily add reason_code to all events being emitted
within the begin..end calls. The reasons can also be nested. For example:

reason = event_reason_begin("reason1");
// ...
reason2 = event_reason_begin("reason2");
// ..
event_reason_end(&reason2);
event_reason_end(&reason);

This results in having reason_code=["reason1", "reason2"] for all events
emitted while reason2 exists.

4 years agolib: event_pop_global() - Assert-crash if trying to pop ioloop context's global root...
Timo Sirainen [Wed, 21 Apr 2021 13:55:57 +0000 (16:55 +0300)] 
lib: event_pop_global() - Assert-crash if trying to pop ioloop context's global root event

This makes it easier to debug bugs.

4 years agolib: Push/pop global event stack automatically when ioloop contexts are switched
Timo Sirainen [Thu, 11 Mar 2021 00:19:37 +0000 (02:19 +0200)] 
lib: Push/pop global event stack automatically when ioloop contexts are switched

4 years agolib-storage: mail_storage_service_next*() - On failure don't leave user's io context...
Timo Sirainen [Wed, 21 Apr 2021 14:11:54 +0000 (17:11 +0300)] 
lib-storage: mail_storage_service_next*() - On failure don't leave user's io context activated

4 years agolib-storage: Remove global event stack tracking
Timo Sirainen [Thu, 11 Mar 2021 00:18:55 +0000 (02:18 +0200)] 
lib-storage: Remove global event stack tracking

This will be implemented by ioloop contexts directly in the next commit.