2017-10-20 16:34:22 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (d6601f4ec)

    Released v2.2.33.2.


M	NEWS
M	configure.ac

2017-10-19 15:39:28 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (366d80c44)

    auth: Fix %{ldap_dn} not to leak memory


M	src/auth/db-ldap.c

2017-10-16 15:41:56 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (b06c43234)

    cassandra: Support "timestamp" type fields properly

    Fixes setting them with prepared statements. Reading them never worked 
    earlier.

M	src/lib-sql/driver-cassandra.c

2017-10-16 15:12:12 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (5d4780b89)

    cassandra: Include "prepared" when logging about prepared statement queries

    Mainly useful for debugging/testing.

M	src/lib-sql/driver-cassandra.c

2017-10-16 14:49:56 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (be665d47d)

    cassandra: Fix using bigint types with unprepared statements

    This reverts the code to not using the statements with binding at all. 
    Alternative fix would be to start using explicit int32 or int64 parameter 
    types, but that breaks backwards compatibility a bit.

M	src/lib-sql/driver-cassandra.c

2017-10-14 12:54:18 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (758404a3b)

    doveadm proxy: Don't crash if remote doesn't support log proxying


M	src/doveadm/server-connection.c

2017-10-11 19:43:04 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (e9afa7f18)

    Released v2.2.33.1.


M	NEWS
M	configure.ac

2017-10-11 13:03:51 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (4da63b2e6)

    lib-master: Allow a second log initialization after settings have been read.

    This fixes logging with services that bypass the log service (lda or -L 
    parameter).

M	src/lib-master/master-service.c

2017-10-10 18:20:31 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (68b0a183e)

    Released v2.2.33.


M	NEWS
M	configure.ac

2017-10-10 15:38:13 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (8945785ec)

    lib: ostream-multiplex - ignore flush return value

    There's nothing that can be done about it at close() time. Silences static 
    analyzer warnings.

M	src/lib/ostream-multiplex.c

2017-10-10 15:37:39 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (81157ad22)

    lib: ostream-multiplex - remove unnecessary flushes


M	src/lib/ostream-multiplex.c

2017-10-10 12:52:15 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (3af85d6bb)

    doveadm-mail-crypt: Do not return prematurely in key generate

    Broken by 446d7d9ddfe122e152b832c13fc28d164ae2c5e9

M	src/plugins/mail-crypt/doveadm-mail-crypt.c

2017-10-10 12:33:08 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (e168b589d)

    lib: istream-multiplex - Minor optimization

    There's no need to find channel when we already know it. This also helps 
    static analyzers to understand that req_channel can't be NULL.

M	src/lib/istream-multiplex.c

2017-10-06 09:02:49 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (40770486f)

    ostream-multiplex: Check flush return value


M	src/lib/ostream-multiplex.c

2017-10-06 08:55:33 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (af9672c1e)

    test-ostream-escaped: Check flush return value

    Found by coverity

M	src/lib/test-ostream-escaped.c

2017-10-06 08:54:38 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (ed64529a7)

    doveadm-server: Remove flush before multiplex

    It's not really necessary, found by coverity

M	src/doveadm/client-connection.c

2017-10-06 08:52:18 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (a1cbe6d45)

    iostream-multiplex: Check return values in tests


M	src/lib/test-istream-multiplex.c
M	src/lib/test-multiplex.c
M	src/lib/test-ostream-multiplex.c

2017-10-06 08:46:00 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (981447121)

    doveadm: Return after destroying connection

    Prevents NULL deferences, found by coverity.

M	src/doveadm/server-connection.c

2017-08-17 14:17:46 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (577616b71)

    doveadm mcp keypair generate: Fix -f parameter


M	src/plugins/mail-crypt/doveadm-mail-crypt.c

2017-10-06 14:39:00 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (b9ead8d45)

    pop3: Expand settings to fix rawlog_dir

    Even if %variables weren't used in rawlog_dir, the path was always prefixed 
    with "0".

M	src/pop3/main.c

2017-10-06 12:47:06 +0300 Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi> (154a011b9)

    doveadm-mail-crypt: Print existing folder key hash when aborting generate


M	src/plugins/mail-crypt/doveadm-mail-crypt.c

2017-10-06 11:07:23 +0300 Martti Rannanjärvi <martti.rannanjarvi@dovecot.fi> (e46dc6c96)

    doveadm-mail-crypt: Print existing userkey hash when aborting generate


M	src/plugins/mail-crypt/doveadm-mail-crypt.c

2017-10-05 15:53:16 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (dc88b0d8c)

    mail-crypt: Improve doveadm output


M	src/plugins/mail-crypt/doveadm-mail-crypt.c

2017-10-05 15:40:45 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (424deab0a)

    mail-crypt: Fix key generation handling

    Userkey generation would not set all required fields.

M	src/plugins/mail-crypt/doveadm-mail-crypt.c

2017-10-09 18:21:24 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (d5488dcd3)

    ostream-multiplex: Unreference stream parent

    Otherwise it won't get free'd.

M	src/lib/ostream-multiplex.c

2017-10-09 13:55:06 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (beb9d9256)

    doveadm: Add remote(host) prefix to all proxied logs


M	src/doveadm/server-connection.c

2017-10-09 14:28:17 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (2c0c73fe7)

    doveadm log test: Fix it to work again

    Broken by 719abeb2088987f213a33a7dd1fe78958beaef03

M	src/doveadm/doveadm-log.c

2017-10-09 13:19:32 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (e0456dc06)

    lib: ostream-multiplex - set ostream_private.parent

    Unlike with istream-multiplex, there are no issues with I/Os. Only the 
    parent stream will have the I/O. Using the default parent adds the missing
    methods that otherwise would have needed to be implemented:
    - cork
    - flush_pending
    - switch_ioloop

M	src/lib/ostream-multiplex.c

2017-10-09 13:14:23 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (1c777b3e4)

    lib: istream-multiplex - Forward i_stream_switch_ioloop() to parent

    Most istreams do this because istream_private.parent is set to the parent 
    stream, but this can't be done with istream-multiplex. The main problem with
    attempting to do the same with istream-multiplex is that the different 
    channels don't share the same I/O. Just because one channel received data 
    doesn't mean that other channels received any data. (It would be possible to
    solve this by implementing a new method that allows overriding 
    i_stream_set_io(), but I'm not sure if that's a good idea either.)

M	src/lib/istream-multiplex.c

2017-10-09 01:22:47 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (d1b011901)

    acl: Fix compiler warning with -Wstrict-bool


M	src/plugins/acl/acl-backend-vfile.c

2017-10-06 16:55:28 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (b1b550153)

    acl: Fix checking create (k) permission in global acl-file

    Just because the global ACL file hasn't changed since it was last refreshed 
    for another ACL object, it doesn't mean that those ACLs don't need to be 
    applied to this ACL object.

    This didn't usually cause problems, because the initial ACL object refresh 
    was always done due to local-path refresh returning "needs a refresh". The
    only exception was when acl_object_init_from_parent() was called, because it
    added an empty non-NULL validity for the local-path, so the
    "needs a refresh" wasn't returned. This happened only when trying to CREATE
    or RENAME mailbox under a parent where user didn't have create permissions.

    This affected only when using a single global acl-file, not when using 
    global acl directory containing per-mailbox files.

M	src/plugins/acl/acl-backend-vfile.c
M	src/plugins/acl/acl-global-file.c
M	src/plugins/acl/acl-global-file.h

2017-10-06 16:54:20 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (8bd8652b1)

    acl: Cleanup - move code to a new acl_vfile_validity_has_changed()


M	src/plugins/acl/acl-backend-vfile.c

2017-10-06 16:44:01 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (ba6c321d5)

    acl: Fix checking whether global acl-file has changed

    We always assumed that it was changed and re-read it.

M	src/plugins/acl/acl-global-file.c

2017-10-06 16:30:11 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (67c90c97b)

    auth: Fix %{ldap_dn} change to compile with v2.2 API


M	src/auth/db-ldap.c

2017-09-15 15:17:08 +0300 Sergey Kitov <sergey.kitov@open-xchange.com> (8bfc42d4d)

    auth: Expand %{ldap_dn} to ldap_get_dn().


M	src/auth/db-ldap.c

2017-10-05 20:25:29 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (f352c763b)

    lib: iostream-multiplex tests - Fix hangs by setting the pipe fds
    non-blocking


M	src/lib/test-istream-multiplex.c
M	src/lib/test-multiplex.c
M	src/lib/test-ostream-multiplex.c

2017-10-05 20:24:11 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (90d745e0a)

    lib: istream-multiplex - Minor code cleanup

    Avoid propagating the error twice, and avoid any confusion about what "got" 
    actually contains.

M	src/lib/istream-multiplex.c

2017-10-05 20:07:11 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (c1538be43)

    Released v2.2.33.rc1.


M	NEWS
M	configure.ac

2017-10-05 12:34:10 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (f066ee1f0)

    director: When ring is synced, purge any pending "removed" directors

    This allows adding a director back to the ring without having to wait for 30 
    seconds.

M	src/director/director.c

2017-10-03 16:40:32 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (ab9e658e6)

    director: Rename director_delayed_dir_remove_timeout() to
    director_hosts_purge_removed()

    This allows using it for other purposes without having a confusing name.

M	src/director/director.c

2017-10-05 16:12:38 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (184bcab00)

    director: Fix potential panic when director is alone

    If director is alone and it can't connect to other directors, it might crash 
    with:

    Panic: file director.c: line 318 (director_set_ring_synced): assertion
    failed: (!dir->ring_synced)

M	src/director/director.c

2017-10-05 11:51:23 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (d78b8d04a)

    director: Allow doveadm director ring remove for the same director

    Fixes: Panic: file doveadm-connection.c: line 859
    (doveadm_connection_cmd_run): assertion failed: (conn->dir->right == NULL &&
    conn->dir->left == NULL)

M	src/director/director.c

2017-10-05 11:49:31 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (868c94dfa)

    director: Don't crash on doveadm director ring remove for unknown director

    Ring syncing isn't started, so it shouldn't try to wait for ring sync.

    Fixes: Panic: file doveadm-connection.c: line 859
    (doveadm_connection_cmd_run): assertion failed: (conn->dir->right == NULL &&
    conn->dir->left == NULL)

M	src/director/doveadm-connection.c

2017-10-05 11:46:55 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (547fa7e59)

    director: Don't crash if DIRECTOR-REMOVE is received for itself

    This triggers the director removal from the ring, which causes the 
    connection to be destroyed. But since we're still in the middle of handling 
    the connection it needs refcounting.

M	src/director/director-connection.c

2017-09-14 18:13:05 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (959376d04)

    director: Fix ring sync wait after DIRECTOR-REMOVE

    It was sending OK twice, and the first OK was too early.

M	src/director/doveadm-connection.c

2017-09-14 17:59:05 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (656b9cd7f)

    director: Ignore CONNECT requests to hosts that have been removed already


M	src/director/director-connection.c

2017-09-14 17:57:29 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (3284bc936)

    director: After CONNECT was received, make sure we disconnect

    The remote side won't be reading anything after the CONNECT, so we have to 
    disconnect anyway. If we decide that the CONNECT request is wrong, reconnect 
    after a short delay and hope that the remote agrees with us the next time.

M	src/director/director-connection.c

2017-09-14 17:48:50 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (63818a815)

    director: When director is removed, notify it before disconnecting

    This way the removed director will know that it's been removed, and it can
    also more quickly forward the removal to other directors.

M	src/director/director.c

2017-09-14 17:38:24 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (1c88cb742)

    director: Don't reset directors' last_network_failure while handshaking

    The reset is done mainly to make it faster for a director that has been down 
    to connect back to the ring, without other directors still thinking that 
    it's down. But DIRECTOR that is sent during handshake says nothing about 
    whether the director is up at the moment or not.

M	src/director/director-connection.c

2017-09-14 17:35:02 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (cc4257614)

    director: Log info line for every incoming/outgoing connection

    This can help with debugging problems.

M	src/director/director-connection.c
M	src/director/director.c
M	src/director/director.h
M	src/director/main.c

2017-09-14 17:33:19 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (4f8ec7760)

    director: Cleanup - move code to a new director_log_connect()

    Also adds a missing ')' to the log line.

M	src/director/director.c

2017-09-14 17:29:48 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (2ff32179d)

    director: Log info line whenever a director is added/removed from ring

    This can help with debugging problems.

M	src/director/director-connection.c
M	src/director/director.c
M	src/director/director.h
M	src/director/doveadm-connection.c

2017-09-14 18:13:33 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (f16eeebdd)

    director: Improve debugging: Log ring desync when there is no right
    connection


M	src/director/director.c

2017-09-14 17:26:39 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (c78c950ef)

    director: When logging "ring SYNC lost", include sync seq number in message

    This can help with debugging.

M	src/director/director.c

2017-09-14 11:57:27 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (86a787a08)

    doveadm director ring remove: Wait ring sync before and after removal

    This helps mainly with automated tests.

M	src/director/director.c
M	src/director/doveadm-connection.c

2017-10-03 14:51:16 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (71a491318)

    lib-master: master_service_init_log() - Switch log handlers only on the
    first call

    The secondary calls were only done by mail_storage_service_*() calls. They 
    want to initialize the logging once, but afterwards they only care about 
    changing the log prefix. Switch to this behavior now explicitly.

    This fixes behavior if logging functions are changed between 
    mail_storage_service_*() calls, so they don't get reset.

M	src/lib-master/master-service-private.h
M	src/lib-master/master-service.c
M	src/lib-master/master-service.h

2017-10-05 12:47:17 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (e9910418a)

    lib: Fix warning with gcc7's -Wint-in-bool-context


M	src/lib/buffer.h

2017-08-24 14:59:07 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (7daf9f464)

    doveadm: Deliver remote logs over doveadm socket


M	src/doveadm/client-connection.c
M	src/doveadm/client-connection.h
M	src/doveadm/doveadm-util.c
M	src/doveadm/doveadm-util.h
M	src/doveadm/server-connection.c

2017-08-24 14:45:22 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (6960662b2)

    doveadm: Refactor server/client code to support versioning properly

    This way we can distinguish between old and new server side

M	src/doveadm/client-connection.c
M	src/doveadm/doveadm-util.h
M	src/doveadm/server-connection.c

2017-09-12 13:43:30 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (2cb630d7d)

    doveadm-server: Refactor connection handshake and authentication

    Simplifies next change

M	src/doveadm/client-connection.c
M	src/doveadm/client-connection.h
M	src/doveadm/doveadm-util.h
M	src/doveadm/server-connection.c

2017-08-22 10:14:22 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (7a4621110)

    lib: Add multiplex stream support

    This allows having multiple channels of data in single stream.

M	src/lib/Makefile.am
A	src/lib/istream-multiplex.c
A	src/lib/istream-multiplex.h
A	src/lib/ostream-multiplex.c
A	src/lib/ostream-multiplex.h
A	src/lib/test-istream-multiplex.c
M	src/lib/test-lib.c
M	src/lib/test-lib.h
A	src/lib/test-multiplex.c
A	src/lib/test-ostream-multiplex.c

2017-10-04 15:41:03 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (5848bf10e)

    director: Fix HOST-RESET-USERS when all hosts are down

    If there were a lot of users being kicked, the host was flushed after the 
    initial round of user kills. This caused the rest of the user connections to 
    be just discarded instead of actually being killed.

M	src/director/doveadm-connection.c

2017-10-04 15:39:08 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (49a526355)

    director: Fix tracking user move count when user is freed early

    users_moving_count wasn't updated if the user was freed before killing it 
    finished. This caused "doveadm director flush" to hang while waiting for the
    move count to drop to 0, which it never did. Also following flushes were
    doing less work in parallel, or possibly even nothing since director thought
    there were too many users already being moved.

M	src/director/director.c

2017-10-04 10:32:17 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (3dc758622)

    quota-clone: Always update dict

    ret_count and ret_bytes become zero if no quota rules are specified, so we
    need to update the dict anyways.

    Broken in 81d10aff29baede9ae4944d6c89790871123d11d

M	src/plugins/quota-clone/quota-clone-plugin.c

2017-09-22 13:30:43 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (d630d68aa)

    dsync: Add hashed_headers setting

    This makes it possible to configure them

M	src/doveadm/doveadm-dsync.c
M	src/doveadm/doveadm-settings.c
M	src/doveadm/doveadm-settings.h
M	src/doveadm/dsync/dsync-brain-mailbox.c
M	src/doveadm/dsync/dsync-brain-private.h
M	src/doveadm/dsync/dsync-brain.c
M	src/doveadm/dsync/dsync-brain.h
M	src/doveadm/dsync/dsync-ibc-stream.c
M	src/doveadm/dsync/dsync-ibc.h
M	src/doveadm/dsync/dsync-mail.c
M	src/doveadm/dsync/dsync-mail.h
M	src/doveadm/dsync/dsync-mailbox-export.c
M	src/doveadm/dsync/dsync-mailbox-export.h
M	src/doveadm/dsync/dsync-mailbox-import.c
M	src/doveadm/dsync/dsync-mailbox-import.h

2017-09-22 14:08:45 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (d1c2f79c1)

    dsync: Fix typo, it's ibc not icb


M	src/doveadm/doveadm-dsync.c

2017-09-25 10:28:03 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (ff0a0c905)

    dsync: Add missing space to handshake optional keys


M	src/doveadm/dsync/dsync-ibc-stream.c

2017-09-08 11:02:29 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (33f877eca)

    doveadm proxy: Avoid DNS lookup for "host" if passdb also returns "hostip"


M	src/doveadm/doveadm-mail-server.c

2017-09-08 11:02:07 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (9222388d6)

    lmtp proxy: Avoid DNS lookup for "host" if passdb also returns "hostip"


M	src/lmtp/commands.c
M	src/lmtp/lmtp-proxy.c
M	src/lmtp/lmtp-proxy.h

2017-09-08 11:01:20 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (dbf0b24b7)

    auth: Avoid DNS lookup for "host" if passdb returns also "hostip"


M	src/auth/auth-request.c

2017-07-25 10:39:43 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (053f9b41a)

    lib: Fix compiler warning in var-expand-if


M	src/lib/var-expand-if.c

2017-07-25 09:43:56 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (5ef27b9d1)

    lib: Fix static analyzer warnings in var-expand-if


M	src/lib/var-expand-if.c

2017-07-24 18:30:01 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (587bf2f8f)

    var-expand-if: Remove unused variable par_start


M	src/lib/var-expand-if.c

2017-07-24 13:31:49 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (d19ed6338)

    var-expand: Add tests for var_expand conditionals


M	src/lib/test-var-expand.c

2017-07-24 13:31:02 +0300 Aki Tuomi <aki.tuomi@dovecot.fi> (e55f99a3d)

    var-expand: Add support for conditionals

    %{if;value-a,op,value-b:true-value:false-value}

M	src/lib/Makefile.am
A	src/lib/var-expand-if.c
M	src/lib/var-expand-private.h
M	src/lib/var-expand.c

2015-10-19 13:49:54 +0300 Timo Sirainen <tss@iki.fi> (16d2f48cb)

    director: Remember backends' hostnames and send them in login reply. This
    allows login processes to verify the remote server's hostname in SSL
    certificate.


M	src/director/mail-host.h

2017-08-18 11:51:36 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (9a97cfeb2)

    director: Run director/host changing doveadm commands only after ring is
    synced

    If the ring sync is still pending, the doveadm command may become reverted. 
    This doesn't fully prevent problems caused by sending doveadm commands 
    simultaneously to multiple directors, but it should prevent issues when only
    a single director is used for doveadm commands.

    It would have been nice to enable this also for HOST/DIRECTOR-LIST commands, 
    but they don't support returning a ring timeout error without changing the 
    protocol. It's a bit too much effort to change that for now.

M	src/director/doveadm-connection.c

2017-08-14 10:29:47 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (1d0eb22ca)

    director: doveadm HOST-* commands now wait for ring sync before returning OK

    This should make it easier for tests and maybe for scripts in general, so 
    they won't think the command failed when it just takes a while to finish.

M	src/director/doveadm-connection.c
M	src/director/doveadm-connection.h
M	src/director/main.c

2017-08-14 10:06:34 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (540695680)

    director: Cleanup - Doveadm commands now return enum
    doveadm_director_cmd_ret


M	src/director/doveadm-connection.c

2017-08-14 10:01:01 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (f5416e345)

    director: Cleanup - Move all doveadm commands into an array.


M	src/director/doveadm-connection.c

2017-09-19 14:48:54 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (8cd3ade63)

    cassandra: Timestamp should be in microseconds, not milliseconds


M	src/lib-sql/driver-cassandra.c

2017-09-13 15:16:59 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (65ffbfb57)

    cassandra: Fix paged queries to work again

    When continuing the result, consistency was reset to 0 (=ANY), which caused 
    the queries to fail. There's no need to initialize the statement again when 
    continuing it. Also set result->consistency to be correct mainly for 
    debugging purposes.

M	src/lib-sql/driver-cassandra.c

2017-09-12 13:23:51 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (fbe89fbf9)

    cassandra: Disable prepared statements with protocol v3 and older


M	src/lib-sql/driver-cassandra.c

2017-08-22 14:35:11 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (f90f6a287)

    cassandra: Add support for prepared statements


M	src/lib-sql/driver-cassandra.c

2017-08-22 13:55:15 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (424b15e8d)

    cassandra: Cleanup - Create statement earlier

    Simplifies the following changes

M	src/lib-sql/driver-cassandra.c

2017-08-24 11:56:38 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (6679cc8ff)

    cassandra: sql_transaction_commit*() cleanup - handle multiple query
    failures earlier

    This makes the handling same for the sync and async method. It also 
    simplifies code for the following commits.

M	src/lib-sql/driver-cassandra.c

2017-08-24 11:13:32 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (f1f0d80ad)

    cassandra: sql_transaction_commit_s() - Set query_type correctly

    The queries were all sent with READ type instead of WRITE/DELETE. This meant
    they were using potentially wrong consistency values. Although synchronous
    commits aren't actually used anywhere, so this practically this doesn't fix
    anything right now.

M	src/lib-sql/driver-cassandra.c

2017-08-24 11:09:05 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (c5a23ba5e)

    cassandra: sql_transaction_commit_s() - Don't allow multi-query transactions

    They were already denied for asynchronous commits. Also the synchronous 
    commits aren't actually used anywhere, so this shouldn't break anything.

M	src/lib-sql/driver-cassandra.c

2017-09-07 15:40:16 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (4ea91541f)

    dict-sql: Use prepared statements

    Create a hash table of query template -> prepared statement and fill it out 
    as needed. This could have been done some alternative ways that wouldn't 
    require building the string first, but this should still be fast enough and 
    much easier to implement.

M	src/lib-dict/dict-sql.c

2017-08-26 23:27:21 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (727f90169)

    dict-sql: Flush pending atomic_inc on set, and pending set on atomic_inc


M	src/lib-dict/dict-sql.c

2017-08-26 23:17:45 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (1b4704229)

    dict-sql: Cleanup - change query generator functions to return statement

    Instead of query+params. This is in preparation for the following changes.

M	src/lib-dict/dict-sql.c

2017-08-15 16:50:16 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (98d322947)

    dict-sql: Cleanup - Remove unnecessary code

    The values are explicitly added to params. sql_dict_update_query() doesn't 
    add them again. Since the "diff" parameter is already a long long type, this
    avoids unnecessary conversion to string and back.

M	src/lib-dict/dict-sql.c

2017-08-15 16:38:33 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (fa7369ee9)

    dict-sql: Use sql_statement_bind_*()


M	src/lib-dict/dict-sql.c

2017-08-15 15:37:01 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (99c545950)

    dict-sql: Add signed "int" type


M	src/lib-dict/dict-sql-settings.c
M	src/lib-dict/dict-sql-settings.h
M	src/lib-dict/dict-sql.c

2017-08-15 14:55:48 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (9b762025a)

    dict-sql: Use sql_statement_set_timestamp() instead of adding it to query


M	src/lib-dict/dict-sql.c

2017-08-15 14:46:10 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (f6334b9c9)

    dict-sql: Initial change to use sql_statement API

    sql_statement_bind_*() will be followed by later changes.

M	src/lib-dict/dict-sql.c

2017-08-15 16:44:27 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (80b78400b)

    dict-sql: Remove dict_sql_build_query.inc

    It's no longer useful with the current code.

M	src/lib-dict/dict-sql.c

2016-05-06 12:19:21 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (a8bff174c)

    lib-dict: Moved/removed explicit stack frames in dict drivers.

    Added them back to dict_set/unset/atomic_inc() in dict.c. Others are 
    unlikely to be called many times.

M	src/lib-dict/dict-memcached-ascii.c
M	src/lib-dict/dict-memcached.c
M	src/lib-dict/dict-redis.c
M	src/lib-dict/dict-sql.c
M	src/lib-dict/dict.c
M	src/plugins/dict-ldap/dict-ldap.c

2017-08-15 14:27:40 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (c90266497)

    dict-sql: Change "uint" type to mean 64bit instead of 32bit integer.

    This is likely what is usually wanted (especially in e.g. quotas). If
    someone actually wants it to be restricted to 32bit, we could add uint32
    later on.

M	src/lib-dict/dict-sql.c

2017-08-22 11:37:17 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (6ebfc2ec5)

    lib-sql: Add support for prepared SQL statements.

    This initial implementation doesn't use prepared statements in drivers, but 
    simply generates the query string internally.

M	src/lib-sql/sql-api-private.h
M	src/lib-sql/sql-api.c
M	src/lib-sql/sql-api.h

2017-08-22 11:31:51 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (c4cd55ca3)

    lib-sql: Explicitly specify used *_vfuncs methods for drivers.

    This allows adding more methods without modifying all the existing drivers.

M	src/lib-sql/driver-cassandra.c
M	src/lib-sql/driver-mysql.c
M	src/lib-sql/driver-pgsql.c
M	src/lib-sql/driver-sqlite.c
M	src/lib-sql/driver-sqlpool.c
A	src/lib-sql/driver-test.c

2017-08-08 20:07:18 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (f46b4fbb8)

    lib: When logging I/O or timeout leak, log also raw backtrace

    This can be useful when trying to figure out where the io_loop_destroy() was 
    called from.

M	src/lib/ioloop.c

2017-05-23 14:05:02 +0200 Stephan Bosch <stephan.bosch@dovecot.fi> (718d7fa85)

    lib-storage: index: Made MIME FILENAME search criterion match
    case-insensitively.


M	src/lib-storage/index/index-search-mime.c
M	src/lib-storage/index/index-search-private.h
M	src/lib-storage/index/index-search.c

2017-09-20 01:47:38 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (a0ec1e9eb)

    director: Fix flush to kick the user also when all backends are down

    The user's host can't change, because there are no other hosts. So add a new
    parameter to force the kick anyway.

M	src/director/director.c
M	src/director/director.h
M	src/director/doveadm-connection.c

2017-09-14 12:50:29 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (31865444e)

    director: Avoid "ring sync timeout" errors when all backends are down

    doveadm commands were failing with it. Also pending request failures were 
    logged as failing due to ring sync timeout, instead of because no hosts.

M	src/director/main.c

2017-09-14 13:02:40 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (9f103210f)

    director: Delay calling state_change_callback() after user kick is finished

    Otherwise it can get into recursive loop and cause problems.

M	src/director/director.c

2017-09-14 12:42:13 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (9b3025548)

    doveadm director: Improve logging unexpected disconnections from director
    socket

    Previously it just logged "failed", which wasn't very understandable.

M	src/doveadm/doveadm-director.c

2017-08-22 16:32:32 +0300 Timo Sirainen <timo.sirainen@dovecot.fi> (1654e67e5)

    director: Fix crash when flush is run and all backends are down.

    Instead of moving the users elsewhere, just kill them and flush the backend.

M	src/director/director.c
M	src/director/director.h
