]> git.ipfire.org Git - thirdparty/dovecot/core.git/log
thirdparty/dovecot/core.git
11 years agolib: test-data-stack - add realloc tests
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: test-data-stack - add realloc tests
These will fail noisily with a DEBUG build until the realloc/DEBUG
bug is fixed.

11 years agolib: data-stack - fix incorrect pointer comparison in t_try_realloc in DEBUG builds
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: data-stack - fix incorrect pointer comparison in t_try_realloc in DEBUG builds
When trying to work out if it's a valid realloc, we need to remember
that in DEBUG builds, we have hidden a size value (in a MEM_ALIGNED
space) before the pointer we return.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: data-stack - fix realloc/lowwater bug
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: data-stack - fix realloc/lowwater bug
If DEBUG is enabled, then it can try to look past the low-water mark
as the low-water mark wasn't moved during successful reallocs. This
condition is detected, and causes a panic.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: data-stack - t_try_realloc get alloc size right in DEBUG builds
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: data-stack - t_try_realloc get alloc size right in DEBUG builds
Also introduce a helper variable for the common expression for readability.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: data-stack - helper for last alloc ends at block.data+(size-left)
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: data-stack - helper for last alloc ends at block.data+(size-left)
Less to read, and less noisy.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: data-stack - add vital sanity-preserving assert to t_pop
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: data-stack - add vital sanity-preserving assert to t_pop
If something has re-ordered those two offsets, the following memset
will explode.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: data-stack - pull common code out of if/else branches in t_malloc_real
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: data-stack - pull common code out of if/else branches in t_malloc_real
Once the new block is set up nicely empty for use, it can be used exactly
like an old block that has enough space - so just merge the code paths.
(This changeset best viewed ignoring whitespace.)

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: data-stack - reorder full current block code
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: data-stack - reorder full current block code
Make the "enough space" and "block is full" branches in t_malloc_real
have the same code structure for parallelism. The 'block' variable is only
needed very locally, so shrink its scope, and avoid its use once it is
assigned to current_block, use that instead. Compacter readable expressions
have been favoured at the expense of longer lines (which will soon shrink).

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: data-stack - helper macro for requested/allocated size
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: data-stack - helper macro for requested/allocated size
Rather than #if/#else/#endif around such calculations, or even
having the possibility to mistype such expressions, just extract
the calculation into a helper macro defined appropriately for
the DEBUG mode.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: data-stack - disambiguate sizes in t_pop_verify
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: data-stack - disambiguate sizes in t_pop_verify
In DEBUG mode, the allocated size is bigger than the requested size, so
rename the variable to reflect its real meaning, and move it into a
tighter scope in the process.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: test-data-stack - too important a library not to be thrashed hard
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: test-data-stack - too important a library not to be thrashed hard
OK, it's thrashed a bit by other tests such as aqueue, str, etc., but these
tests attempt to probe all corner cases given detailed knowledge of the
limits of the block/frame implementation.

At the moment, no realloc functionality is tested, as with DEBUG builds
they would fail very noisily.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: data-stack - simplify expressions in data_stack_last_buffer_reset
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: data-stack - simplify expressions in data_stack_last_buffer_reset
Noisy expression used more than once, give it a meaningful name.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: data-stack - enable tighter sanity checks on stack_block allocations
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: data-stack - enable tighter sanity checks on stack_block allocations
The canary doesn't have to be NULL. That's only effective if it will be read
and dereferenced as a pointer. If used as an integer, it's a perfectly boring
one, and not likely to draw attention to itself.

Once the canary is in place, at least in debug mode, we can check it in
every function as a sanity check.

Make our poison stand out from other poison used elsewhere in the code.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: cosmetic - whitespace cleanup in allocator/memory-related code
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: cosmetic - whitespace cleanup in allocator/memory-related code
Indentation used spaces. Some trailing whitespace found.

$ git diff -w
$

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: add rudementary statistics gathering to data-stack debugging
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: add rudementary statistics gathering to data-stack debugging
These currently just enhance the overly-large alloc_size warning
message in t_malloc_real() to show what the history of allocations
is. New warnings look like this:
 Warning: Growing data stack by 32768 as 'test_run_funcs' reaches 16416 bytes from 202 allocations.

Future possible directions:
t_malloc_real() could be further modified to identify badly-behaved
regions of code that allocate lots of smaller blocks as it happens
(which might be noisy). t_pop() could be modified to detect such code
after it exits its block (so just one warning per instance of
misbehaviour).

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: add markers to data-stack debug prints
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: add markers to data-stack debug prints
Only the DEBUG code will have access to the frame's marker.

11 years agolib: add identifying markers to data-stack frames
Phil Carmody [Mon, 28 Jul 2014 13:45:33 +0000 (16:45 +0300)] 
lib: add identifying markers to data-stack frames
Add a string parameter to t_push() so that in DEBUG mode,
misbehaviour inside a stack level can be blamed on someone.

Default the T_BEGIN macro to automatigally use __FUNCTION__ or
__FILE__:__LINE__ as that identifier, therefore no clients of
those macros need to change.

ioloop used t_push() directly as it wanted customised diagnostic
strings. To preserve this friendliness, also introduce a t_push_named()
which takes a format string with paramters.

Apart from the unused paramter, a non-DEBUG build should see no
changes.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agodoveadm: Added dict commands to access lib-dict via command line.
Timo Sirainen [Mon, 28 Jul 2014 13:40:25 +0000 (16:40 +0300)] 
doveadm: Added dict commands to access lib-dict via command line.
For debugging and data dumping purposes.

11 years agolib-storage: Don't allow '/' for filesystem based mailbox list backends if their...
Timo Sirainen [Mon, 28 Jul 2014 12:14:17 +0000 (15:14 +0300)] 
lib-storage: Don't allow '/' for filesystem based mailbox list backends if their internal separator isn't '/'.
Basically this means that Maildir++ shouldn't be allowed to create mailboxes
with '/' in the name.

11 years agolast-login plugin added. It updates user's login timestamp to configured dict.
Timo Sirainen [Fri, 25 Jul 2014 11:10:04 +0000 (14:10 +0300)] 
last-login plugin added. It updates user's login timestamp to configured dict.
Example config:

plugin {
  last_login_dict = redis:host=127.0.0.1:port=6379
  #last_login_key = last-login/%u # default
}

11 years agolib-storage: Set mail_user->session_id before calling mail_user_init()
Timo Sirainen [Fri, 25 Jul 2014 10:35:57 +0000 (13:35 +0300)] 
lib-storage: Set mail_user->session_id before calling mail_user_init()

11 years agolib-http: Fixed linking test programs.
Timo Sirainen [Mon, 21 Jul 2014 08:00:59 +0000 (11:00 +0300)] 
lib-http: Fixed linking test programs.

11 years agolib-http: Added initial support for server-side HTTP API.
Stephan Bosch [Mon, 21 Jul 2014 07:54:05 +0000 (10:54 +0300)] 
lib-http: Added initial support for server-side HTTP API.

11 years agorawlog: Added -i parameter to include the remote IP address in the filename.
Timo Sirainen [Mon, 21 Jul 2014 07:53:19 +0000 (10:53 +0300)] 
rawlog: Added -i parameter to include the remote IP address in the filename.

11 years agomailbox_list_index=yes: Don't update INBOX's STATUS information to index.
Timo Sirainen [Fri, 11 Jul 2014 13:49:35 +0000 (16:49 +0300)] 
mailbox_list_index=yes: Don't update INBOX's STATUS information to index.
This should reduce disk I/O

11 years agoauth: If userdb prefetch is configured wrong, return temporary failure instead of...
Timo Sirainen [Fri, 11 Jul 2014 11:27:52 +0000 (14:27 +0300)] 
auth: If userdb prefetch is configured wrong, return temporary failure instead of "user not known"

11 years agolib-http: Debug log now includes where HTTP requests spent their time on.
Timo Sirainen [Fri, 11 Jul 2014 11:17:17 +0000 (14:17 +0300)] 
lib-http: Debug log now includes where HTTP requests spent their time on.

11 years agolib: Added fd=-1 assert to i_close_fd() macro.
Timo Sirainen [Fri, 11 Jul 2014 09:10:02 +0000 (12:10 +0300)] 
lib: Added fd=-1 assert to i_close_fd() macro.
This way we'll see clearly where it fails, instead of just seeing assert in
close_keep_errno() without an easy way to see where it crashed.

11 years agolib: ioloop-epoll didn't correctly check if there were any IO events.
Timo Sirainen [Fri, 11 Jul 2014 08:14:41 +0000 (11:14 +0300)] 
lib: ioloop-epoll didn't correctly check if there were any IO events.
Alternatively we could have checked for array_count(&ctx->events) >
ctx->deleted_count, but this code is a bit more understandable.

This change doesn't actually fix any proper bugs, it just causes the process
to crash instead of going to infinite wait loop.

11 years agolib: file_*_lock() with flock() timeouts should have returned errno=EAGAIN
Timo Sirainen [Thu, 10 Jul 2014 21:20:41 +0000 (00:20 +0300)] 
lib: file_*_lock() with flock() timeouts should have returned errno=EAGAIN
(Instead of EINTR.)

11 years agolmtp: Remove <> from Delivered-To: header.
Timo Sirainen [Thu, 10 Jul 2014 15:31:10 +0000 (18:31 +0300)] 
lmtp: Remove <> from Delivered-To: header.
This annoyingly changes Dovecot behavior in the middle of v2.2.x series, but
the earlier value was definitely wrong.. Perhaps we still need to provide a
setting for this, but that's pretty annoying as well.

11 years agolib: Compiler warning fixes for 32bit systems
Timo Sirainen [Thu, 10 Jul 2014 15:17:44 +0000 (18:17 +0300)] 
lib: Compiler warning fixes for 32bit systems

11 years agolib: test-istream-tee - randomise which tee stream lags behind the others
Phil Carmody [Thu, 10 Jul 2014 12:59:53 +0000 (15:59 +0300)] 
lib: test-istream-tee - randomise which tee stream lags behind the others
Just in case there's something special about the start or the end of the
list of children, make each file be the one that lags behind the others.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: test-istream-tee - more randomisation to the tests
Phil Carmody [Thu, 10 Jul 2014 12:59:53 +0000 (15:59 +0300)] 
lib: test-istream-tee - more randomisation to the tests
Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: test-istream-tee - verify _read returns correct values after _set_size()
Phil Carmody [Thu, 10 Jul 2014 12:59:53 +0000 (15:59 +0300)] 
lib: test-istream-tee - verify _read returns correct values after _set_size()
Previously, only an increase of 1 in the size was tested. This ensures that
0 and numbers > 1 are also tested.

Also add _idx to the asserts, so we know where in the loop it failed.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: test-istream-concat - add simultanious limit streams back into the mix
Phil Carmody [Thu, 10 Jul 2014 12:59:53 +0000 (15:59 +0300)] 
lib: test-istream-concat - add simultanious limit streams back into the mix
Return to the previous complex nested stream-type case.

1 time in 10, it tests the simple case of:

test_stream \
test_stream -}- concat_stream
test_stream /
(2-11 of these)

9 times in 10, it tests this configuration instead:

test_stream \                  / limit_stream
test_stream -}- concat_stream {- limit_stream
test_stream /                  \ limit_stream
(2-11 of these)                 (1-9 of these)

Since 31efe2d04793 lib: istream-concat read() returned -2 too early., all tests
pass every time.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: test-istream-concat - test only concat, not simultanious limit streams
Phil Carmody [Thu, 10 Jul 2014 12:59:53 +0000 (15:59 +0300)] 
lib: test-istream-concat - test only concat, not simultanious limit streams
Test just concat functionality in this unit test. Simultanious access of
limit streams can be tested elsewhere.

Without the fix in:
  31efe2d04793 lib: istream-concat read() returned -2 too early.
The failure previously seen in test-istream-concat would be still reproducable:
test-istream-concat.c:84: Assert failed: size >= TEST_MAX_BUFFER_SIZE
istream concat random ................................................ : FAILED
test: random seed #1 was 1403118493

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib-fs: Added FS_PROPERTY_COPY_METADATA and fs_set_metadata() tracking.
Timo Sirainen [Thu, 10 Jul 2014 12:40:08 +0000 (15:40 +0300)] 
lib-fs: Added FS_PROPERTY_COPY_METADATA and fs_set_metadata() tracking.

11 years agolib-fs: Added username and session_id to struct fs directly.
Timo Sirainen [Wed, 9 Jul 2014 12:55:59 +0000 (15:55 +0300)] 
lib-fs: Added username and session_id to struct fs directly.

11 years agolib-fs: Added fs_settings.username and .session_id
Timo Sirainen [Wed, 9 Jul 2014 12:24:21 +0000 (15:24 +0300)] 
lib-fs: Added fs_settings.username and .session_id

11 years agolib-storage: Added struct mail_user.session_id
Timo Sirainen [Wed, 9 Jul 2014 12:20:59 +0000 (15:20 +0300)] 
lib-storage: Added struct mail_user.session_id

11 years agolib-http: Made sure that connections that are still connecting to the server aren...
Stephan Bosch [Wed, 9 Jul 2014 07:55:27 +0000 (10:55 +0300)] 
lib-http: Made sure that connections that are still connecting to the server aren't marked as idle.

11 years agolib-index: Don't update log_file_tail_offset unnecessarily.
Timo Sirainen [Mon, 7 Jul 2014 13:21:08 +0000 (16:21 +0300)] 
lib-index: Don't update log_file_tail_offset unnecessarily.
Update it only if we're already writing to transaction log anyway or if
we're required to update the offset because mail_index_sync_commit() has
increased it past non-external transactions (this is especially important
with mdbox map index).

11 years agolib-storage: Minor code cleanup to istream-mail.
Timo Sirainen [Mon, 7 Jul 2014 10:24:22 +0000 (13:24 +0300)] 
lib-storage: Minor code cleanup to istream-mail.
eof=TRUE shouldn't be possible with ret=-2, so this just makes it clearer
what the code's intention is.

11 years agolib: i_stream_read_copy_from_parent() needs to update access counter also when return...
Timo Sirainen [Mon, 7 Jul 2014 10:15:33 +0000 (13:15 +0300)] 
lib: i_stream_read_copy_from_parent() needs to update access counter also when returning -2
This finishes the 467a4d19f873 fix.

11 years agovirtual: Fixed assert-crashes where trying to open an already opened backend mailbox.
Timo Sirainen [Sun, 6 Jul 2014 16:08:59 +0000 (19:08 +0300)] 
virtual: Fixed assert-crashes where trying to open an already opened backend mailbox.

11 years agolib: istream-tee wasn't returning data correctly always.
Timo Sirainen [Fri, 4 Jul 2014 12:33:12 +0000 (15:33 +0300)] 
lib: istream-tee wasn't returning data correctly always.
This fixes an assert-crash in istream-tee.c. (Hopefully it was always
assert-crashing instead of returning corrupted data.)

11 years agolib: failures - cosmetic write_full cleanup
Phil Carmody [Fri, 4 Jul 2014 11:48:44 +0000 (14:48 +0300)] 
lib: failures - cosmetic write_full cleanup
Error message should have a trailing newline.
Use the POSIX macro for stderr's file number, rather than its numeric value.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agoconfig: parser - trivial error message typo
Phil Carmody [Fri, 4 Jul 2014 11:18:25 +0000 (14:18 +0300)] 
config: parser - trivial error message typo
Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolmtp: Small code cleanup
Timo Sirainen [Fri, 4 Jul 2014 11:17:54 +0000 (14:17 +0300)] 
lmtp: Small code cleanup

11 years agoimap: If FETCH fails because mail has already been expunged, don't log an error.
Timo Sirainen [Fri, 4 Jul 2014 11:16:16 +0000 (14:16 +0300)] 
imap: If FETCH fails because mail has already been expunged, don't log an error.

11 years agolib-storage: Bodystructure parsing flags weren't updated correctly on error conditions.
Timo Sirainen [Fri, 4 Jul 2014 11:15:41 +0000 (14:15 +0300)] 
lib-storage: Bodystructure parsing flags weren't updated correctly on error conditions.
This fixes an assert-crash sometimes when mail parsing failed.

11 years agolib-storage: istream-mail updates mail->expunged if it notices ENOENT from parent...
Timo Sirainen [Fri, 4 Jul 2014 11:14:21 +0000 (14:14 +0300)] 
lib-storage: istream-mail updates mail->expunged if it notices ENOENT from parent stream.

11 years agolib-storage: Log mail istream read failures in one place.
Timo Sirainen [Fri, 4 Jul 2014 11:01:53 +0000 (14:01 +0300)] 
lib-storage: Log mail istream read failures in one place.
Also handle ENOENT errors by checking if the mail has already been expunged,
and if so don't log an error, just return "mail is already expunged" error
to client.

11 years agoWhen creating istream-error, give an error string whenever possible.
Timo Sirainen [Fri, 4 Jul 2014 10:16:59 +0000 (13:16 +0300)] 
When creating istream-error, give an error string whenever possible.

11 years agolib-storage: If mail body reading failed, the error message may have contained only...
Timo Sirainen [Fri, 4 Jul 2014 10:16:01 +0000 (13:16 +0300)] 
lib-storage: If mail body reading failed, the error message may have contained only minimal errno string.
Even though the istream could have had a much better internal error message.
So show it.

11 years agolib-dict: Removed NFS flushing from dict-file backend.
Timo Sirainen [Fri, 4 Jul 2014 08:48:27 +0000 (11:48 +0300)] 
lib-dict: Removed NFS flushing from dict-file backend.

11 years agombox: If GUID lookup fails because mbox_min_index_size skipped indexes, say so in...
Timo Sirainen [Thu, 3 Jul 2014 19:24:05 +0000 (22:24 +0300)] 
mbox: If GUID lookup fails because mbox_min_index_size skipped indexes, say so in error message.

11 years agoacl: Global ACLs now support "patterns with spaces inside quotes"
Timo Sirainen [Thu, 3 Jul 2014 19:17:49 +0000 (22:17 +0300)] 
acl: Global ACLs now support "patterns with spaces inside quotes"

11 years agoacl: Oops, ignore_acls check was reversed.
Timo Sirainen [Thu, 3 Jul 2014 19:16:48 +0000 (22:16 +0300)] 
acl: Oops, ignore_acls check was reversed.

11 years agolib-compression: Compression ostreams may have caused parent ostream to use too much...
Timo Sirainen [Thu, 3 Jul 2014 18:55:31 +0000 (21:55 +0300)] 
lib-compression: Compression ostreams may have caused parent ostream to use too much memory.

11 years agolib: Added o_stream_flush_parent_if_needed() for wrapper ostreams.
Timo Sirainen [Thu, 3 Jul 2014 18:54:52 +0000 (21:54 +0300)] 
lib: Added o_stream_flush_parent_if_needed() for wrapper ostreams.

11 years agoacl: Create struct acl_mailbox also for shared root namespace mailboxes.
Timo Sirainen [Thu, 3 Jul 2014 17:42:08 +0000 (20:42 +0300)] 
acl: Create struct acl_mailbox also for shared root namespace mailboxes.
This fixes crashes where imap_acl code attempts to access ACLs for
nonexistent mailboxes inside shared root namespace. Alternatively the
imap_acl plugin could have checked the nonexistence of ACLs but this is
probably easier and more guaranteed to work.

11 years agolmtp: Removed code that attempts to deduplicate mail files by copying them between...
Timo Sirainen [Thu, 3 Jul 2014 17:28:16 +0000 (20:28 +0300)] 
lmtp: Removed code that attempts to deduplicate mail files by copying them between user mailboxes.
This sometimes started failing if the mail that was being used for copying
was deleted by the user. There's no good way for lmtp code to fix that
situation.

If deduplication is needed, it could be implemented in a more generic way
inside mailbox_copy() where after initial copy it would store the
destination struct mail to src_mail->last_copy_dest_mail. If another mail is
copied, the last_copy_dest_mail could be attempted to be used for the
copying and if that doesn't work it would fallback to regular copying. This
should probably be attempted only for lda/lmtp processes as it would just
cause extra overhead for others.

11 years agoCompile fix for old systems without SSL_OP_NO_COMPRESSION
Timo Sirainen [Thu, 3 Jul 2014 16:34:57 +0000 (19:34 +0300)] 
Compile fix for old systems without SSL_OP_NO_COMPRESSION

11 years agofts-lucene: Delay initialization to fix assert-crash with mbox
Timo Sirainen [Thu, 3 Jul 2014 16:27:45 +0000 (19:27 +0300)] 
fts-lucene: Delay initialization to fix assert-crash with mbox

11 years agoopenssl: optionally disable TLS compression
Phil Carmody [Thu, 3 Jul 2014 16:17:16 +0000 (19:17 +0300)] 
openssl: optionally disable TLS compression
Make ssl compression optional, but enabled by default. Other ssl options
might be tweakable in the future, so have a single ssl_options string,
and explode it into individual flags. (Compare postfix configuration.)
Based on an idea by Andreas Schulze <sca@andreasschulze.de>

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib-storage: Added mail_namespace_is_shared_user_root() and used it where useful.
Timo Sirainen [Thu, 3 Jul 2014 16:12:02 +0000 (19:12 +0300)] 
lib-storage: Added mail_namespace_is_shared_user_root() and used it where useful.
Most importantly this should fix a crash in ACL plugin where type=shared
namespace was used without any kind of per-user prefix/location (i.e. it
probably should have been a type=public namespace instead).

11 years agoacl: Compile fix caused by previous change
Timo Sirainen [Thu, 3 Jul 2014 16:10:33 +0000 (19:10 +0300)] 
acl: Compile fix caused by previous change

11 years agolib-storage: Move "shared" storage name to mail-storage-private.h where it can be...
Timo Sirainen [Thu, 3 Jul 2014 16:03:59 +0000 (19:03 +0300)] 
lib-storage: Move "shared" storage name to mail-storage-private.h where it can be used.

11 years agolib-storage: Minor parsing fix to namespace types: Use strcmp() instead of strncmp().
Timo Sirainen [Thu, 3 Jul 2014 16:00:46 +0000 (19:00 +0300)] 
lib-storage: Minor parsing fix to namespace types: Use strcmp() instead of strncmp().

11 years agovirtual: Never keep more than specified number of physical mailboxes open.
Timo Sirainen [Thu, 3 Jul 2014 14:44:32 +0000 (17:44 +0300)] 
virtual: Never keep more than specified number of physical mailboxes open.
This should make virtual mailboxes work for users who have a a ton of
mailboxes with a ton of mails. Earlier code would likely have failed either
with "Too many open files" or crashed with "Out of memory".

You can change the max number of open mailboxes with:

plugin {
  virtual_max_open_mailboxes = 64
}

The default is 64.

11 years agolib-index: Fixed error handling in mail_index_open()
Timo Sirainen [Thu, 3 Jul 2014 14:40:37 +0000 (17:40 +0300)] 
lib-index: Fixed error handling in mail_index_open()

11 years agolib-index: Index cache could have kept too many indexes open.
Timo Sirainen [Thu, 3 Jul 2014 14:29:58 +0000 (17:29 +0300)] 
lib-index: Index cache could have kept too many indexes open.
If a lot of indexes were allocated and then later on they were opened and
closed, the alloc-cache simply kept all the indexes open even after they
should have been closed.

11 years agolib: DLLIST*_REMOVE*() no longer breaks the linked list if we try to remove item...
Timo Sirainen [Thu, 3 Jul 2014 13:07:09 +0000 (16:07 +0300)] 
lib: DLLIST*_REMOVE*() no longer breaks the linked list if we try to remove item that doesn't exist there.
Hopefully there wasn't any code that actually did this, but it's safer this
way anyway. Perhaps it could be even made to assert-crash if it happens.

11 years agolib-storage: mailbox_get_metadata() now opens the mailbox only if it's necessary.
Timo Sirainen [Thu, 3 Jul 2014 12:26:32 +0000 (15:26 +0300)] 
lib-storage: mailbox_get_metadata() now opens the mailbox only if it's necessary.

11 years agovirtual: Recent flags dropping wasn't working as intended.
Timo Sirainen [Thu, 3 Jul 2014 11:54:43 +0000 (14:54 +0300)] 
virtual: Recent flags dropping wasn't working as intended.
In the old code '+' meant that \Recent flags were dropped also when the
virtual mailbox was EXAMINEd. SELECTing a mailbox always dropped \Recent
flags regardless of the '+' flag.

What should have happened (and does in new code) is that the \Recent flags
are dropped only on SELECT and only if '+' flag is set.

11 years agofts: If we detect corrupted fts expunge log, unlink it.
Timo Sirainen [Thu, 3 Jul 2014 11:37:08 +0000 (14:37 +0300)] 
fts: If we detect corrupted fts expunge log, unlink it.
This avoids the same error repeating forever.

11 years agolib-imap: test-imap-url - cosmetic whitespace cleanup
Phil Carmody [Thu, 3 Jul 2014 09:44:50 +0000 (12:44 +0300)] 
lib-imap: test-imap-url - cosmetic whitespace cleanup
Only whitespace changes. All trailing space removed, reindented:
 $ grep '[[:space:]]$' src/lib-imap/test-imap-url.c
 $ git diff -w
 $

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib-imap: test-imap-url - quieten successful sub-tests
Phil Carmody [Thu, 3 Jul 2014 09:42:11 +0000 (12:42 +0300)] 
lib-imap: test-imap-url - quieten successful sub-tests
Every sub-component of a URL doesn't need its own successful log, so use the
only-print-on-error test_out_quiet() function instead. All failures are just
as explicit as before.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib-test: test-common - add test_out_quiet() to reduce verbosity
Phil Carmody [Thu, 3 Jul 2014 09:42:11 +0000 (12:42 +0300)] 
lib-test: test-common - add test_out_quiet() to reduce verbosity
Like test_out() but only prints anything if success is false.
This makes it quite much like test_assert(), except that it
doesn't print the code fragment, it prints a custom string.
However, it still counts as a test in the total count, unlike
test_assert*()s.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib-imap: test_imap_url didn't compare port numbers
Phil Carmody [Thu, 3 Jul 2014 09:42:11 +0000 (12:42 +0300)] 
lib-imap: test_imap_url didn't compare port numbers
It only compare them when they were unset, and defaulting both to 0.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agoquota: Quota count tracking still was still incorrect in over-quota conditions.
Timo Sirainen [Thu, 3 Jul 2014 08:37:07 +0000 (11:37 +0300)] 
quota: Quota count tracking still was still incorrect in over-quota conditions.

11 years agolib-index: Recent idx->seq change in strmap forgot to initialize uid_lookup_seq in...
Timo Sirainen [Wed, 2 Jul 2014 20:41:10 +0000 (23:41 +0300)] 
lib-index: Recent idx->seq change in strmap forgot to initialize uid_lookup_seq in one place.

11 years agotest-quota-util: Link to quota-util.lo instead of .o
Timo Sirainen [Wed, 2 Jul 2014 17:53:46 +0000 (20:53 +0300)] 
test-quota-util: Link to quota-util.lo instead of .o
Hopefully fixes dependency tracking to work correctly?

11 years agoquota: Fixed quota_transaction_is_over() to handle "user is already over quota" case.
Timo Sirainen [Wed, 2 Jul 2014 17:36:49 +0000 (20:36 +0300)] 
quota: Fixed quota_transaction_is_over() to handle "user is already over quota" case.
If size=0 we didn't return failure. This change also fixes various potential
integer overflows in the check. Added unit test for the function.

11 years agoquota: Moved some functions to quota-util.c
Timo Sirainen [Wed, 2 Jul 2014 17:34:43 +0000 (20:34 +0300)] 
quota: Moved some functions to quota-util.c

11 years agolib: Added UINT64_SUM_OVERFLOWS()
Timo Sirainen [Wed, 2 Jul 2014 17:13:35 +0000 (20:13 +0300)] 
lib: Added UINT64_SUM_OVERFLOWS()
Maybe the unit tests are kind of unnecessary since the macro is so simple,
but at least it's now a well tested simple macro :)

11 years agopop3: pop3-commands - harden integer parsers against integer overflow
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
pop3: pop3-commands - harden integer parsers against integer overflow
In get_msgnum(), the invalid input "4772185884" (2^32*10/9) would be
parsed as being valid.

In get_size(), the invalid input "204963823041217240178" (2^64*10/9)
would be parsed as being valid.

We have helpers now, so use them.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: strnum - add permissive str_parse_uint() helper
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
lib: strnum - add permissive str_parse_uint() helper
Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: uri-util - hardern uri_parse_dec_octet() against overflow
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
lib: uri-util - hardern uri_parse_dec_octet() against overflow
Invalid input 284 (2^8*10/9) is incorrectly parsed as valid.
28 * 10 + 4 = 284 == 28 (mod 2^8), so the wrap detection fails.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib-http: test-http-url - add some tricky invalid numeric hostname URLs
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
lib-http: test-http-url - add some tricky invalid numeric hostname URLs
Try to get the numeric octet parser to fail. The RFCs specify that we should
fall back onto parsing them as domain names instead, and hence the unexpected
legitimacy of out-of-range numbers.

NOTE: This causes make check to report the following error:
http url valid [11]: http_url_parse(http://127.0.0.284/this/also/reverts/to/DNS)  : ok
test-http-url.c:328: Assert failed: urlp->have_host_ip == urlt->have_host_ip
http url valid [11] .................................................. : FAILED

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: uri-util - harden uri_parse_port against overflow
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
lib: uri-util - harden uri_parse_port against overflow
The invalid input 72817 (2^16*10/9) is parsed as a valid value.
7281 * 10 + 7 = 72817 == 7281 (mod 2^16), so the prev check fails.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib-http: test-http-url - make port number test cases harder
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
lib-http: test-http-url - make port number test cases harder
Exploit common parser weakeneses - out by one, and overflow detection failure.

NOTE: causes make check to fail with the following error:
http url invalid [13]: parse http://example.com:72817/index.html ..... : FAILED
http url invalid [13] ................................................ : FAILED

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agoimap: harden read_uoff_t() against overflow
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
imap: harden read_uoff_t() against overflow
Invalid strings like "20496382304121724029" (2^64*10/9) can be parsed
as valid. Use the new helper.

Change in error behaviour - previously overflows, if they were detected,
caused *p to point to the digit causing the overflow. Now it's undefined.
Current clients don't care about this difference, they just bail.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: strnum - add a permissive uoff_t parser
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
lib: strnum - add a permissive uoff_t parser
Functions like these are so cookie-cutter, we may as well use a macro.
Note that signed helpers, if they ever appear, will need more care.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: test-strnum - tests for the new partial-string parser
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
lib: test-strnum - tests for the new partial-string parser
We can simplify the main tests by always testing whether an appended
non-digit causes parsing to fail at the same time that we test it doesn't
fail with the new more permissive helpers.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: strnum - add permissive partial-string integer parser
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
lib: strnum - add permissive partial-string integer parser
Not all strings we want to parse are already strtok'ed into separate pieces.
Therefore add helpers which will read the integer, and return a pointer
past the parsed integer.

The previous helpers can be considered a special case which just follows up
with a check that the '\0' has been reached.

Showing a preference for const pointers generally, this does not try to
mimic the non-const interface of strto{l,ul,ll,ull}().

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib-imap: number parsing simplification and hardenning
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
lib-imap: number parsing simplification and hardenning
The invalid string "4772185884" (2^32*10/9) will be misparsed as being valid.
In uint32_t's, 477218588 * 10 + 4 = 477218588
Many large ranges have this issue, 477218588x-858993459x, 954437176x-...

We have helper functions - use them.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: strnum - harden str_to_uintmax against overflows
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
lib: strnum - harden str_to_uintmax against overflows
The invalid number "20496382304121724020" (2^64*10/9) will be parsed as valid.
2049638230412172402 * 10 does not noticably wrap, it becomes 2049638230412172404

Do not perform operations which might wrap, and then try to detect the issue,
just compare with the known fixed bounds before doing the multiplication.

Signed-off-by: Phil Carmody <phil@dovecot.fi>