Timo Sirainen [Mon, 7 Dec 2015 09:29:29 +0000 (11:29 +0200)]
doveadm: Fixed reseting getopt() with glibc when processing multiple commands in a single process.
This means commands run with doveadm batch or multiple commands in a single
doveadm-server connection.
glibc's getopt() man page says that optind=1 should reset it for scanning a
new argument vector, but this doesn't actually seem to work. Setting
optind=0 does work though, so use it everywhere.
Timo Sirainen [Mon, 7 Dec 2015 09:21:59 +0000 (11:21 +0200)]
doveadm-server: Reset getopt() before calling non-mail commands.
This fixes parsing their parameters when using multiple such commands within
a single doveadm connection.
Timo Sirainen [Sun, 6 Dec 2015 18:46:52 +0000 (20:46 +0200)]
lib-storage: mail_search_args_simplify() refactoring
Removed parent_arg from mail_search_args_simplify_extract_common_and() in
preperation for the next changeset.
Timo Sirainen [Sun, 6 Dec 2015 14:46:30 +0000 (16:46 +0200)]
lib-storage: SEARCH BODY "" wasn't properly being translated to SEARCH_ALL.
Instead if the next parameter was "" this happened (which could have been an
accidental space in doveadm search-query).
Timo Sirainen [Sun, 6 Dec 2015 13:10:10 +0000 (15:10 +0200)]
lib-charset: Added UTF-7 state checking unit test.
This was an idea of a way to test for a bug in FreeBSD iconv(), but nobody
reported if it did anything. So lets add it here and see.
Timo Sirainen [Fri, 4 Dec 2015 11:46:00 +0000 (13:46 +0200)]
lib-http: Give a better error message if request times out.
Instead of just giving the configured timeout, log how long the timeout
actually took for the oldest request in wait list. Also if the request was
retried, log how many times the request was sent and how long the request
took in total.
Timo Sirainen [Fri, 4 Dec 2015 10:15:49 +0000 (12:15 +0200)]
imap: Fixed assert-crash if client disconnected at a specific command state.
If there was a command with state=CLIENT_COMMAND_STATE_WAIT_SYNC and output
stream was already detected to be closed, we crashed with:
Timo Sirainen [Fri, 4 Dec 2015 09:38:00 +0000 (11:38 +0200)]
lib-index: mail_transaction_log_file_map() didn't properly check start_offset
If it was too high, it still returned successful mapping. This could have
caused an assert-crash later on when the start_offset was actually attempted
to be used.
Timo Sirainen [Thu, 3 Dec 2015 12:24:06 +0000 (14:24 +0200)]
fts: Added support for per-language tokenizer settings.
fts_tokenizer_<lang> now overrides fts_tokenizers setting.
fts_tokenizer_<name>_<lang> now overrides fts_tokenizer_<name> setting.
Timo Sirainen [Thu, 3 Dec 2015 10:22:24 +0000 (12:22 +0200)]
lib-ssl-iostream: Moved openssl_iostream_*error() to -common.c
login-common code only links with this file, so that's required for the
previous changes to actually work.
Timo Sirainen [Thu, 3 Dec 2015 10:19:12 +0000 (12:19 +0200)]
login, lib-ssl-iostream: Clear errors caused by manual EC key selection when there was no EC key.
EVP_PKEY_get1_EC_KEY() would return an error, which should be ignored
instead of being logged later on.
Timo Sirainen [Thu, 3 Dec 2015 09:55:33 +0000 (11:55 +0200)]
lib-ssl-iostream: Fixes to error handling.
Copy behavior from login-common/ssl-proxy-openssl.c:
- Handle stacked errors.
- Improve errors with ERR_TXT_STRING flag.
Timo Sirainen [Tue, 1 Dec 2015 15:31:08 +0000 (17:31 +0200)]
mail-log: If uid field is used, make sure newly saved mails actually get an UID.
With Maildir the UID is otherwise assigned on mail deliveries only if
dovecot-uidlist happens to get locked.
Timo Sirainen [Mon, 30 Nov 2015 19:36:51 +0000 (21:36 +0200)]
director: Don't treat empty hostname the same as having it.
This could have caused "host not given" errors if an empty "host=" was sent
to login process, even though hostip was also sent.
Fixed this in two places, although either one should have been enough.
Timo Sirainen [Mon, 30 Nov 2015 11:14:29 +0000 (13:14 +0200)]
lib-mail: rfc822_parse_content_param() was unescaping already unescaped parameters
This caused all Content-* parameter parsing to be unescaped once too many
times, resulting in somewhat broken BODY and BODYSTRUCTURE replies if any
<\> characters were used. Also MIME boundaries were parsed in case <\> was
used in them, but this probably didn't practically happen.
Timo Sirainen [Fri, 27 Nov 2015 13:24:41 +0000 (15:24 +0200)]
fts-solr: Fixed escaping query parameters.
Solr documentation says that "quoted string" would already work without
escaping, but that doesn't seem to be true (we were also missing the \"
escaping there). So we'll now escape all the special characters without
quotes around it, which seems to work. Also added '/' to list of special
characters, which is used by Solr 4.0.
Timo Sirainen [Fri, 27 Nov 2015 12:57:03 +0000 (14:57 +0200)]
zlib: Fixed copying causing cache corruption when zlib_save wasn't set.
dovecot.index.cache entries were broken/missing if:
- The zlib plugin is enabled;
- The zlib_save/zlib_save_level options are NOT enabled;
- The source message being copied is compressed;
- The mail_log plugin is logging "copy" events;
- The mail_log_fields setting includes at least one message header;
- The destination mailbox folder has an index file that is recording the
logged headers;
- The source mailbox folder does NOT have an index file recording the
logged headers.
Timo Sirainen [Fri, 27 Nov 2015 11:59:22 +0000 (13:59 +0200)]
Added mailbox { autoexpunge } setting.
This can be used to automatically expunge mails from specified mailboxes
after they're old enough. The expunges are done when the user is being
deinitialized. mailbox_list_index=yes should be enabled to have the best
performance with this setting.
Timo Sirainen [Thu, 26 Nov 2015 13:42:35 +0000 (15:42 +0200)]
quota-clone: Avoid assert-crash when quota recalculation is triggered.
Quota recalculation opened all mailboxes and got us back to
quota_clone_flush(), which caused another dict transaction to be opened,
which caused a crash with some dict backends.
Teemu Huovila [Wed, 25 Nov 2015 13:09:52 +0000 (15:09 +0200)]
lib-fts: Move ICU transliterator creation to fts-icu.h
This allows others to use transliterators without so much code duplication.
The transliterator still has to be destroyed by the user, with utrans_close().
Timo Sirainen [Tue, 24 Nov 2015 09:50:15 +0000 (11:50 +0200)]
imap: Fixed hanging if a pipelined IMAP command was waiting for previous command to sync.
..And the previous command was waiting for the next command to finish before
it would start syncing. For example FETCH+LOGOUT pipelined.
Timo Sirainen [Tue, 24 Nov 2015 09:15:47 +0000 (11:15 +0200)]
director: Fixed backend selection when multiple tags were used.
The previous algorithm was causing an uneven load for backends.
This change breaks compatibility with older director servers that were using
tags because of the different selection algorithm. The new director code
refuses to run within a cluster with old directors if tags are used.
Timo Sirainen [Mon, 23 Nov 2015 17:35:03 +0000 (19:35 +0200)]
director: With director_consistent_hashing=yes hosts_hash wasn't always calculated right.
If different servers had added hosts in different order, the hosts_hash
would have become different, which caused errors and resyncs.
Teemu Huovila [Wed, 18 Nov 2015 14:33:26 +0000 (16:33 +0200)]
fts: Remove default filters and tokenizers.
There aren't any specially good defaults that work for all the languages,
so it's better to just enforce explicit settings.