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