Timo Sirainen [Thu, 18 May 2017 20:13:38 +0000 (23:13 +0300)]
lib-storage: Fix mailbox list index records without guid having invalid flags
With LAYOUT=index the mailbox is found with its GUID. If it doesn't exist,
the mailbox has to be either \NonExistent or \NoSelect. It probably doesn't
make much difference which one, so we'll fix them by adding \NoSelect.
With other layouts the GUID is allowed to be empty, because it can be looked
up from the actual mailbox.
Timo Sirainen [Thu, 18 May 2017 17:18:24 +0000 (20:18 +0300)]
lib-imap-client: Change server IP only on connect() failures
Also log an warning-level message about it. This is mainly useful to see
that a slow connection could be caused by a connect() timeout. Since more
IPs are still available, it's not yet an error.
Timo Sirainen [Thu, 18 May 2017 16:42:03 +0000 (19:42 +0300)]
imapc: Fix infinite reconnection when server keeps sending corrupted state
When corrupted state was found, imapc_client_mailbox_reconnect() is called
to reconnect. This call skipped the normal "is it safe to reconnect?"
checks causing potentially infinite reconnections.
Timo Sirainen [Thu, 18 May 2017 16:40:04 +0000 (19:40 +0300)]
lib-imap: imap_parser_unref() should always set parser=NULL
Not just when the last reference is cleared. This is how *_unref()s should
work everywhere in Dovecot. This fixes a bug in lib-imap-client where a
parser could have been accessed after it was already freed.
Aki Tuomi [Thu, 18 May 2017 11:59:51 +0000 (14:59 +0300)]
virtual: Match any metadata condition
The old code ignored succesful earlier matches for
patterns, and stopped looking on first non-matching
metadata pattern. Now it breaks on error or on first
matching pattern.
Timo Sirainen [Thu, 18 May 2017 08:57:38 +0000 (11:57 +0300)]
director: Add old host's up/down and vhost count parameters to director_flush_socket
The "down" status allows the script to determine whether it should try to
perform any work on the old host. The vhost count may be unnecessary, but
might be useful for some purpose.
Including it in lib.h allows all of the Dovecot code (as well as any
external plugins) to just use these macros without worrying about what
system headers to include.
Timo Sirainen [Fri, 5 May 2017 12:20:05 +0000 (15:20 +0300)]
lib-storage: Avoid unnecessary UIDNEXT lookups after saving a mail
The vsize checking code was expecting that this would always be a cheap
operation, but with imapc code it could trigger a remote STATUS (UIDNEXT)
call. Do this only when we've checked that this mailbox is updating vsize
header at all.
Timo Sirainen [Fri, 12 May 2017 12:42:31 +0000 (15:42 +0300)]
imapc-quota: Avoid sending unnecessarily many GETQUOTA[ROOT] commands
The last_refresh == ioloop_timeval check didn't work, because the refresh
itself updated ioloop_timeval. This caused a single quota lookup to issue
multiple GETQUOTA[ROOT] commands to imapc.
Without this change, BSD make doesn't know how to make a couple of the
generated files because the BUILT_SOURCES file names don't match exactly
the left hand sides of the rules. (GNU make somehow manages to match the
rule even though it is not an exact match.)
Timo Sirainen [Tue, 2 May 2017 15:40:43 +0000 (18:40 +0300)]
master: Send SIGQUIT to processes running at deinit to close socket listeners.
This allows Dovecot to be restarted even when some lmtp/doveadm process is
running for a long time. Otherwise it would keep the inet_listener socket
open and prevent the new Dovecot from binding to the port.
Just compile all the storages, since the only benefit in limiting them
is to save a tiny bit of disk space. The recently added imapc quota code
fails to link if imapc storage isn't compiled in. This is the simplest
way to fix that.
Phil Carmody [Mon, 6 Mar 2017 17:42:18 +0000 (19:42 +0200)]
lib-fs: unit tests for fs-api/fs-posix
A core component, really ought to be covered by the unit tests.
This barely scrapes the surface, but is better than nothing:
filesystem/files/iterators, read/write/exists, good and bad cases.
Stephan Bosch [Mon, 3 Apr 2017 22:32:07 +0000 (00:32 +0200)]
lib-http: client: Fixed race condition between DNS refresh lookup and a soft connection timeout.
The refreshing DNS lookup cleared all the IPs, but the soft connection timeout (and maybe other code) still relied on them.
Adding tests everywhere for host->ips_count == 0 is annoying, so I changed the DNS lookup code such that the stale IPs remain present while the DNS lookup is being performed.
The pending lookup prevents new connections through http_client_host_refresh(), so this will not create potentially useless connections.
Timo Sirainen [Tue, 2 May 2017 09:18:40 +0000 (12:18 +0300)]
lib-imap: imap_append_string_for_humans() - Change CR/LF to space
Practically this shouldn't matter, because in email headers a CR/LF is
always followed by a space/tab. But maybe this can be used for some
other purposes in future, and it makes the unit tests clearer. :)
Aki Tuomi [Fri, 28 Apr 2017 09:51:20 +0000 (12:51 +0300)]
auth: Add username_filter for passdb block
username_filter lets you specify one or more pattern(s) for
including or excluding users. exclusion patterns are denoted
with ! prefix.
if any exclude matches the username, passdb will be skipped.
if any inclusions is specified, and the username does not match
one of them, passdb will be skipped.
Just write the original invalid keyword string as output. It might not be
entirely invalid - just invalid within this mailbox (e.g. a mailbox doesn't
allow new keywords).
Timo Sirainen [Thu, 27 Apr 2017 09:50:13 +0000 (12:50 +0300)]
lib-index: mail_index_update_keywords() - don't assert if adding/removing 0 keywords
Although it would be nice for the caller to check it, it's easier to do
here. It's mainly a problem with mailbox_keywords_create_valid() that may
unexpectedly create empty keywords.