]> git.ipfire.org Git - thirdparty/dovecot/core.git/log
thirdparty/dovecot/core.git
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>
11 years agolib: test-lib - add unit tests for str_to_*() helpers
Phil Carmody [Wed, 2 Jul 2014 15:21:24 +0000 (18:21 +0300)] 
lib: test-lib - add unit tests for str_to_*() helpers
This doesn't test all the helpers, but ensures both signed and unsigned
are tested, as are 32-bit and 64-bit cases. All the other helpers fall
back onto using one of those cases. Unless uintmax_t is larger than 64
bits, in which case this needs a revisit.

NOTE: This causes the following make check errors:
test-strnum.c:35: Assert(#7) failed: ret == u64tests[i].ret
test-strnum.c:35: Assert(#10) failed: ret == u64tests[i].ret
test-strnum.c:37: Assert(#10) failed: val == u64tests[i].val
str_to_uint64 ........................................................ : FAILED

Corresponding to test cases:
[7] = INVALID(18446744073709551616),
This does not wrap-past-0 (become smaller) on multiply, but wraps-past-0 on addition.
[10]= INVALID(20496382304121724020),
This wraps-past-n (becomes larger) on multiply.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: test-var-expand - use test_assert_idx() inside loops
Phil Carmody [Wed, 2 Jul 2014 15:21:23 +0000 (18:21 +0300)] 
lib: test-var-expand - use test_assert_idx() inside loops
It helps narrow down which test has failed.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib-http: Updated comments to RFC7230/RFC7231.
Stephan Bosch [Tue, 1 Jul 2014 21:10:16 +0000 (00:10 +0300)] 
lib-http: Updated comments to RFC7230/RFC7231.

11 years agolib-http: Fixed bug in parsing of quoted string with escape sequences.
Stephan Bosch [Tue, 1 Jul 2014 20:24:08 +0000 (23:24 +0300)] 
lib-http: Fixed bug in parsing of quoted string with escape sequences.

11 years agodoveadm fs delete: Added -n to usage text.
Timo Sirainen [Tue, 1 Jul 2014 13:04:20 +0000 (16:04 +0300)] 
doveadm fs delete: Added -n to usage text.

11 years agolib-http: Added http_client_request_get_target()
Timo Sirainen [Mon, 30 Jun 2014 21:10:21 +0000 (00:10 +0300)] 
lib-http: Added http_client_request_get_target()
This can be useful in error message logging without having to duplicate the
string.

11 years agofts-tika: Hiden "Unsupported Media Type" errors. Log HTTP status code on errors.
Timo Sirainen [Mon, 30 Jun 2014 14:25:02 +0000 (17:25 +0300)] 
fts-tika: Hiden "Unsupported Media Type" errors. Log HTTP status code on errors.

11 years agofts-tika: Fixed crash if Tika returned 200 reply without payload.
Timo Sirainen [Mon, 30 Jun 2014 13:41:32 +0000 (16:41 +0300)] 
fts-tika: Fixed crash if Tika returned 200 reply without payload.

11 years agolib-storage: Shrink "mailbox is being deleted" timeout from 5 mins to 30 secs.
Timo Sirainen [Mon, 30 Jun 2014 11:35:32 +0000 (14:35 +0300)] 
lib-storage: Shrink "mailbox is being deleted" timeout from 5 mins to 30 secs.
Even 30s may be too much since normally a few seconds would be enough, but
keep it high enough just in case.

11 years agolib-storage: When deleting mailbox, finish the expunges before marking mailbox deleted.
Timo Sirainen [Mon, 30 Jun 2014 11:34:00 +0000 (14:34 +0300)] 
lib-storage: When deleting mailbox, finish the expunges before marking mailbox deleted.
This decreases the amount of time the mailbox is visible but not accessible.

11 years agolib-storage: mailbox_delete() now handled "mailbox is being deleted" explicitly.
Timo Sirainen [Mon, 30 Jun 2014 11:31:47 +0000 (14:31 +0300)] 
lib-storage: mailbox_delete() now handled "mailbox is being deleted" explicitly.
Earlier we just treated it as \NoSelect mailbox and failed later.

11 years agolib-storage: Added index_storage_mailbox_delete_pre/post().
Timo Sirainen [Mon, 30 Jun 2014 11:30:43 +0000 (14:30 +0300)] 
lib-storage: Added index_storage_mailbox_delete_pre/post().
This avoids reimplementing the whole index_storage_mailbox_delete() for
storage backends that need to do more work in the middle.

11 years agoimap: If we disconnect client because mailbox is inconsistent, send the error message...
Timo Sirainen [Mon, 30 Jun 2014 11:29:26 +0000 (14:29 +0300)] 
imap: If we disconnect client because mailbox is inconsistent, send the error message before BYE.

11 years agoimap: Don't disconnect due to inconsistent mailbox unless the mailbox is the selected...
Timo Sirainen [Mon, 30 Jun 2014 11:28:31 +0000 (14:28 +0300)] 
imap: Don't disconnect due to inconsistent mailbox unless the mailbox is the selected mailbox.

11 years agoimap-url: Fixed handling of ipath-empty syntax (basically empty relative URLs).
Stephan Bosch [Fri, 27 Jun 2014 14:39:52 +0000 (17:39 +0300)] 
imap-url: Fixed handling of ipath-empty syntax (basically empty relative URLs).
This also normalizes Mailbox/ to Mailbox.
Initial indication reported by Coverity.

11 years agoauth: Added assert to make sure sysconf() returns what we expect.
Timo Sirainen [Fri, 27 Jun 2014 14:37:56 +0000 (17:37 +0300)] 
auth: Added assert to make sure sysconf() returns what we expect.
userdb nss shouldn't even be used though. So this is mainly to silence
Coverity.

11 years agolib: istream-concat read() returned -2 too early.
Timo Sirainen [Fri, 27 Jun 2014 13:29:18 +0000 (16:29 +0300)] 
lib: istream-concat read() returned -2 too early.

11 years agolib: rand - force reseeding with known seed from environment
Phil Carmody [Fri, 27 Jun 2014 13:20:25 +0000 (16:20 +0300)] 
lib: rand - force reseeding with known seed from environment
Use DOVECOT_SRAND=12345 as an environmental variable to force seeding
to that number.

The logic behind the logging is that the subsequent calls will almost
certainly be from random_fill_weak() which expects to have been seeded
from a CSPRNG - not a constant! Having this environmental variable set
in a production system that expects CSPRNG seeding should be flagging
diagnostics.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: remove unwanted srand()s from unit tests
Phil Carmody [Fri, 27 Jun 2014 13:17:50 +0000 (16:17 +0300)] 
lib: remove unwanted srand()s from unit tests
We'll get better coverage without them.

Note: this change causes the following test case failure occasionally:
test-istream-concat.c:88: Assert failed: size >= TEST_MAX_BUFFER_SIZE
istream concat random ................................................ : FAILED
test: random seed #1 was 1403027537

(The seed may vary, obviously.)

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib-test: use the new srand() tracking helpers to aid debugging
Phil Carmody [Fri, 27 Jun 2014 13:17:07 +0000 (16:17 +0300)] 
lib-test: use the new srand() tracking helpers to aid debugging
We can only be sure we know the entirity of the stream of numbers returned
by rand if rand_set_seed has been called precisely once, as after that we
can't be sure when it was called a 2nd or further time. However, at least
we can know that that has happened. (Likewise, any calls to srand() will
disturb the flow.)

Most unit test cases should be simple enough that there should be only one
seeding.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: use new srand() wrapper in lib
Phil Carmody [Fri, 27 Jun 2014 13:16:16 +0000 (16:16 +0300)] 
lib: use new srand() wrapper in lib
Of course, multiple seeding calls make it harder to know exactly
what numbers have been generated. But this is better than nothing.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: add rand helper library
Phil Carmody [Fri, 27 Jun 2014 13:15:24 +0000 (16:15 +0300)] 
lib: add rand helper library
Initially, just wrap srand() so that we can find out what the last-used
seed was. In situations where srand() is called only once (via this helper)
this lets us reproduce exactly the same stream of random data again in
order to reproduce rare crashes.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: two quite literally random little cleanups
Phil Carmody [Fri, 27 Jun 2014 13:13:37 +0000 (16:13 +0300)] 
lib: two quite literally random little cleanups
file-dotlock.c does not use randgen.h, remove the #include
test-buffer.c random() has been used rather than rand()

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: make printf_format_fix safer against shadowed %m behaviour
Phil Carmody [Fri, 27 Jun 2014 13:13:09 +0000 (16:13 +0300)] 
lib: make printf_format_fix safer against shadowed %m behaviour
If there's a %m followed by a %n or %m, then the %n or %m won't be seen.
For %m, that's mostly harmless, but for %n it's potentially kaboom.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: test printf_format_fix()
Phil Carmody [Fri, 27 Jun 2014 13:12:40 +0000 (16:12 +0300)] 
lib: test printf_format_fix()
Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib: test-istream-concat - early abort test loop on failure
Phil Carmody [Fri, 27 Jun 2014 13:11:40 +0000 (16:11 +0300)] 
lib: test-istream-concat - early abort test loop on failure
No point in continuing past the first failure.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolib-test: Enable looped tests to abort early on first failure
Phil Carmody [Fri, 27 Jun 2014 13:10:27 +0000 (16:10 +0300)] 
lib-test: Enable looped tests to abort early on first failure
Give them the ability to query the current failure state.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agolmtp: Reduce corking so we get command replies more quickly even if they are pipelined.
Timo Sirainen [Fri, 27 Jun 2014 11:23:46 +0000 (14:23 +0300)] 
lmtp: Reduce corking so we get command replies more quickly even if they are pipelined.
This may help avoid some LMTP client timeouts.

11 years agolmtp proxy: Make sure DATA stream size doesn't change unexpectedly.
Timo Sirainen [Fri, 27 Jun 2014 11:06:56 +0000 (14:06 +0300)] 
lmtp proxy: Make sure DATA stream size doesn't change unexpectedly.

11 years agolib-lda: If DATA input stream read fails, return error instead of truncating the...
Timo Sirainen [Fri, 27 Jun 2014 11:06:08 +0000 (14:06 +0300)] 
lib-lda: If DATA input stream read fails, return error instead of truncating the mail.

11 years agolib: Moved rawlog dir stat()s to iostream_rawlog_create() internally.
Timo Sirainen [Thu, 26 Jun 2014 17:48:13 +0000 (20:48 +0300)] 
lib: Moved rawlog dir stat()s to iostream_rawlog_create() internally.
This is required to allow TCP rawlogs to actually work.

11 years agolib: iostream-rawlog now supports TCP target with "tcp:host:port" as the path.
Timo Sirainen [Thu, 26 Jun 2014 17:46:21 +0000 (20:46 +0300)] 
lib: iostream-rawlog now supports TCP target with "tcp:host:port" as the path.
We'll use blocking sockets, so a slow rawlog server causes performance
problems also for Dovecot while it's waiting on rawlog writes.

11 years agolib-storage: BODYSTRUCTURE parsing failures weren't treated correctly.
Timo Sirainen [Thu, 26 Jun 2014 14:50:57 +0000 (17:50 +0300)] 
lib-storage: BODYSTRUCTURE parsing failures weren't treated correctly.
We still assumed that the parsing succeeded and assert-crashed later or
maybe returned invalid results. (This could have happened only if there was
a problem reading the mail stream.)

11 years agodsync: Fixed infinite looping on error condition.
Timo Sirainen [Thu, 26 Jun 2014 14:27:31 +0000 (17:27 +0300)] 
dsync: Fixed infinite looping on error condition.

11 years agodbox: mail_get_special() may have returned MAIL_FETCH_POP3_ORDER allocated from data...
Timo Sirainen [Thu, 26 Jun 2014 14:27:22 +0000 (17:27 +0300)] 
dbox: mail_get_special() may have returned MAIL_FETCH_POP3_ORDER allocated from data stack.
Although this seems to have worked for now, it shouldn't have been done.

11 years agolib-test: Fixed "Trying to allocate 0 bytes" assert-crash caused by recent test-istre...
Timo Sirainen [Wed, 25 Jun 2014 13:16:02 +0000 (16:16 +0300)] 
lib-test: Fixed "Trying to allocate 0 bytes" assert-crash caused by recent test-istream changes.

11 years agolib: fd_recv() no longer checks for msghdr.msg_controllen
Timo Sirainen [Fri, 20 Jun 2014 09:18:32 +0000 (12:18 +0300)] 
lib: fd_recv() no longer checks for msghdr.msg_controllen
It doesn't work at least in OpenBSD and Tru64, and apparently it shouldn't
really be needed anyway, so don't bother with it. We'll still keep checking
the cmsghdr since that appears to work everywhere now.

11 years agombox: istream-tee wasn't being used as expected with the new changes, causing crashes...
Timo Sirainen [Thu, 19 Jun 2014 14:16:24 +0000 (17:16 +0300)] 
mbox: istream-tee wasn't being used as expected with the new changes, causing crashes/hangs.
After wondering about this for a while I decided this was the only fully
reliable way of doing this. Although it would have been possible to change
the istream-tee code to support this:

child1 and child2 are tee-istream children:
 - i_stream_read(child1)
 - i_stream_read(child2)
 - i_stream_get_data(child1)

Because reading from the parent istream-tee updates all of its childrens'
buffer, there's no big problem (other than access_counter currently messing
up). But if one of the children weren't a direct child of tee-istream, but
there was a wrapper istream, the wrapper's buffer wouldn't have been updated
by the istream-tee read. So rather than spending time figuring out to fix
the access_counter it's probably better to have it clearly fail as the use
case can't be fully safe anyway.

11 years agolmtp: Create all proxy DATA streams before reading from them.
Timo Sirainen [Thu, 19 Jun 2014 12:50:40 +0000 (15:50 +0300)] 
lmtp: Create all proxy DATA streams before reading from them.
I'm not sure if this actually fixes anything or not, but it's still safer
to do it this way.

11 years agolib: i_stream_read_copy_from_parent() now directly updates the access counter
Timo Sirainen [Thu, 19 Jun 2014 12:15:24 +0000 (15:15 +0300)] 
lib: i_stream_read_copy_from_parent() now directly updates the access counter
This fixes a bug in istream-mail where it called i_stream_get_data() after
it and reset the stream's skip/pos.

11 years agolib: i_stream_get_data() should also reset eof=FALSE if it truncates the output.
Timo Sirainen [Thu, 19 Jun 2014 11:58:26 +0000 (14:58 +0300)] 
lib: i_stream_get_data() should also reset eof=FALSE if it truncates the output.

11 years agolib-mail: Fixed istream-dot unit test to work with the istream-test changes.
Timo Sirainen [Thu, 19 Jun 2014 11:34:54 +0000 (14:34 +0300)] 
lib-mail: Fixed istream-dot unit test to work with the istream-test changes.

11 years agoCompiler warning fix
Timo Sirainen [Thu, 19 Jun 2014 11:02:56 +0000 (14:02 +0300)] 
Compiler warning fix

11 years agolib: If two istreams share one parent, i_stream_get_data() may have returned corrupte...
Timo Sirainen [Thu, 19 Jun 2014 10:52:36 +0000 (13:52 +0300)] 
lib: If two istreams share one parent, i_stream_get_data() may have returned corrupted data to another.
This happened only for istreams that used parent's buffer directly instead
of having their own buffer. For now at least we've solved this by truncating
the other stream's buffer so it needs to be read again. Hopefully this is
good enough.

Added also unit test to check this functionality.

11 years agolib-test: Improved test-istream to catch more bugs
Timo Sirainen [Thu, 19 Jun 2014 09:38:11 +0000 (12:38 +0300)] 
lib-test: Improved test-istream to catch more bugs

11 years agolib: Fixed read buffer overflow in istream-base64-decoder error handling
Timo Sirainen [Thu, 19 Jun 2014 09:32:45 +0000 (12:32 +0300)] 
lib: Fixed read buffer overflow in istream-base64-decoder error handling

11 years agolib: Fixed potential read buffer overflow in JSON parser.
Timo Sirainen [Thu, 19 Jun 2014 09:31:55 +0000 (12:31 +0300)] 
lib: Fixed potential read buffer overflow in JSON parser.

11 years agologin proxy: Added login_source_ips setting.
Timo Sirainen [Mon, 16 Jun 2014 16:52:11 +0000 (19:52 +0300)] 
login proxy: Added login_source_ips setting.
The setting contains a list of IPs/hosts. The setting may be prefixed with
"?" character to indicate that only those IPs should be used that exist in
the current server (allowing the same config to be shared by multiple
servers).

The IPs are used round robin as the source IP address when proxy creates TCP
connections. This becomes useful when there are a ton of connections from
the proxy to the same destination IP, because TCP ports run out after ~64k
connections.

11 years agologin proxy: If passdb returns "source_ip" extra field, use it for outgoing connections.
Timo Sirainen [Mon, 16 Jun 2014 16:21:36 +0000 (19:21 +0300)] 
login proxy: If passdb returns "source_ip" extra field, use it for outgoing connections.

11 years agolib: Use __attribute__((returns_nonnull)) for the common memory/string functions.
Timo Sirainen [Mon, 16 Jun 2014 15:01:58 +0000 (18:01 +0300)] 
lib: Use __attribute__((returns_nonnull)) for the common memory/string functions.
Also added a couple of missing ATTR_MALLOCs.

11 years agolib: Changed mempool.h to use inline functions instead of macros.
Timo Sirainen [Mon, 16 Jun 2014 14:40:51 +0000 (17:40 +0300)] 
lib: Changed mempool.h to use inline functions instead of macros.
This way we can also mark p_malloc() with ATTR_MALLOC.

11 years agodoveadm who: Don't crash if server happens to send broken input (second try).
Timo Sirainen [Mon, 16 Jun 2014 13:27:12 +0000 (16:27 +0300)] 
doveadm who: Don't crash if server happens to send broken input (second try).
Found by Coverity

11 years agodoveadm dump: Avoid crashes with corrupted log files
Timo Sirainen [Mon, 16 Jun 2014 13:26:09 +0000 (16:26 +0300)] 
doveadm dump: Avoid crashes with corrupted log files

11 years agodoveadm dump log: Fixed potential crash when log header size was corrupted.
Timo Sirainen [Mon, 16 Jun 2014 12:47:12 +0000 (15:47 +0300)] 
doveadm dump log: Fixed potential crash when log header size was corrupted.

11 years agoAdded (void) prefix for ignoring return values we don't care about.
Timo Sirainen [Mon, 16 Jun 2014 12:42:39 +0000 (15:42 +0300)] 
Added (void) prefix for ignoring return values we don't care about.
Hopefully this quiets down Coverity warnings also of them?

11 years agoCheck for syscall errors that are quite unlikely to happen.
Timo Sirainen [Mon, 16 Jun 2014 12:41:52 +0000 (15:41 +0300)] 
Check for syscall errors that are quite unlikely to happen.
Flagged by Coverity.

11 years agoxml2text: Check for read()/write() failures and exit if they fail.
Timo Sirainen [Mon, 16 Jun 2014 12:35:07 +0000 (15:35 +0300)] 
xml2text: Check for read()/write() failures and exit if they fail.

11 years agolmtp: Proxying now logs successful and failed deliveries after DATA.
Timo Sirainen [Mon, 16 Jun 2014 10:12:40 +0000 (13:12 +0300)] 
lmtp: Proxying now logs successful and failed deliveries after DATA.

11 years agolmtp: Removed some unnecessary code
Timo Sirainen [Mon, 16 Jun 2014 10:03:31 +0000 (13:03 +0300)] 
lmtp: Removed some unnecessary code

11 years agoauth: Fixed wrong assert added by recent commit.
Timo Sirainen [Sun, 15 Jun 2014 08:03:32 +0000 (11:03 +0300)] 
auth: Fixed wrong assert added by recent commit.

11 years agotrivial variable-non-use fixes
Phil Carmody [Sat, 14 Jun 2014 08:58:57 +0000 (11:58 +0300)] 
trivial variable-non-use fixes
Flagged by coverity. In one, as we're printing an error message, we
can actually put the string to use, which might aid debugging. In
the other, the variable can just be killed.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agofts-lucene: Fix SnowballAnalyzer constructors
Phil Carmody [Fri, 13 Jun 2014 13:12:27 +0000 (16:12 +0300)] 
fts-lucene: Fix SnowballAnalyzer constructors
Coverity found the uninitialised pointers in the latter constructor (which
is never used - kill it?). In comparing the other constructor, the lack of
strdup() jumped out at me.

In fixing them both I migrated them to actual C++ initialisers, rather than
dumb assignments to uninitialised members. Also migrated to dovecot's i_*
functions. Also fixed indentation for the 3 functions touched.

Signed-off-by: Phil Carmody <phil@dovecot.fi>
11 years agoAdded several asserts to make sure duplicates aren't inserted into hash table.
Timo Sirainen [Fri, 13 Jun 2014 12:14:44 +0000 (15:14 +0300)] 
Added several asserts to make sure duplicates aren't inserted into hash table.
The previous commit hopefully fixed the problem causing auth and login
processes to sometimes die with "key not found from hash" error, but if not
maybe one of these will catch it.

11 years agolib-master: Fixed caching settings where both local_name and local_ip was specified.
Timo Sirainen [Fri, 13 Jun 2014 12:13:26 +0000 (15:13 +0300)] 
lib-master: Fixed caching settings where both local_name and local_ip was specified.
Since cache_find() didn't use local_ip for a lookup when local_name existed,
cache_add() shouldn't add both of them either, otherwise it could be
inserting duplicate values to the cache hash and cause crashes.

11 years agoMake sure we don't shift signed integers left by 24. They should be unsigned.
Timo Sirainen [Fri, 13 Jun 2014 08:35:40 +0000 (11:35 +0300)] 
Make sure we don't shift signed integers left by 24. They should be unsigned.

11 years agodbox: Fixed potential infinite looping when scanning a broken dbox file.
Timo Sirainen [Fri, 13 Jun 2014 08:21:07 +0000 (11:21 +0300)] 
dbox: Fixed potential infinite looping when scanning a broken dbox file.

11 years agoauth: Fixed handling userdb_userdb_import passdb extra field.
Timo Sirainen [Fri, 13 Jun 2014 07:25:22 +0000 (10:25 +0300)] 
auth: Fixed handling userdb_userdb_import passdb extra field.
Looks like some hg merging went wrong.
Found by Coverity

11 years agolib-http: Removed unnecessary for loop.
Timo Sirainen [Fri, 13 Jun 2014 07:22:49 +0000 (10:22 +0300)] 
lib-http: Removed unnecessary for loop.
Found by Coverity

11 years agodbox: Added asserts to dbox file fixing to make sure it doesn't go to infinite loop.
Timo Sirainen [Fri, 13 Jun 2014 00:09:26 +0000 (03:09 +0300)] 
dbox: Added asserts to dbox file fixing to make sure it doesn't go to infinite loop.
There apparently is a bug in here that will trigger this assert.

11 years agoimap, pop3: Remove the client from clients-list at the very end of the destroy function.
Timo Sirainen [Thu, 12 Jun 2014 23:54:21 +0000 (02:54 +0300)] 
imap, pop3: Remove the client from clients-list at the very end of the destroy function.
Especially with imap code the process title could have been refreshed too
early.

11 years agoCompiler warning fix
Timo Sirainen [Thu, 12 Jun 2014 23:34:19 +0000 (02:34 +0300)] 
Compiler warning fix

11 years agoUse the new [io]_stream_create_fd_*autoclose() functions wherever possible.
Timo Sirainen [Thu, 12 Jun 2014 23:19:15 +0000 (02:19 +0300)] 
Use the new [io]_stream_create_fd_*autoclose() functions wherever possible.

11 years agolib: Added [io]_stream_create_fd_*autoclose()
Timo Sirainen [Thu, 12 Jun 2014 23:18:53 +0000 (02:18 +0300)] 
lib: Added [io]_stream_create_fd_*autoclose()
These make it clearer that the fd parameter will be closed automatically
when the stream is closed.

Eventually (in v2.3) we'll want to get rid of the autoclose boolean
parameter in [io]_stream_create_fd().

11 years agodoveadm stats top: Fixed double-close()ing stats connection
Timo Sirainen [Thu, 12 Jun 2014 23:04:12 +0000 (02:04 +0300)] 
doveadm stats top: Fixed double-close()ing stats connection

11 years agodirector-test: Fixed double-close() on admin connection deinit
Timo Sirainen [Thu, 12 Jun 2014 23:01:55 +0000 (02:01 +0300)] 
director-test: Fixed double-close() on admin connection deinit

11 years agoAdded various asserts to try to silence Coverity false positives.
Timo Sirainen [Thu, 12 Jun 2014 22:57:04 +0000 (01:57 +0300)] 
Added various asserts to try to silence Coverity false positives.

11 years agolib-mail: message_parser_parse_next_block() now fully clears block_r to be safe case.
Timo Sirainen [Thu, 12 Jun 2014 22:52:13 +0000 (01:52 +0300)] 
lib-mail: message_parser_parse_next_block() now fully clears block_r to be safe case.
I'm not away of this hitting any bugs, but better to be safe.

11 years agoAdded "fall through" comments to switch statements where break is intentionally missing.
Timo Sirainen [Thu, 12 Jun 2014 22:35:13 +0000 (01:35 +0300)] 
Added "fall through" comments to switch statements where break is intentionally missing.
This should make Coverity quiet about these..

11 years agolib-storage: Fixed parsing corrupted mailbox list index header.
Timo Sirainen [Thu, 12 Jun 2014 22:30:14 +0000 (01:30 +0300)] 
lib-storage: Fixed parsing corrupted mailbox list index header.
Duplicate IDs should have caused an error instead of being silently ignored.
Found by Coverity

11 years agoimap-urlauth: Fatal failure error handling wasn't done correctly.
Timo Sirainen [Thu, 12 Jun 2014 22:26:14 +0000 (01:26 +0300)] 
imap-urlauth: Fatal failure error handling wasn't done correctly.
Found by Coverity

11 years agoreplication plugin: Synchronous notification timeout error wasn't logged as intended.
Timo Sirainen [Thu, 12 Jun 2014 22:22:23 +0000 (01:22 +0300)] 
replication plugin: Synchronous notification timeout error wasn't logged as intended.
Found by Coverity

11 years agolib-otp: OTP_MAX_WORD_LEN wasn't actually enforced, any word lengths could have been...
Timo Sirainen [Thu, 12 Jun 2014 22:20:25 +0000 (01:20 +0300)] 
lib-otp: OTP_MAX_WORD_LEN wasn't actually enforced, any word lengths could have been used.
Doesn't look like this could have caused any real problems.
Found by Coverity

11 years agofts: Improved doveadm fts dump for corrupted expunge log
Timo Sirainen [Thu, 12 Jun 2014 22:11:24 +0000 (01:11 +0300)] 
fts: Improved doveadm fts dump for corrupted expunge log
Although we may still be trying to allocate up to 2 GB of memory, but at
least no more than that now.
Found by Coverity

11 years agolib: Fixed file_dotlock_replace(flags=DOTLOCK_REPLACE_FLAG_VERIFY_OWNER|DOTLOCK_REPLA...
Timo Sirainen [Thu, 12 Jun 2014 22:02:48 +0000 (01:02 +0300)] 
lib: Fixed file_dotlock_replace(flags=DOTLOCK_REPLACE_FLAG_VERIFY_OWNER|DOTLOCK_REPLACE_FLAG_DONT_CLOSE_FD)
The verification check failed because fd was already set to -1 by that time.
Found by Coverity

11 years agodirector: Fixed crash if master_user_separator is set, but we didn't do a proxy lookup.
Timo Sirainen [Thu, 12 Jun 2014 21:57:06 +0000 (00:57 +0300)] 
director: Fixed crash if master_user_separator is set, but we didn't do a proxy lookup.
Found by Coverity

11 years agoimapc: Avoid crashing if server happens to send invalid resp-text-codes.
Timo Sirainen [Thu, 12 Jun 2014 21:51:44 +0000 (00:51 +0300)] 
imapc: Avoid crashing if server happens to send invalid resp-text-codes.
If [KEY VALUE] is missing the VALUE, just set it to "" instead of NULL.
Found by Coverity

11 years agofts: Minor code cleanup: Don't increment NULL pointer.
Timo Sirainen [Thu, 12 Jun 2014 21:46:34 +0000 (00:46 +0300)] 
fts: Minor code cleanup: Don't increment NULL pointer.

11 years agoRemoved pointless NULL checks.
Timo Sirainen [Thu, 12 Jun 2014 21:45:43 +0000 (00:45 +0300)] 
Removed pointless NULL checks.
Found by Coverity

11 years agoauth: Invalid userdb passwd-file and userdb templates may have caused crashes.
Timo Sirainen [Thu, 12 Jun 2014 21:30:27 +0000 (00:30 +0300)] 
auth: Invalid userdb passwd-file and userdb templates may have caused crashes.
Using just "key" parameter instead of "key=value" usually worked, but for
some keys the code assumed that there was a value and it dereferenced NULL.
We'll solve this by just using value="" instead of value=NULL.
Found by Coverity