dovecot-2.2: Merged changes from v2.1 tree.
dovecot at dovecot.org
dovecot at dovecot.org
Sat Jan 5 01:14:36 EET 2013
details: http://hg.dovecot.org/dovecot-2.2/rev/13e74bd5ac8c
changeset: 15578:13e74bd5ac8c
user: Timo Sirainen <tss at iki.fi>
date: Sat Jan 05 01:14:11 2013 +0200
description:
Merged changes from v2.1 tree.
diffstat:
.hgsigs | 2 +
.hgtags | 2 +
Makefile.am | 4 +-
NEWS | 23 +++++++
doc/example-config/Makefile.am | 1 +
doc/man/doveadm-expunge.1.in | 8 +-
src/auth/auth-master-connection.c | 3 +-
src/auth/db-ldap.c | 28 ++++++--
src/auth/password-scheme.c | 1 +
src/auth/userdb-passwd.c | 7 +-
src/config/main.c | 6 +-
src/doveadm/client-connection.c | 10 ++-
src/doveadm/doveadm-mail-server.c | 42 ++++++++++--
src/doveadm/doveadm-mail.h | 2 +
src/doveadm/doveadm-print-flow.c | 2 +-
src/doveadm/doveadm-print-pager.c | 2 +-
src/doveadm/doveadm-print-tab.c | 2 +-
src/doveadm/doveadm-print-table.c | 17 ++++-
src/doveadm/server-connection.c | 6 +-
src/imap/cmd-append.c | 2 +-
src/imap/cmd-copy.c | 6 +-
src/indexer/master-connection.c | 2 +-
src/lib-auth/auth-master.c | 5 +
src/lib-auth/auth-master.h | 3 +
src/lib-dict/dict-file.c | 39 ++++++++++++
src/lib-index/mail-cache-compress.c | 8 ++-
src/lib-index/mail-cache-fields.c | 8 +-
src/lib-index/mail-cache.c | 18 ++++-
src/lib-index/mail-index-alloc-cache.c | 15 ++++-
src/lib-index/mail-index-transaction-view.c | 8 ++-
src/lib-lda/mail-deliver.c | 3 +-
src/lib-master/mountpoint-list.c | 4 +
src/lib-storage/index/dbox-multi/mdbox-map.c | 12 ++-
src/lib-storage/index/dbox-multi/mdbox-save.c | 20 +++---
src/lib-storage/index/dbox-multi/mdbox-storage-rebuild.c | 6 +
src/lib-storage/index/index-sync.c | 11 +++
src/lib-storage/index/raw/raw-mail.c | 3 +-
src/lib-storage/mail-storage.h | 3 +
src/lib-storage/mailbox-list.c | 25 +-------
src/lib/Makefile.am | 1 +
src/lib/buffer.c | 14 ++++
src/lib/buffer.h | 6 +
src/lib/mkdir-parents.c | 20 ++++++
src/lib/mkdir-parents.h | 8 ++
src/lib/str.c | 3 +
src/lib/test-lib.c | 1 +
src/lib/test-lib.h | 1 +
src/lib/test-unichar.c | 24 +++++++
src/lib/unichar.c | 28 ++++----
src/lib/var-expand.c | 50 +++++++--------
src/login-common/login-proxy.c | 41 +++++++++---
src/plugins/acl/acl-mailbox.c | 17 +++++-
src/plugins/acl/acl-storage.c | 2 +-
src/plugins/expire/doveadm-expire.c | 5 +-
src/plugins/fts-solr/fts-backend-solr.c | 5 +-
src/plugins/fts-solr/solr-connection.c | 1 +
src/plugins/fts/fts-parser-script.c | 9 +-
src/plugins/lazy-expunge/lazy-expunge-plugin.c | 11 +++
src/plugins/mailbox-alias/mailbox-alias-plugin.c | 2 +-
src/plugins/quota/quota-storage.c | 20 ++++--
src/plugins/stats/stats-plugin.c | 10 ++-
src/plugins/virtual/virtual-config.c | 4 +-
src/plugins/virtual/virtual-mail.c | 8 +-
src/stats/mail-session.c | 9 +-
64 files changed, 500 insertions(+), 169 deletions(-)
diffs (truncated from 1725 to 300 lines):
diff -r 922049229f7f -r 13e74bd5ac8c .hgsigs
--- a/.hgsigs Sat Jan 05 00:37:26 2013 +0200
+++ b/.hgsigs Sat Jan 05 01:14:11 2013 +0200
@@ -51,3 +51,5 @@
bc86680293d256d5a8009690caeb73ab2e34e359 0 iEYEABECAAYFAlAZaTUACgkQyUhSUUBVisnTAACfU1pB34RrXEyLnpnL4Ee/oeNBYcoAnRWxTqx870Efjwf+eBPzafO0C/NU
1a6c3b4e92e4174d3b1eb0a7c841f97e8fb9e590 0 iEYEABECAAYFAlBYwJMACgkQyUhSUUBVisn2PwCeIJxfB5ebXlAbtMcjrZBCmB8Kg1sAn39BC9rQoR/wjD2/ix1JaxH7gHOT
f5941f3ac7622361634b6cba464da79cc883d1bb 0 iEYEABECAAYFAlCO62QACgkQyUhSUUBViskUtQCffWRQpSqaf+iCOipsTWE1D93TwVEAnAhxx1aezuqDVAsjWoYZkrIufO28
+741d800a192fa23572bb14196df2a8917cf20614 0 iEYEABECAAYFAlC3A5EACgkQyUhSUUBVisnmlACcCm6jc7NRoTkBtrJLcz+P325U1xcAn2+0eghqEMiP+rzRJC55oQxV00Zy
+75bfda4a7c6c9aa04b6a6ef233fc527356171a06 0 iEYEABECAAYFAlC4WKwACgkQyUhSUUBViskaOACgmcwWV8hgsCOWvkbdh0OIw1ImSQYAn1RcTL0CG3M8+XG7QrrxSfQ7+V99
diff -r 922049229f7f -r 13e74bd5ac8c .hgtags
--- a/.hgtags Sat Jan 05 00:37:26 2013 +0200
+++ b/.hgtags Sat Jan 05 01:14:11 2013 +0200
@@ -88,3 +88,5 @@
bc86680293d256d5a8009690caeb73ab2e34e359 2.1.9
1a6c3b4e92e4174d3b1eb0a7c841f97e8fb9e590 2.1.10
f5941f3ac7622361634b6cba464da79cc883d1bb 2.2.alpha1
+741d800a192fa23572bb14196df2a8917cf20614 2.1.11
+75bfda4a7c6c9aa04b6a6ef233fc527356171a06 2.1.12
diff -r 922049229f7f -r 13e74bd5ac8c Makefile.am
--- a/Makefile.am Sat Jan 05 00:37:26 2013 +0200
+++ b/Makefile.am Sat Jan 05 01:14:11 2013 +0200
@@ -64,12 +64,12 @@
grep -v '^LIBDOVECOT_.*_INCLUDE' dovecot-config | \
grep -v '^LIBDOVECOT.*_DEPS' | sed \
-e "s|^\(LIBDOVECOT\)=.*$$|\1='-L$(pkglibdir) -ldovecot'|" \
- -e "s|^\(LIBDOVECOT_LOGIN\)=.*$$|\1=-ldovecot-login|" \
+ -e "s|^\(LIBDOVECOT_LOGIN\)=.*$$|\1='-ldovecot-login $(SSL_LIBS)'|" \
-e "s|^\(LIBDOVECOT_SQL\)=.*$$|\1=-ldovecot-sql|" \
-e "s|^\(LIBDOVECOT_SSL\)=.*$$|\1=-ldovecot-ssl|" \
-e "s|^\(LIBDOVECOT_COMPRESS\)=.*$$|\1=-ldovecot-compression|" \
-e "s|^\(LIBDOVECOT_LDA\)=.*$$|\1=-ldovecot-lda|" \
- -e "s|^\(LIBDOVECOT_STORAGE\)=.*$$|\1=-ldovecot-storage|" \
+ -e "s|^\(LIBDOVECOT_STORAGE\)=.*$$|\1='-ldovecot-storage $(LINKED_STORAGE_LDADD)'|" \
-e "s|^\(LIBDOVECOT_INCLUDE\)=.*$$|\1=-I$(pkgincludedir)|" \
> $(DESTDIR)$(pkglibdir)/dovecot-config
diff -r 922049229f7f -r 13e74bd5ac8c NEWS
--- a/NEWS Sat Jan 05 00:37:26 2013 +0200
+++ b/NEWS Sat Jan 05 01:14:11 2013 +0200
@@ -30,6 +30,29 @@
+ LMTP proxy: Implemented XCLIENT extension for passing remote IP
address through proxy.
+v2.1.12 2012-11-30 Timo Sirainen <tss at iki.fi>
+
+ - dovecot-config in v2.1.11 caused build problems with Pigeonhole
+
+v2.1.11 2012-11-29 Timo Sirainen <tss at iki.fi>
+
+ * lmtp/lda: dovecot.index.cache file is no longer fully mapped to
+ memory, allowing mail deliveries to work even if the file is huge.
+ * auth: userdb passwd lookups are now done by auth worker processes
+ instead of auth master process (as it was documented, but
+ accidentally didn't work that way).
+
+ + lmtp: lmtp_rcpt_check_quota=yes setting checks quota on RCPT TO.
+ - lmtp: After successful proxying RCPT TO, the next one to a
+ nonexistent user gave tempfail error instead of "user not found".
+ - lmtp proxy: Fixed hanging if remote server was down.
+ - imap: Fixed crash when SEARCH contained multiple KEYWORD parameters.
+ - doveadm: Various fixes to handling doveadm-server connections.
+ - -i <instance name> parameter for Dovecot tools didn't work correctly.
+ - director was somewhat broken in v2.1.10. This version also includes
+ various reliability enhancements.
+ - auth: passdb imap was broken in v2.1.10.
+
v2.1.10 2012-09-18 Timo Sirainen <tss at iki.fi>
+ imap: Implemented THREAD=ORDEREDSUBJECT extension.
diff -r 922049229f7f -r 13e74bd5ac8c doc/example-config/Makefile.am
--- a/doc/example-config/Makefile.am Sat Jan 05 00:37:26 2013 +0200
+++ b/doc/example-config/Makefile.am Sat Jan 05 01:14:11 2013 +0200
@@ -13,6 +13,7 @@
example_DATA = \
dovecot.conf \
dovecot-db.conf.ext \
+ dovecot-dict-auth.conf.ext \
dovecot-dict-sql.conf.ext \
dovecot-ldap.conf.ext \
dovecot-sql.conf.ext
diff -r 922049229f7f -r 13e74bd5ac8c doc/man/doveadm-expunge.1.in
--- a/doc/man/doveadm-expunge.1.in Sat Jan 05 00:37:26 2013 +0200
+++ b/doc/man/doveadm-expunge.1.in Sat Jan 05 01:14:11 2013 +0200
@@ -1,5 +1,5 @@
-.\" Copyright (c) 2010 Dovecot authors, see the included COPYING file
-.TH DOVEADM\-EXPUNGE 1 "2010-11-25" "Dovecot v2.1" "Dovecot"
+.\" Copyright (c) 2010-2012 Dovecot authors, see the included COPYING file
+.TH DOVEADM\-EXPUNGE 1 "2012-11-27" "Dovecot v2.1" "Dovecot"
.SH NAME
doveadm\-expunge \- Expunge messages matching given search query
.\"------------------------------------------------------------------------
@@ -47,6 +47,10 @@
.\"-------------------------------------
@INCLUDE:option-A@
.\"-------------------------------------
+.TP
+.B \-d
+Delete the mailbox if it is empty after expunging.
+.\"-------------------------------------
@INCLUDE:option-S-socket@
.\"-------------------------------------
@INCLUDE:option-u-user@
diff -r 922049229f7f -r 13e74bd5ac8c src/auth/auth-master-connection.c
--- a/src/auth/auth-master-connection.c Sat Jan 05 00:37:26 2013 +0200
+++ b/src/auth/auth-master-connection.c Sat Jan 05 01:14:11 2013 +0200
@@ -240,7 +240,8 @@
auth_request_log_error(auth_request, "userdb",
"client doesn't have lookup permissions for this user: %s "
- "(change userdb socket permissions)", reason);
+ "(to bypass this check, set: service auth { unix_listener %s { mode=0777 } })",
+ reason, conn->path);
return -1;
}
diff -r 922049229f7f -r 13e74bd5ac8c src/auth/db-ldap.c
--- a/src/auth/db-ldap.c Sat Jan 05 00:37:26 2013 +0200
+++ b/src/auth/db-ldap.c Sat Jan 05 01:14:11 2013 +0200
@@ -990,7 +990,7 @@
char *ldap_attr;
if (*data != '\0') {
- ldap_attr = p_strdup(ctx->pool, data);
+ ldap_attr = p_strdup(ctx->pool, t_strcut(data, ':'));
array_append(&ctx->attr_names, &ldap_attr, 1);
}
return NULL;
@@ -1198,28 +1198,42 @@
return ctx;
}
+static const char *db_ldap_field_get_default(const char *data)
+{
+ const char *p;
+
+ p = strchr(data, ':');
+ if (p == NULL)
+ return "";
+ else {
+ /* default value given */
+ return p+1;
+ }
+}
+
static const char *db_ldap_field_expand(const char *data, void *context)
{
struct db_ldap_result_iterate_context *ctx = context;
struct db_ldap_value *ldap_value;
+ const char *field_name = t_strcut(data, ':');
- ldap_value = hash_table_lookup(ctx->ldap_attrs, data);
+ ldap_value = hash_table_lookup(ctx->ldap_attrs, field_name);
if (ldap_value == NULL) {
- /* ldap attribute wasn't requested */
+ /* requested ldap attribute wasn't returned at all */
if (ctx->debug)
- str_printfa(ctx->debug, "; %s missing", data);
- return "";
+ str_printfa(ctx->debug, "; %s missing", field_name);
+ return db_ldap_field_get_default(data);
}
ldap_value->used = TRUE;
if (ldap_value->values[0] == NULL) {
/* no value for ldap attribute */
- return "";
+ return db_ldap_field_get_default(data);
}
if (ldap_value->values[1] != NULL) {
auth_request_log_warning(ctx->auth_request, "ldap",
"Multiple values found for '%s', using value '%s'",
- data, ldap_value->values[0]);
+ field_name, ldap_value->values[0]);
}
return ldap_value->values[0];
}
diff -r 922049229f7f -r 13e74bd5ac8c src/auth/password-scheme.c
--- a/src/auth/password-scheme.c Sat Jan 05 00:37:26 2013 +0200
+++ b/src/auth/password-scheme.c Sat Jan 05 01:14:11 2013 +0200
@@ -818,6 +818,7 @@
{ "SSHA256", PW_ENCODING_BASE64, 0, ssha256_verify, ssha256_generate },
{ "SSHA512", PW_ENCODING_BASE64, 0, ssha512_verify, ssha512_generate },
{ "PLAIN", PW_ENCODING_NONE, 0, NULL, plain_generate },
+ { "CLEAR", PW_ENCODING_NONE, 0, NULL, plain_generate },
{ "CLEARTEXT", PW_ENCODING_NONE, 0, NULL, plain_generate },
{ "PLAIN-TRUNC", PW_ENCODING_NONE, 0, plain_trunc_verify, plain_generate },
{ "CRAM-MD5", PW_ENCODING_HEX, CRAM_MD5_CONTEXTLEN,
diff -r 922049229f7f -r 13e74bd5ac8c src/auth/userdb-passwd.c
--- a/src/auth/userdb-passwd.c Sat Jan 05 00:37:26 2013 +0200
+++ b/src/auth/userdb-passwd.c Sat Jan 05 01:14:11 2013 +0200
@@ -217,11 +217,10 @@
module = p_new(pool, struct passwd_userdb_module, 1);
module->module.cache_key = USER_CACHE_KEY;
module->tmpl = userdb_template_build(pool, "passwd", args);
+ module->module.blocking = TRUE;
- if (userdb_template_remove(module->tmpl, "blocking", &value)) {
- module->module.blocking = value == NULL ||
- strcasecmp(value, "yes") == 0;
- }
+ if (userdb_template_remove(module->tmpl, "blocking", &value))
+ module->module.blocking = strcasecmp(value, "yes") == 0;
/* FIXME: backwards compatibility */
if (!userdb_template_is_empty(module->tmpl))
i_warning("userdb passwd: Move templates args to override_fields setting");
diff -r 922049229f7f -r 13e74bd5ac8c src/config/main.c
--- a/src/config/main.c Sat Jan 05 00:37:26 2013 +0200
+++ b/src/config/main.c Sat Jan 05 01:14:11 2013 +0200
@@ -26,13 +26,17 @@
restrict_access_by_env(NULL, FALSE);
restrict_access_allow_coredumps(TRUE);
- master_service_init_finish(master_service);
config_parse_load_modules();
path = master_service_get_config_path(master_service);
if (config_parse_file(path, TRUE, NULL, &error) <= 0)
i_fatal("%s", error);
+ /* notify about our success only after successfully parsing the
+ config file, so if the parsing fails, master won't immediately
+ just recreate this process (and fail again and so on). */
+ master_service_init_finish(master_service);
+
master_service_run(master_service, client_connected);
config_connections_destroy_all();
diff -r 922049229f7f -r 13e74bd5ac8c src/doveadm/client-connection.c
--- a/src/doveadm/client-connection.c Sat Jan 05 00:37:26 2013 +0200
+++ b/src/doveadm/client-connection.c Sat Jan 05 01:14:11 2013 +0200
@@ -57,6 +57,7 @@
ctx = doveadm_mail_cmd_init(cmd, set);
ctx->full_args = (const void *)(argv + 1);
+ ctx->proxying = TRUE;
ctx->service_flags |=
MAIL_STORAGE_SERVICE_FLAG_NO_LOG_INIT |
@@ -139,6 +140,10 @@
o_stream_nsend(conn->output, "\n+\n", 3);
}
pool_unref(&ctx->pool);
+
+ /* clear all headers */
+ doveadm_print_deinit();
+ doveadm_print_init(DOVEADM_PRINT_TYPE_SERVER);
}
static bool client_is_allowed_command(const struct doveadm_settings *set,
@@ -239,8 +244,11 @@
const unsigned char *data;
size_t size;
- if ((line = i_stream_read_next_line(conn->input)) == NULL)
+ if ((line = i_stream_read_next_line(conn->input)) == NULL) {
+ if (conn->input->eof)
+ return -1;
return 0;
+ }
if (*conn->set->doveadm_password == '\0') {
i_error("doveadm_password not set, "
diff -r 922049229f7f -r 13e74bd5ac8c src/doveadm/doveadm-mail-server.c
--- a/src/doveadm/doveadm-mail-server.c Sat Jan 05 00:37:26 2013 +0200
+++ b/src/doveadm/doveadm-mail-server.c Sat Jan 05 01:14:11 2013 +0200
@@ -22,6 +22,11 @@
#define DOVEADM_MAIL_SERVER_FAILED() \
(internal_failure || master_service_is_killed(master_service))
+struct doveadm_mail_server_cmd {
+ struct server_connection *conn;
+ char *username;
+};
+
static HASH_TABLE(char *, struct doveadm_server *) servers;
static pool_t server_pool;
static struct doveadm_mail_cmd_context *cmd_ctx;
@@ -78,16 +83,22 @@
static void doveadm_cmd_callback(enum server_cmd_reply reply, void *context)
{
- struct server_connection *conn = context;
- struct doveadm_server *server;
+ struct doveadm_mail_server_cmd *servercmd = context;
+ struct doveadm_server *server =
+ server_connection_get_server(servercmd->conn);
+ const char *username = t_strdup(servercmd->username);
+
+ i_free(servercmd->username);
+ i_free(servercmd);
switch (reply) {
case SERVER_CMD_REPLY_INTERNAL_FAILURE:
+ i_error("%s: Internal failure for %s", server->name, username);
internal_failure = TRUE;
master_service_stop(master_service);
return;
case SERVER_CMD_REPLY_UNKNOWN_USER:
- i_error("No such user");
+ i_error("%s: No such user: %s", server->name, username);
More information about the dovecot-cvs
mailing list