changeset 21322:5ab8dc1a4a6f

global: Change string position/length from unsigned int to size_t Mainly to avoid truncating >4GB strings, which might potentially cause some security holes. Normally there are other limits, which prevent such excessive strings from being created in the first place. I'm sure this didn't find everything. Maybe everything could be found with compiler warnings. -Wconversion kind of does it, but it gives way too many unnecessary warnings. These were mainly found with: grep " = strlen" egrep "unsigned int.*(size|len)"
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 12 Dec 2016 07:19:55 +0200
parents d80f9583a9ec
children d223fad9767f
files src/auth/auth-cache.c src/auth/auth-request.c src/auth/auth-request.h src/auth/db-checkpassword.c src/auth/db-ldap.c src/auth/mech-gssapi.c src/auth/mech-scram-sha1.c src/auth/password-scheme.c src/auth/userdb-dict.c src/config/config-parser-private.h src/config/config-parser.c src/config/config-request.c src/config/doveconf.c src/config/old-set-parser.c src/director/director-connection.c src/doveadm/doveadm-auth-server.c src/doveadm/doveadm-auth.c src/doveadm/doveadm-cmd.c src/doveadm/doveadm-fs.c src/doveadm/doveadm-log.c src/doveadm/doveadm-mail-mailbox.c src/doveadm/doveadm-mail.c src/doveadm/doveadm-print-table.c src/doveadm/doveadm-sis.c src/doveadm/doveadm-util.c src/doveadm/doveadm.c src/doveadm/dsync/dsync-brain-mailbox-tree.c src/doveadm/dsync/dsync-mailbox-tree-sync.c src/doveadm/dsync/dsync-mailbox-tree.c src/imap/cmd-list.c src/imap/cmd-notify.c src/imap/cmd-rename.c src/imap/cmd-subscribe.c src/imap/imap-list.c src/imap/imap-notify.c src/imap/imap-status.c src/imap/main.c src/ipc/main.c src/lib-compression/compression.c src/lib-compression/ostream-bzlib.c src/lib-compression/ostream-lzma.c src/lib-compression/ostream-zlib.c src/lib-dict/dict-db.c src/lib-dict/dict-file.c src/lib-dict/dict-memcached.c src/lib-dict/dict-sql-settings.c src/lib-dict/dict-sql.c src/lib-fs/fs-dict.c src/lib-fs/fs-posix.c src/lib-fs/fs-test.c src/lib-fts/fts-filter-english-possessive.c src/lib-fts/fts-icu.c src/lib-fts/fts-tokenizer-address.c src/lib-fts/test-fts-tokenizer.c src/lib-http/http-client-request.c src/lib-imap-client/imapc-connection.c src/lib-imap/imap-match.c src/lib-imap/imap-parser.c src/lib-imap/imap-quote.c src/lib-imap/imap-utf7.c src/lib-lda/lmtp-client.c src/lib-mail/istream-binary-converter.c src/lib-mail/message-decoder.c src/lib-mail/message-header-decode.c src/lib-mail/test-istream-attachment.c src/lib-mail/test-istream-dot.c src/lib-mail/test-istream-header-filter.c src/lib-mail/test-istream-qp-decoder.c src/lib-mail/test-mbox-from.c src/lib-mail/test-message-header-parser.c src/lib-master/master-login.c src/lib-master/master-service.c src/lib-storage/index/cydir/cydir-save.c src/lib-storage/index/cydir/cydir-sync.h src/lib-storage/index/dbox-common/dbox-file-fix.c src/lib-storage/index/dbox-multi/mdbox-map.c src/lib-storage/index/dbox-multi/mdbox-purge.c src/lib-storage/index/imapc/imapc-list.c src/lib-storage/index/imapc/imapc-search.c src/lib-storage/index/imapc/imapc-storage.c src/lib-storage/index/index-attribute.c src/lib-storage/index/index-mail-headers.c src/lib-storage/index/index-search.c src/lib-storage/index/index-sort.c src/lib-storage/index/maildir/maildir-filename-flags.c src/lib-storage/index/maildir/maildir-save.c src/lib-storage/index/maildir/maildir-uidlist.c src/lib-storage/index/mbox/mbox-storage.c src/lib-storage/index/shared/shared-list.c src/lib-storage/list/mailbox-list-delete.c src/lib-storage/list/mailbox-list-fs-iter.c src/lib-storage/list/mailbox-list-index-backend.c src/lib-storage/list/mailbox-list-index.h src/lib-storage/list/mailbox-list-iter.c src/lib-storage/list/mailbox-list-maildir-iter.c src/lib-storage/list/mailbox-list-maildir.c src/lib-storage/list/mailbox-list-notify-tree.c src/lib-storage/list/mailbox-list-subscriptions.c src/lib-storage/mail-namespace.c src/lib-storage/mail-storage-service.c src/lib-storage/mail-storage.c src/lib-storage/mail-user.c src/lib-storage/mailbox-list.c src/lib-storage/mailbox-tree.c src/lib-storage/mailbox-uidvalidity.c src/lib/array.c src/lib/env-util.c src/lib/failures.c src/lib/istream-base64-encoder.c src/lib/json-parser.c src/lib/module-dir.c src/lib/net.c src/lib/ostream-file.c src/lib/printf-format-fix.c src/lib/printf-format-fix.h src/lib/str-find.c src/lib/str-sanitize.c src/lib/str.c src/lib/strfuncs.c src/lib/test-printf-format-fix.c src/lib/unlink-old-files.c src/lib/var-expand.c src/lmtp/commands.c src/log/log-error-buffer.c src/login-common/client-common-auth.c src/login-common/client-common.c src/login-common/login-proxy-state.c src/master/master-settings.c src/master/service-process.c src/plugins/acl/acl-lookup-dict.c src/plugins/acl/acl-mailbox-list.c src/plugins/dict-ldap/dict-ldap.c src/plugins/fts-solr/fts-backend-solr-old.c src/plugins/fts-solr/fts-backend-solr.c src/plugins/fts-squat/squat-test.c src/plugins/fts/fts-api.c src/plugins/fts/fts-search-args.c src/plugins/imap-acl/imap-acl-plugin.c src/plugins/imap-stats/imap-stats-plugin.c src/plugins/mail-crypt/mail-crypt-pluginenv.c src/plugins/mail-crypt/mail-crypt-userenv.c src/plugins/quota/quota-dirsize.c src/replication/aggregator/replicator-connection.c
diffstat 143 files changed, 310 insertions(+), 267 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/auth-cache.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/auth/auth-cache.c	Mon Dec 12 07:19:55 2016 +0200
@@ -271,7 +271,7 @@
 				    const char *username)
 {
 	const char *data = node->data;
-	unsigned int username_len;
+	size_t username_len;
 
 	/* The cache nodes begin with "P"/"U", passdb/userdb ID, optional
 	   "+" master user, "\t" and then usually followed by the username.
--- a/src/auth/auth-request.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/auth/auth-request.c	Mon Dec 12 07:19:55 2016 +0200
@@ -1685,7 +1685,7 @@
 			    const char *name, const char *value,
 			    const char *default_scheme)
 {
-	unsigned int name_len = strlen(name);
+	size_t name_len = strlen(name);
 
 	i_assert(*name != '\0');
 	i_assert(value != NULL);
@@ -1895,7 +1895,7 @@
 void auth_request_set_userdb_field(struct auth_request *request,
 				   const char *name, const char *value)
 {
-	unsigned int name_len = strlen(name);
+	size_t name_len = strlen(name);
 	uid_t uid;
 	gid_t gid;
 
--- a/src/auth/auth-request.h	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/auth/auth-request.h	Mon Dec 12 07:19:55 2016 +0200
@@ -81,7 +81,7 @@
 	struct timeout *to_abort, *to_penalty;
 	unsigned int policy_penalty;
 	unsigned int last_penalty;
-	unsigned int initial_response_len;
+	size_t initial_response_len;
 	const unsigned char *initial_response;
 
 	union {
--- a/src/auth/db-checkpassword.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/auth/db-checkpassword.c	Mon Dec 12 07:19:55 2016 +0200
@@ -35,7 +35,7 @@
 	struct io *io_out, *io_in;
 
 	string_t *input_buf;
-	unsigned int output_pos, output_len;
+	size_t output_pos, output_len;
 
 	int exit_status;
 	unsigned int exited:1;
@@ -458,7 +458,7 @@
 			   void (*request_callback)())
 {
 	struct chkpw_auth_request *chkpw_auth_request;
-	unsigned int output_len;
+	size_t output_len;
 	int fd_in[2], fd_out[2];
 	pid_t pid;
 
@@ -468,7 +468,7 @@
 		output_len += strlen(auth_password);
 	if (output_len > CHECKPASSWORD_MAX_REQUEST_LEN) {
 		auth_request_log_info(request, AUTH_SUBSYS_DB,
-			"Username+password combination too long (%u bytes)",
+			"Username+password combination too long (%"PRIuSIZE_T" bytes)",
 			output_len);
 		callback(request, DB_CHECKPASSWORD_STATUS_FAILURE,
 			 NULL, request_callback);
--- a/src/auth/db-ldap.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/auth/db-ldap.c	Mon Dec 12 07:19:55 2016 +0200
@@ -1759,7 +1759,8 @@
 	struct hash_iterate_context *iter;
 	char *name;
 	struct db_ldap_value *value;
-	unsigned int orig_len, unused_count = 0;
+	unsigned int unused_count = 0;
+	size_t orig_len;
 
 	orig_len = str_len(ctx->debug);
 	if (orig_len == 0) {
--- a/src/auth/mech-gssapi.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/auth/mech-gssapi.c	Mon Dec 12 07:19:55 2016 +0200
@@ -231,10 +231,10 @@
 	return new;
 }
 
-static bool data_has_nuls(const void *data, unsigned int len)
+static bool data_has_nuls(const void *data, size_t len)
 {
 	const unsigned char *c = data;
-	unsigned int i;
+	size_t i;
 
 	/* apparently all names end with NUL? */
 	if (len > 0 && c[len-1] == '\0')
@@ -581,7 +581,7 @@
 	gss_buffer_desc outbuf;
 	const char *login_user, *error;
 	unsigned char *name;
-	unsigned int name_len;
+	size_t name_len;
 
 	major_status = gss_unwrap(&minor_status, request->gss_ctx,
 				  &inbuf, &outbuf, NULL, NULL);
--- a/src/auth/mech-scram-sha1.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/auth/mech-scram-sha1.c	Mon Dec 12 07:19:55 2016 +0200
@@ -350,7 +350,7 @@
 		(struct scram_auth_request *)auth_request;
 	const char *error = NULL;
 	const char *server_final_message;
-	int len;
+	size_t len;
 
 	if (!request->client_first_message_bare) {
 		/* Received client-first-message */
--- a/src/auth/password-scheme.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/auth/password-scheme.c	Mon Dec 12 07:19:55 2016 +0200
@@ -44,7 +44,7 @@
 {
 	const struct password_scheme *scheme;
 	const char *encoding = NULL;
-	unsigned int scheme_len;
+	size_t scheme_len;
 
 	*encoding_r = PW_ENCODING_NONE;
 
@@ -145,7 +145,7 @@
 	const struct password_scheme *s;
 	enum password_encoding encoding;
 	buffer_t *buf;
-	unsigned int len;
+	size_t len;
 	bool guessed_encoding;
 
 	*error_r = NULL;
@@ -614,7 +614,7 @@
 		   const unsigned char *raw_password, size_t size,
 		   const char **error_r)
 {
-	unsigned int i, plaintext_len, trunc_len = 0;
+	size_t i, plaintext_len, trunc_len = 0;
 
 	/* format: <length>-<password> */
 	for (i = 0; i < size; i++) {
--- a/src/auth/userdb-dict.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/auth/userdb-dict.c	Mon Dec 12 07:19:55 2016 +0200
@@ -22,7 +22,7 @@
 
 	userdb_callback_t *userdb_callback;
 	const char *key_prefix;
-	unsigned int key_prefix_len;
+	size_t key_prefix_len;
 	struct dict_iterate_context *iter;
 };
 
--- a/src/config/config-parser-private.h	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/config/config-parser-private.h	Mon Dec 12 07:19:55 2016 +0200
@@ -23,7 +23,7 @@
 	struct config_filter filter;
 	/* root=NULL-terminated list of parsers */
 	struct config_module_parser *parsers;
-	unsigned int pathlen;
+	size_t pathlen;
 
 	const char *open_path;
 	unsigned int open_linenum;
@@ -48,7 +48,7 @@
 	struct input_stack *cur_input;
 
 	string_t *str;
-	unsigned int pathlen;
+	size_t pathlen;
 	unsigned int section_counter;
 	const char *error;
 
--- a/src/config/config-parser.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/config/config-parser.c	Mon Dec 12 07:19:55 2016 +0200
@@ -552,7 +552,7 @@
 		  const char **key_r, const char **value_r)
 {
 	const char *key;
-	unsigned int len;
+	size_t len;
 	char *p;
 
 	*key_r = NULL;
--- a/src/config/config-request.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/config/config-request.c	Mon Dec 12 07:19:55 2016 +0200
@@ -153,7 +153,7 @@
 	}
 	case SET_ENUM: {
 		const char *const *val = value;
-		unsigned int len = strlen(*val);
+		size_t len = strlen(*val);
 
 		if (dump_default)
 			str_append(str, *val);
@@ -207,7 +207,8 @@
 	const struct setting_define *def;
 	const void *value, *default_value, *change_value;
 	void *const *children, *const *change_children = NULL;
-	unsigned int i, count, count2, prefix_len;
+	unsigned int i, count, count2;
+	size_t prefix_len;
 	const char *str;
 	char *key;
 	bool dump, dump_default = FALSE;
--- a/src/config/doveconf.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/config/doveconf.c	Mon Dec 12 07:19:55 2016 +0200
@@ -154,7 +154,7 @@
 
 static bool value_need_quote(const char *value)
 {
-	unsigned int len = strlen(value);
+	size_t len = strlen(value);
 
 	if (len == 0)
 		return FALSE;
@@ -176,8 +176,9 @@
 	struct prefix_stack prefix;
 	const char *const *strings, *const *args, *p, *str, *const *prefixes;
 	const char *key, *key2, *value;
-	unsigned int i, j, count, len, prefix_count, skip_len;
-	unsigned int setting_name_filter_len, prefix_idx = UINT_MAX;
+	unsigned int i, j, count, prefix_count;
+	unsigned int prefix_idx = UINT_MAX;
+	size_t len, skip_len, setting_name_filter_len;
 	bool unique_key;
 	int ret = 0;
 
@@ -460,7 +461,7 @@
 {
 	static struct config_dump_human_context *ctx;
 	const char *const *str;
-	unsigned int len;
+	size_t len;
 	bool dump_section = FALSE;
 
 	ctx = config_dump_human_init(NULL, scope, FALSE);
@@ -498,7 +499,8 @@
 					 void *context)
 {
 	char **setting_name_filters = context;
-	unsigned int i, filter_len;
+	unsigned int i;
+	size_t filter_len;
 
 	if (setting_name_filters == NULL) {
 		printf("%s=%s\n", key, value);
@@ -599,7 +601,7 @@
 	struct hostname_format fmt;
 	const char *p;
 	unsigned char hash[GUID_128_HOST_HASH_SIZE];
-	unsigned int len, n, limit;
+	unsigned int n, limit;
 	HASH_TABLE(void *, void *) hosts;
 	void *key, *value;
 	string_t *host;
@@ -626,7 +628,7 @@
 		fmt.suffix = p;
 	} else {
 		/* detect host1[suffix] vs host01[suffix] */
-		len = strlen(my_hostname);
+		size_t len = strlen(my_hostname);
 		while (len > 0 && !i_isdigit(my_hostname[len-1]))
 			len--;
 		fmt.suffix = my_hostname + len;
--- a/src/config/old-set-parser.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/config/old-set-parser.c	Mon Dec 12 07:19:55 2016 +0200
@@ -68,7 +68,7 @@
 			 const char *key, const char *value)
 {
 	const char *p;
-	unsigned int len;
+	size_t len;
 
 	if (strcmp(key, "base_dir") == 0) {
 		len = strlen(value);
@@ -529,7 +529,7 @@
 {
 	const struct socket_set *set = &ctx->old->socket_set;
 	const char *path, *prefix;
-	unsigned int len;
+	size_t len;
 	bool master_suffix;
 
 	if (set->path == NULL) {
--- a/src/director/director-connection.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/director/director-connection.c	Mon Dec 12 07:19:55 2016 +0200
@@ -2145,7 +2145,7 @@
 void director_connection_send(struct director_connection *conn,
 			      const char *data)
 {
-	unsigned int len = strlen(data);
+	size_t len = strlen(data);
 	off_t ret;
 
 	if (conn->output->closed || !conn->connected)
--- a/src/doveadm/doveadm-auth-server.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/doveadm-auth-server.c	Mon Dec 12 07:19:55 2016 +0200
@@ -87,7 +87,7 @@
 			t_strdup_printf("\"error\":\"%s: user doesn't exist\"",
 				lookup_name));
 	} else if (show_field != NULL) {
-		unsigned int show_field_len = strlen(show_field);
+		size_t show_field_len = strlen(show_field);
 		string_t *json_field = t_str_new(show_field_len+1);
 		json_append_escaped(json_field, show_field);
 		o_stream_nsend_str(doveadm_print_ostream, t_strdup_printf("\"%s\":", str_c(json_field)));
--- a/src/doveadm/doveadm-auth.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/doveadm-auth.c	Mon Dec 12 07:19:55 2016 +0200
@@ -86,7 +86,7 @@
 			"%s: user %s doesn't exist\n", lookup_name,
 			input->username);
 	} else if (show_field != NULL) {
-		unsigned int show_field_len = strlen(show_field);
+		size_t show_field_len = strlen(show_field);
 
 		for (; *fields; fields++) {
 			if (strncmp(*fields, show_field, show_field_len) == 0 &&
--- a/src/doveadm/doveadm-cmd.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/doveadm-cmd.c	Mon Dec 12 07:19:55 2016 +0200
@@ -111,7 +111,7 @@
 {
 	int argc = *_argc;
 	const char *const *argv = *_argv;
-	unsigned int len;
+	size_t len;
 
 	if (argc < 2)
 		return NULL;
@@ -141,7 +141,7 @@
 			   const char *const *argv[])
 {
 	const struct doveadm_cmd *cmd;
-	unsigned int cmd_name_len;
+	size_t cmd_name_len;
 
 	i_assert(*argc > 0);
 
--- a/src/doveadm/doveadm-fs.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/doveadm-fs.c	Mon Dec 12 07:19:55 2016 +0200
@@ -402,7 +402,7 @@
 					 unsigned int async_count)
 {
 	struct fs_file *file;
-	unsigned int path_len;
+	size_t path_len;
 
 	path_len = strlen(path);
 	if (path_len > 0 && path[path_len-1] != '/')
--- a/src/doveadm/doveadm-log.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/doveadm-log.c	Mon Dec 12 07:19:55 2016 +0200
@@ -91,7 +91,7 @@
 	struct stat st;
 	char *key;
 	string_t *full_path;
-	unsigned int dir_len;
+	size_t dir_len;
 
 	dir = opendir(path);
 	if (dir == NULL) {
@@ -131,7 +131,8 @@
 
 static bool log_type_find(const char *str, enum log_type *type_r)
 {
-	unsigned int i, len = strlen(str);
+	unsigned int i;
+	size_t len = strlen(str);
 
 	for (i = 0; i < LAST_LOG_TYPE; i++) {
 		if (strncasecmp(str, failure_log_type_prefixes[i], len) == 0 &&
@@ -281,7 +282,7 @@
 
 static const char *t_cmd_log_error_trim(const char *orig)
 {
-	unsigned int pos;
+	size_t pos;
 
 	/* Trim whitespace from suffix and remove ':' if it exists */
 	for (pos = strlen(orig); pos > 0; pos--) {
--- a/src/doveadm/doveadm-mail-mailbox.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/doveadm-mail-mailbox.c	Mon Dec 12 07:19:55 2016 +0200
@@ -220,7 +220,7 @@
 
 	array_foreach(&ctx->mailboxes, namep) {
 		const char *name = *namep;
-		unsigned int len;
+		size_t len;
 		bool directory = FALSE;
 
 		ns = mail_namespace_find(user->namespaces, name);
--- a/src/doveadm/doveadm-mail.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/doveadm-mail.c	Mon Dec 12 07:19:55 2016 +0200
@@ -700,7 +700,7 @@
 				     const char *cmdname, int *argc,
 				     const char *const **argv)
 {
-	unsigned int len;
+	size_t len;
 
 	if (*argc < 2)
 		return FALSE;
@@ -728,7 +728,7 @@
 				const char *const **argv)
 {
 	const struct doveadm_mail_cmd *cmd;
-	unsigned int cmd_name_len;
+	size_t cmd_name_len;
 	const char *const *orig_argv;
 	int orig_argc;
 
@@ -823,7 +823,7 @@
 bool doveadm_mail_has_subcommands(const char *cmd_name)
 {
 	const struct doveadm_mail_cmd *cmd;
-	unsigned int len = strlen(cmd_name);
+	size_t len = strlen(cmd_name);
 
 	array_foreach(&doveadm_mail_cmds, cmd) {
 		if (strncmp(cmd->name, cmd_name, len) == 0 &&
--- a/src/doveadm/doveadm-print-table.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/doveadm-print-table.c	Mon Dec 12 07:19:55 2016 +0200
@@ -19,7 +19,7 @@
 	const char *key;
 	const char *title;
 	enum doveadm_print_header_flags flags;
-	unsigned int min_length, max_length, length;
+	size_t min_length, max_length, length;
 };
 
 struct doveadm_print_table_context {
@@ -51,8 +51,8 @@
 {
 	struct doveadm_print_table_header *headers;
 	const char *value, *const *values;
-	unsigned int i, line, len, hdr_count, value_count, line_count;
-	unsigned int max_length, orig_length, diff;
+	unsigned int i, line, hdr_count, value_count, line_count;
+	size_t len, max_length, orig_length, diff;
 
 	ctx->lengths_set = TRUE;
 
--- a/src/doveadm/doveadm-sis.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/doveadm-sis.c	Mon Dec 12 07:19:55 2016 +0200
@@ -212,7 +212,7 @@
 	struct dirent *d;
 	struct stat st, first_st;
 	string_t *path;
-	unsigned int dir_len;
+	size_t dir_len;
 	int ret;
 
 	if (argc < 3)
@@ -270,7 +270,7 @@
 	struct dirent *d;
 	struct stat st;
 	string_t *str;
-	unsigned int dir_len, hash_len;
+	size_t dir_len, hash_len;
 
 	if (argc < 3 || strlen(argv[2]) < 4)
 		help(&doveadm_cmd_sis_find);
--- a/src/doveadm/doveadm-util.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/doveadm-util.c	Mon Dec 12 07:19:55 2016 +0200
@@ -49,7 +49,7 @@
 	DIR *dir;
 	struct dirent *d;
 	const char *plugin_name;
-	unsigned int name_len = strlen(name);
+	size_t name_len = strlen(name);
 	bool found = FALSE;
 
 	/* first check that it's not actually loaded */
--- a/src/doveadm/doveadm.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/doveadm.c	Mon Dec 12 07:19:55 2016 +0200
@@ -54,7 +54,8 @@
 	const char *cmd, *args, *p, *short_name, *sub_name;
 	const char *prev_name = "", *prev_sub_name = "";
 	const char **lines;
-	unsigned int i, count, prefix_len = strlen(prefix);
+	unsigned int i, count;
+	size_t prefix_len = strlen(prefix);
 
 	/* split lines */
 	lines = (void *)p_strsplit(pool_datastack_create(), str, "\n");
@@ -227,7 +228,7 @@
 {
 	const struct doveadm_cmd_ver2 *cmd2;
 	const struct doveadm_cmd *cmd;
-	unsigned int len = strlen(cmd_name);
+	size_t len = strlen(cmd_name);
 
 	array_foreach(&doveadm_cmds, cmd) {
 		if (strncmp(cmd->name, cmd_name, len) == 0 &&
--- a/src/doveadm/dsync/dsync-brain-mailbox-tree.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/dsync/dsync-brain-mailbox-tree.c	Mon Dec 12 07:19:55 2016 +0200
@@ -120,7 +120,7 @@
 			    const char *const *name_parts)
 {
 	const char *part, *prefix = ns->prefix;
-	unsigned int part_len;
+	size_t part_len;
 	char ns_sep = mail_namespace_get_sep(ns);
 
 	if ((ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0 &&
--- a/src/doveadm/dsync/dsync-mailbox-tree-sync.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/dsync/dsync-mailbox-tree-sync.c	Mon Dec 12 07:19:55 2016 +0200
@@ -364,7 +364,7 @@
 					  struct dsync_mailbox_node *node)
 {
 	const char *full_name;
-	unsigned int prefix_len = node->ns == NULL ? 0 : node->ns->prefix_len;
+	size_t prefix_len = node->ns == NULL ? 0 : node->ns->prefix_len;
 
 	if (strcmp(node->name, "INBOX") == 0 && node->parent == &tree->root)
 		return TRUE;
@@ -390,7 +390,8 @@
 	const char *old_name, *new_name, *p;
 	char name[TEMP_MAX_NAME_LEN+1];
 	buffer_t buf;
-	unsigned int prefix_len, max_prefix_len, counter = 1;
+	size_t prefix_len, max_prefix_len;
+	unsigned int counter = 1;
 
 	i_assert(!sync_node_is_namespace_prefix(tree, node));
 
@@ -963,7 +964,7 @@
 static void suffix_inc(string_t *str)
 {
 	char *data;
-	unsigned int i;
+	size_t i;
 
 	data = str_c_modifiable(str) + str_len(str)-1;
 	for (i = str_len(str); i > 0; i--, data--) {
@@ -988,7 +989,7 @@
 {
 	const char *p, *new_suffix;
 	string_t *str = t_str_new(256);
-	unsigned int max_prefix_len;
+	size_t max_prefix_len;
 
 	/* The name is currently <oldname>-<temp>. Both sides need to
 	   use equivalent names, so we'll replace the <temp> if possible
--- a/src/doveadm/dsync/dsync-mailbox-tree.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/doveadm/dsync/dsync-mailbox-tree.c	Mon Dec 12 07:19:55 2016 +0200
@@ -179,7 +179,7 @@
 	return iter;
 }
 
-static unsigned int node_get_full_name_length(struct dsync_mailbox_node *node)
+static size_t node_get_full_name_length(struct dsync_mailbox_node *node)
 {
 	if (node->parent->parent == NULL)
 		return strlen(node->name);
@@ -193,7 +193,7 @@
 				  const char **full_name_r,
 				  struct dsync_mailbox_node **node_r)
 {
-	unsigned int len;
+	size_t len;
 
 	if (iter->cur->first_child != NULL)
 		iter->cur = iter->cur->first_child;
@@ -394,7 +394,7 @@
 			     const struct dsync_mailbox_node *src,
 			     string_t *path)
 {
-	unsigned int prefix_len = str_len(path);
+	size_t prefix_len = str_len(path);
 	struct dsync_mailbox_node *node;
 
 	if (prefix_len > 0) {
--- a/src/imap/cmd-list.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/imap/cmd-list.c	Mon Dec 12 07:19:55 2016 +0200
@@ -31,7 +31,7 @@
 mailbox_flags2str(struct cmd_list_context *ctx, string_t *str,
 		  const char *special_use, enum mailbox_info_flags flags)
 {
-	unsigned int orig_len = str_len(str);
+	size_t orig_len = str_len(str);
 
 	if ((flags & MAILBOX_NONEXISTENT) != 0 && !ctx->used_listext) {
 		flags |= MAILBOX_NOSELECT;
--- a/src/imap/cmd-notify.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/imap/cmd-notify.c	Mon Dec 12 07:19:55 2016 +0200
@@ -144,7 +144,8 @@
 	struct imap_notify_namespace *notify_ns;
 	struct imap_notify_mailboxes *notify_boxes;
 	const char *const *names;
-	unsigned int i, count, cur_len, name_len = strlen(name);
+	unsigned int i, count;
+	size_t cur_len, name_len = strlen(name);
 	char ns_sep = mail_namespace_get_sep(ns);
 
 	if ((ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0 &&
--- a/src/imap/cmd-rename.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/imap/cmd-rename.c	Mon Dec 12 07:19:55 2016 +0200
@@ -9,7 +9,7 @@
 	struct mail_namespace *old_ns, *new_ns;
 	struct mailbox *old_box, *new_box;
 	const char *oldname, *newname;
-	unsigned int oldlen;
+	size_t oldlen;
 
 	/* <old name> <new name> */
 	if (!client_read_string_args(cmd, 2, &oldname, &newname))
--- a/src/imap/cmd-subscribe.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/imap/cmd-subscribe.c	Mon Dec 12 07:19:55 2016 +0200
@@ -26,7 +26,7 @@
 
 static bool str_ends_with_char(const char *str, char c)
 {
-	unsigned int len = strlen(str);
+	size_t len = strlen(str);
 
 	return len > 0 && str[len-1] == c;
 }
--- a/src/imap/imap-list.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/imap/imap-list.c	Mon Dec 12 07:19:55 2016 +0200
@@ -6,7 +6,7 @@
 
 bool imap_mailbox_flags2str(string_t *str, enum mailbox_info_flags flags)
 {
-	unsigned int orig_len = str_len(str);
+	size_t orig_len = str_len(str);
 
 	if ((flags & MAILBOX_SUBSCRIBED) != 0)
 		str_append(str, "\\Subscribed ");
--- a/src/imap/imap-notify.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/imap/imap-notify.c	Mon Dec 12 07:19:55 2016 +0200
@@ -190,7 +190,7 @@
 {
 	struct mailbox *box;
 	const char *const *namep;
-	unsigned int name_len;
+	size_t name_len;
 	char ns_sep;
 	bool ret;
 
--- a/src/imap/imap-status.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/imap/imap-status.c	Mon Dec 12 07:19:55 2016 +0200
@@ -103,7 +103,7 @@
 {
 	const struct mailbox_status *status = &result->status;
 	string_t *str;
-	unsigned int prefix_len;
+	size_t prefix_len;
 
 	str = t_str_new(128);
 	str_append(str, "* STATUS ");
--- a/src/imap/main.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/imap/main.c	Mon Dec 12 07:19:55 2016 +0200
@@ -134,15 +134,15 @@
 	const char *tag;
 
 	const unsigned char *input;
-	unsigned int input_size;
+	size_t input_size;
 	bool send_untagged_capability;
 };
 
 static void
-client_parse_input(const unsigned char *data, unsigned int len,
+client_parse_input(const unsigned char *data, size_t len,
 		   struct client_input *input_r)
 {
-	unsigned int taglen;
+	size_t taglen;
 
 	i_assert(len > 0);
 
--- a/src/ipc/main.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/ipc/main.c	Mon Dec 12 07:19:55 2016 +0200
@@ -10,7 +10,7 @@
 
 static bool ipc_socket_is_client(const char *name)
 {
-	unsigned int len;
+	size_t len;
 
 	if (strcmp(name, "ipc") == 0)
 		return TRUE;
--- a/src/lib-compression/compression.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-compression/compression.c	Mon Dec 12 07:19:55 2016 +0200
@@ -107,7 +107,8 @@
 const struct compression_handler *
 compression_lookup_handler_from_ext(const char *path)
 {
-	unsigned int i, len, path_len = strlen(path);
+	unsigned int i;
+	size_t len, path_len = strlen(path);
 
 	for (i = 0; compression_handlers[i].name != NULL; i++) {
 		if (compression_handlers[i].ext == NULL)
--- a/src/lib-compression/ostream-bzlib.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-compression/ostream-bzlib.c	Mon Dec 12 07:19:55 2016 +0200
@@ -99,7 +99,7 @@
 static int o_stream_bzlib_send_flush(struct bzlib_ostream *zstream)
 {
 	bz_stream *zs = &zstream->zs;
-	unsigned int len;
+	size_t len;
 	bool done = FALSE;
 	int ret;
 
--- a/src/lib-compression/ostream-lzma.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-compression/ostream-lzma.c	Mon Dec 12 07:19:55 2016 +0200
@@ -105,7 +105,7 @@
 static int o_stream_lzma_send_flush(struct lzma_ostream *zstream)
 {
 	lzma_stream *zs = &zstream->strm;
-	unsigned int len;
+	size_t len;
 	bool done = FALSE;
 	int ret;
 
--- a/src/lib-compression/ostream-zlib.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-compression/ostream-zlib.c	Mon Dec 12 07:19:55 2016 +0200
@@ -168,7 +168,7 @@
 o_stream_zlib_send_flush(struct zlib_ostream *zstream, bool final)
 {
 	z_stream *zs = &zstream->zs;
-	unsigned int len;
+	size_t len;
 	bool done = FALSE;
 	int ret, flush;
 
--- a/src/lib-dict/dict-db.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-dict/dict-db.c	Mon Dec 12 07:19:55 2016 +0200
@@ -25,7 +25,7 @@
 
 	DBC *cursor;
 	char *path;
-	unsigned int path_len;
+	size_t path_len;
 
 	DBT pkey, pdata;
 
--- a/src/lib-dict/dict-file.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-dict/dict-file.c	Mon Dec 12 07:19:55 2016 +0200
@@ -35,7 +35,7 @@
 
 struct file_dict_iterate_path {
 	const char *path;
-	unsigned int len;
+	size_t len;
 };
 
 struct file_dict_iterate_context {
@@ -312,7 +312,7 @@
 	char *key, *value, *old_value;
 	char *orig_key, *orig_value;
 	const struct dict_transaction_memory_change *change;
-	unsigned int new_len;
+	size_t new_len;
 	long long diff;
 
 	array_foreach(&ctx->changes, change) {
--- a/src/lib-dict/dict-memcached.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-dict/dict-memcached.c	Mon Dec 12 07:19:55 2016 +0200
@@ -38,7 +38,7 @@
 	buffer_t *cmd;
 	struct {
 		const unsigned char *value;
-		unsigned int value_len;
+		size_t value_len;
 		enum memcached_response status;
 		bool reply_received;
 	} reply;
@@ -277,7 +277,7 @@
 {
 	struct ioloop *prev_ioloop = current_ioloop;
 	struct timeout *to;
-	unsigned int key_len;
+	size_t key_len;
 
 	if (strncmp(key, DICT_PATH_SHARED, strlen(DICT_PATH_SHARED)) == 0)
 		key += strlen(DICT_PATH_SHARED);
@@ -289,7 +289,7 @@
 		key = t_strconcat(dict->key_prefix, key, NULL);
 	key_len = strlen(key);
 	if (key_len > 0xffff) {
-		i_error("memcached: Key is too long (%u bytes): %s",
+		i_error("memcached: Key is too long (%"PRIuSIZE_T" bytes): %s",
 			key_len, key);
 		return -1;
 	}
--- a/src/lib-dict/dict-sql-settings.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-dict/dict-sql-settings.c	Mon Dec 12 07:19:55 2016 +0200
@@ -167,7 +167,7 @@
 	      struct setting_parser_ctx *ctx)
 {
 	struct dict_sql_map_field *field;
-	unsigned int value_len;
+	size_t value_len;
 
 	switch (ctx->type) {
 	case SECTION_ROOT:
--- a/src/lib-dict/dict-sql.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-dict/dict-sql.c	Mon Dec 12 07:19:55 2016 +0200
@@ -43,8 +43,8 @@
 	struct sql_result *result;
 	string_t *key;
 	const struct dict_sql_map *map;
-	unsigned int key_prefix_len, pattern_prefix_len, next_map_idx;
-	unsigned int path_idx, sql_fields_start_idx;
+	size_t key_prefix_len, pattern_prefix_len;
+	unsigned int path_idx, sql_fields_start_idx, next_map_idx;
 	bool synchronous_result;
 	bool failed;
 };
@@ -119,12 +119,12 @@
 
 static bool
 dict_sql_map_match(const struct dict_sql_map *map, const char *path,
-		   ARRAY_TYPE(const_string) *values, unsigned int *pat_len_r,
-		   unsigned int *path_len_r, bool partial_ok, bool recurse)
+		   ARRAY_TYPE(const_string) *values, size_t *pat_len_r,
+		   size_t *path_len_r, bool partial_ok, bool recurse)
 {
 	const char *path_start = path;
 	const char *pat, *field, *p;
-	unsigned int len;
+	size_t len;
 
 	array_clear(values);
 	pat = map->pattern;
@@ -200,7 +200,8 @@
 		  ARRAY_TYPE(const_string) *values)
 {
 	const struct dict_sql_map *maps;
-	unsigned int i, count, len;
+	unsigned int i, count;
+	size_t len;
 
 	t_array_init(values, dict->set->max_field_count);
 	maps = array_get(&dict->set->maps, &count);
@@ -526,7 +527,8 @@
 {
 	struct sql_dict *dict = (struct sql_dict *)ctx->ctx.dict;
 	const struct dict_sql_map *maps;
-	unsigned int i, count, pat_len, path_len;
+	unsigned int i, count;
+	size_t pat_len, path_len;
 	bool recurse = (ctx->flags & DICT_ITERATE_FLAG_RECURSE) != 0;
 
 	t_array_init(values, dict->set->max_field_count);
--- a/src/lib-fs/fs-dict.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-fs/fs-dict.c	Mon Dec 12 07:19:55 2016 +0200
@@ -223,7 +223,7 @@
 		break;
 	}
 	case FS_DICT_VALUE_ENCODING_BASE64: {
-		const unsigned int base64_size =
+		const size_t base64_size =
 			MAX_BASE64_ENCODED_SIZE(file->write_buffer->used);
 		string_t *base64 = t_str_new(base64_size);
 		base64_encode(file->write_buffer->data,
--- a/src/lib-fs/fs-posix.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-fs/fs-posix.c	Mon Dec 12 07:19:55 2016 +0200
@@ -31,7 +31,7 @@
 struct posix_fs {
 	struct fs fs;
 	char *temp_file_prefix, *root_path, *path_prefix;
-	unsigned int temp_file_prefix_len;
+	size_t temp_file_prefix_len;
 	enum fs_posix_lock_method lock_method;
 	mode_t mode;
 	bool mode_auto;
--- a/src/lib-fs/fs-test.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-fs/fs-test.c	Mon Dec 12 07:19:55 2016 +0200
@@ -322,7 +322,8 @@
 	struct test_fs_iter *iter = (struct test_fs_iter *)_iter;
 	struct test_fs *fs = (struct test_fs *)_iter->fs;
 	const char *const *files, *p;
-	unsigned int count, len, prev_dir_len = strlen(iter->prev_dir);
+	unsigned int count;
+	size_t len, prev_dir_len = strlen(iter->prev_dir);
 
 	files = array_get(&fs->iter_files, &count);
 	for (; iter->idx < count; iter->idx++) {
--- a/src/lib-fts/fts-filter-english-possessive.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-fts/fts-filter-english-possessive.c	Mon Dec 12 07:19:55 2016 +0200
@@ -5,7 +5,7 @@
 #include "fts-common.h"
 #include "fts-filter-private.h"
 
-static unichar_t get_ending_utf8_char(const char *str, unsigned int *end_pos)
+static unichar_t get_ending_utf8_char(const char *str, size_t *end_pos)
 {
 	unichar_t c;
 
@@ -23,7 +23,7 @@
 				     const char **token,
 				     const char **error_r ATTR_UNUSED)
 {
-	unsigned int len = strlen(*token);
+	size_t len = strlen(*token);
 	unichar_t c;
 
 	if (len > 1 && ((*token)[len-1] == 's' || (*token)[len-1] == 'S')) {
--- a/src/lib-fts/fts-icu.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-fts/fts-icu.c	Mon Dec 12 07:19:55 2016 +0200
@@ -30,7 +30,7 @@
 void fts_icu_utf8_to_utf16(buffer_t *dest_utf16, const char *src_utf8)
 {
 	UErrorCode err = U_ZERO_ERROR;
-	unsigned int src_bytes = strlen(src_utf8);
+	size_t src_bytes = strlen(src_utf8);
 	int32_t utf16_len;
 	UChar *dest_data, *retp = NULL;
 	int32_t avail_uchars = 0;
--- a/src/lib-fts/fts-tokenizer-address.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-fts/fts-tokenizer-address.c	Mon Dec 12 07:19:55 2016 +0200
@@ -112,7 +112,7 @@
 		/* we're searching and we want to find only the full
 		   user@domain (not "user" and "domain"). we'll do this by
 		   not feeding the last user@domain to parent tokenizer. */
-		unsigned int parent_prefix_len =
+		size_t parent_prefix_len =
 			str_len(tok->parent_data) - str_len(tok->last_word);
 		i_assert(str_len(tok->parent_data) >= str_len(tok->last_word) &&
 			 strcmp(str_c(tok->parent_data) + parent_prefix_len,
--- a/src/lib-fts/test-fts-tokenizer.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-fts/test-fts-tokenizer.c	Mon Dec 12 07:19:55 2016 +0200
@@ -80,7 +80,8 @@
 {
 	const unsigned char *input = (const unsigned char *)_input;
 	const char *token, *error;
-	unsigned int i, outi, max, char_len, input_len = strlen(_input);
+	unsigned int i, outi, max, char_len;
+	size_t input_len = strlen(_input);
 
 	/* test all input at once */
 	outi = first_outi;
--- a/src/lib-http/http-client-request.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-http/http-client-request.c	Mon Dec 12 07:19:55 2016 +0200
@@ -348,7 +348,7 @@
 {
 	const unsigned char *data, *p;
 	size_t size, line_len, line_start_pos;
-	unsigned int key_len = strlen(key);
+	size_t key_len = strlen(key);
 
 	i_assert(req->state == HTTP_REQUEST_STATE_NEW ||
 		 /* allow calling for retries */
--- a/src/lib-imap-client/imapc-connection.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-imap-client/imapc-connection.c	Mon Dec 12 07:19:55 2016 +0200
@@ -807,7 +807,7 @@
 	struct imapc_connection *conn = context;
 	const unsigned char *sasl_output;
 	unsigned int sasl_output_len;
-	unsigned int input_len;
+	size_t input_len;
 	buffer_t *buf;
 	const char *error;
 
@@ -1969,7 +1969,8 @@
 	struct imapc_command *const *cmds, *cmd;
 	struct imapc_command_reply reply;
 	const unsigned char *p, *data;
-	unsigned int count, seek_pos, start_pos, end_pos, size;
+	unsigned int count, size;
+	size_t seek_pos, start_pos, end_pos;
 	int ret;
 
 	if (imapc_connection_is_throttled(conn))
@@ -2156,7 +2157,7 @@
 
 void imapc_command_send(struct imapc_command *cmd, const char *cmd_str)
 {
-	unsigned int len = strlen(cmd_str);
+	size_t len = strlen(cmd_str);
 
 	cmd->data = str_new(cmd->pool, 6 + len + 2);
 	str_printfa(cmd->data, "%u %s\r\n", cmd->tag, cmd_str);
--- a/src/lib-imap/imap-match.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-imap/imap-match.c	Mon Dec 12 07:19:55 2016 +0200
@@ -114,7 +114,8 @@
 {
 	struct imap_match_glob *glob;
 	struct imap_match_pattern *match_patterns;
-	unsigned int i, len, pos, patterns_count, patterns_data_len = 0;
+	unsigned int i, patterns_count;
+	size_t len, pos, patterns_data_len = 0;
 
 	patterns_count = str_array_length(patterns);
 	match_patterns = p_new(pool, struct imap_match_pattern,
--- a/src/lib-imap/imap-parser.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-imap/imap-parser.c	Mon Dec 12 07:19:55 2016 +0200
@@ -517,7 +517,7 @@
 static bool imap_parser_is_next_text(struct imap_parser *parser)
 {
 	const struct imap_arg *arg;
-	unsigned int len;
+	size_t len;
 
 	if (parser->cur_list != &parser->root_list)
 		return FALSE;
--- a/src/lib-imap/imap-quote.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-imap/imap-quote.c	Mon Dec 12 07:19:55 2016 +0200
@@ -44,15 +44,16 @@
 static void
 imap_append_literal(string_t *dest, const char *src, unsigned int pos)
 {
-	unsigned int full_len = pos + strlen(src+pos);
+	size_t full_len = pos + strlen(src+pos);
 
-	str_printfa(dest, "{%u}\r\n", full_len);
+	str_printfa(dest, "{%"PRIuSIZE_T"}\r\n", full_len);
 	buffer_append(dest, src, full_len);
 }
 
 void imap_append_nstring(string_t *dest, const char *src)
 {
-	unsigned int i, escape_count = 0;
+	unsigned int escape_count = 0;
+	size_t i;
 
 	if (src == NULL) {
 		str_append(dest, "NIL");
--- a/src/lib-imap/imap-utf7.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-imap/imap-utf7.c	Mon Dec 12 07:19:55 2016 +0200
@@ -29,7 +29,7 @@
 };
 
 static void
-mbase64_encode(string_t *dest, const unsigned char *in, unsigned int len)
+mbase64_encode(string_t *dest, const unsigned char *in, size_t len)
 {
 	str_append_c(dest, '&');
 	while (len >= 3) {
--- a/src/lib-lda/lmtp-client.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-lda/lmtp-client.c	Mon Dec 12 07:19:55 2016 +0200
@@ -461,7 +461,7 @@
 static bool lmtp_client_send_xclient(struct lmtp_client *client)
 {
 	string_t *str;
-	unsigned int empty_len;
+	size_t empty_len;
 
 	if (client->xclient_args == NULL) {
 		/* not supported */
--- a/src/lib-mail/istream-binary-converter.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-mail/istream-binary-converter.c	Mon Dec 12 07:19:55 2016 +0200
@@ -23,7 +23,7 @@
 	unsigned int base64_block_pos;
 
 	buffer_t *hdr_buf;
-	unsigned int cte_header_len;
+	size_t cte_header_len;
 	unsigned int content_type_seen:1;
 };
 
--- a/src/lib-mail/message-decoder.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-mail/message-decoder.c	Mon Dec 12 07:19:55 2016 +0200
@@ -27,7 +27,7 @@
 	char *charset_trans_charset;
 	struct charset_translation *charset_trans;
 	char translation_buf[CHARSET_MAX_PENDING_BUF_SIZE];
-	unsigned int translation_size;
+	size_t translation_size;
 
 	struct qp_decoder *qp;
 	buffer_t *encoding_buf;
@@ -201,7 +201,7 @@
 				   const unsigned char **data, size_t *size)
 {
 	unsigned char trans_buf[CHARSET_MAX_PENDING_BUF_SIZE+1];
-	unsigned int data_wanted, skip;
+	size_t data_wanted, skip;
 	size_t trans_size, orig_size;
 
 	/* @UNSAFE: move the previously untranslated bytes to trans_buf
--- a/src/lib-mail/message-header-decode.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-mail/message-header-decode.c	Mon Dec 12 07:19:55 2016 +0200
@@ -10,7 +10,7 @@
 
 static size_t
 message_header_decode_encoded(const unsigned char *data, size_t size,
-			      buffer_t *decodebuf, unsigned int *charsetlen_r)
+			      buffer_t *decodebuf, size_t *charsetlen_r)
 {
 #define QCOUNT 3
 	unsigned int num = 0;
@@ -58,9 +58,9 @@
 	return start_pos[2] + 2;
 }
 
-static bool is_only_lwsp(const unsigned char *data, unsigned int size)
+static bool is_only_lwsp(const unsigned char *data, size_t size)
 {
-	unsigned int i;
+	size_t i;
 
 	for (i = 0; i < size; i++) {
 		if (!(data[i] == ' ' || data[i] == '\t' ||
@@ -75,7 +75,7 @@
 			   void *context)
 {
 	buffer_t *decodebuf = NULL;
-	unsigned int charsetlen = 0;
+	size_t charsetlen = 0;
 	size_t pos, start_pos, ret;
 
 	/* =?charset?Q|B?text?= */
--- a/src/lib-mail/test-istream-attachment.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-mail/test-istream-attachment.c	Mon Dec 12 07:19:55 2016 +0200
@@ -326,7 +326,7 @@
 
 static bool test_istream_attachment_extractor_one(const char *body)
 {
-	const unsigned int prefix_len = strlen(mail_broken_input_body_prefix);
+	const size_t prefix_len = strlen(mail_broken_input_body_prefix);
 	struct istream_attachment_settings set;
 	struct istream *datainput, *input;
 	char *mail_text;
--- a/src/lib-mail/test-istream-dot.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-mail/test-istream-dot.c	Mon Dec 12 07:19:55 2016 +0200
@@ -18,7 +18,8 @@
 	struct istream *test_input, *input;
 	const unsigned char *data;
 	size_t size;
-	unsigned int i, outsize, input_len, output_len;
+	unsigned int i;
+	size_t outsize, input_len, output_len;
 	string_t *str;
 	uoff_t offset;
 	int ret;
@@ -111,7 +112,8 @@
 static void test_istream_dot_error(const char *input_str, bool test_bufsize)
 {
 	struct istream *test_input, *input;
-	unsigned int i, outsize, input_len;
+	unsigned int i;
+	size_t outsize, input_len;
 	uoff_t offset;
 	int ret;
 
--- a/src/lib-mail/test-istream-header-filter.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-mail/test-istream-header-filter.c	Mon Dec 12 07:19:55 2016 +0200
@@ -32,7 +32,8 @@
 {
 	struct run_ctx run_ctx = { .callback = callback, .null_hdr_seen = FALSE };
 	struct istream *filter;
-	unsigned int i, output_len = strlen(output);
+	unsigned int i;
+	size_t output_len = strlen(output);
 	const struct stat *st;
 	const unsigned char *data;
 	size_t size;
@@ -85,8 +86,9 @@
 	const char *input = "From: foo\nFrom: abc\nTo: bar\nSubject: plop\nX-Drop: 1\n\nhello world\n";
 	const char *output = "From: abc\n\nhello world\n";
 	struct istream *istream, *filter, *filter2;
-	unsigned int i, input_len = strlen(input);
-	unsigned int output_len = strlen(output);
+	unsigned int i;
+	size_t input_len = strlen(input);
+	size_t output_len = strlen(output);
 	const unsigned char *data;
 	const struct stat *st;
 	size_t size;
@@ -388,8 +390,9 @@
 	const char *output = "From: foo\n\nhello world\n";
 	const struct stat *st;
 	struct istream *istream, *filter;
-	unsigned int i, input_len = strlen(input);
-	unsigned int output_len = strlen(output);
+	unsigned int i;
+	size_t input_len = strlen(input);
+	size_t output_len = strlen(output);
 	const unsigned char *data;
 	string_t *str = t_str_new(64);
 	size_t size;
--- a/src/lib-mail/test-istream-qp-decoder.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-mail/test-istream-qp-decoder.c	Mon Dec 12 07:19:55 2016 +0200
@@ -25,7 +25,7 @@
 decode_test(const char *qp_input, const char *output, bool broken_input,
 	    unsigned int buffer_size)
 {
-	unsigned int qp_input_len = strlen(qp_input);
+	size_t qp_input_len = strlen(qp_input);
 	struct istream *input_data, *input;
 	const unsigned char *data;
 	size_t i, size;
--- a/src/lib-mail/test-mbox-from.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-mail/test-mbox-from.c	Mon Dec 12 07:19:55 2016 +0200
@@ -50,7 +50,8 @@
 		{ 0, 0, NULL, -1 },
 		{ 0, 0, NULL, -1 },
 	};
-	unsigned int i, j, len;
+	unsigned int i, j;
+	size_t len;
 	struct tm *tm;
 	char *sender;
 	bool success;
--- a/src/lib-mail/test-message-header-parser.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-mail/test-message-header-parser.c	Mon Dec 12 07:19:55 2016 +0200
@@ -203,7 +203,8 @@
 	struct message_header_parser_ctx *parser;
 	struct message_header_line *hdr;
 	struct istream *input;
-	unsigned int i, len = strlen(str);
+	unsigned int i;
+	size_t len = strlen(str);
 
 	input = test_istream_create(str);
 	test_istream_set_max_buffer_size(input, buffer_size);
@@ -222,7 +223,7 @@
 	static const char *lf_str = "1234567890: 345\n\n";
 	static const char *crlf_str = "1234567890: 345\r\n\r\n";
 	struct message_size hdr_size;
-	unsigned int i, len;
+	size_t i, len;
 
 	test_begin("message header parser long lines");
 	len = strlen(lf_str);
--- a/src/lib-master/master-login.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-master/master-login.c	Mon Dec 12 07:19:55 2016 +0200
@@ -240,7 +240,7 @@
 	struct master_login *login = pl->client->conn->login;
 	char buf[1024];
 	const char **auth_args, **p;
-	unsigned int len;
+	size_t len;
 	ssize_t ret;
 	int fd = -1;
 
@@ -396,7 +396,7 @@
 	struct master_login_client *client;
 	struct master_login *login = conn->login;
 	unsigned char data[MASTER_AUTH_MAX_DATA_SIZE];
-	unsigned int i, session_len = 0;
+	size_t i, session_len = 0;
 	int ret, client_fd;
 
 	ret = master_login_conn_read_request(conn, &req, data, &client_fd);
--- a/src/lib-master/master-service.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-master/master-service.c	Mon Dec 12 07:19:55 2016 +0200
@@ -1112,7 +1112,7 @@
 				unsigned major_version,
 				unsigned int *minor_version_r)
 {
-	unsigned int service_name_len = strlen(service_name);
+	size_t service_name_len = strlen(service_name);
 	bool ret;
 
 	if (strncmp(line, "VERSION\t", 8) != 0)
--- a/src/lib-storage/index/cydir/cydir-save.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/cydir/cydir-save.c	Mon Dec 12 07:19:55 2016 +0200
@@ -248,7 +248,8 @@
 	uint32_t uid;
 	const char *dir;
 	string_t *src_path, *dest_path;
-	unsigned int n, src_prefixlen, dest_prefixlen;
+	unsigned int n;
+	size_t src_prefixlen, dest_prefixlen;
 
 	i_assert(ctx->finished);
 
--- a/src/lib-storage/index/cydir/cydir-sync.h	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/cydir/cydir-sync.h	Mon Dec 12 07:19:55 2016 +0200
@@ -10,7 +10,7 @@
 	struct mail_index_transaction *trans;
 
 	string_t *path;
-	unsigned int path_dir_prefix_len;
+	size_t path_dir_prefix_len;
 	uint32_t uid_validity;
 };
 
--- a/src/lib-storage/index/dbox-common/dbox-file-fix.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/dbox-common/dbox-file-fix.c	Mon Dec 12 07:19:55 2016 +0200
@@ -263,7 +263,7 @@
 
 static void dbox_file_skip_broken_header(struct dbox_file *file)
 {
-	const unsigned int magic_len = strlen(DBOX_MAGIC_PRE);
+	const size_t magic_len = strlen(DBOX_MAGIC_PRE);
 	const unsigned char *data;
 	size_t i, size;
 
--- a/src/lib-storage/index/dbox-multi/mdbox-map.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/dbox-multi/mdbox-map.c	Mon Dec 12 07:19:55 2016 +0200
@@ -1191,7 +1191,7 @@
 static int
 mdbox_find_highest_file_id(struct mdbox_map *map, uint32_t *file_id_r)
 {
-	const unsigned int prefix_len = strlen(MDBOX_MAIL_FILE_PREFIX);
+	const size_t prefix_len = strlen(MDBOX_MAIL_FILE_PREFIX);
 	DIR *dir;
 	struct dirent *d;
 	unsigned int id, highest_id = 0;
--- a/src/lib-storage/index/dbox-multi/mdbox-purge.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/dbox-multi/mdbox-purge.c	Mon Dec 12 07:19:55 2016 +0200
@@ -503,7 +503,8 @@
 	DIR *dir;
 	struct dirent *d;
 	string_t *path;
-	unsigned int file_id, dir_len;
+	unsigned int file_id;
+	size_t dir_len;
 	int ret = 0;
 
 	if (!array_is_created(&dstorage->move_to_alt_map_uids) &&
--- a/src/lib-storage/index/imapc/imapc-list.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/imapc/imapc-list.c	Mon Dec 12 07:19:55 2016 +0200
@@ -357,7 +357,7 @@
 {
 	struct imapc_mailbox_list *list = (struct imapc_mailbox_list *)_list;
 	const char *prefix = list->set->imapc_list_prefix;
-	unsigned int prefix_len;
+	size_t prefix_len;
 
 	if (*storage_name == '\0') {
 		/* ACL plugin does these lookups */
@@ -419,7 +419,7 @@
 	vname = mailbox_list_get_vname(&list->list, name);
 	if (list->set->imapc_list_prefix[0] != '\0') {
 		/* put back the prefix, so it gets included in the filesystem. */
-		unsigned int vname_len = strlen(vname);
+		size_t vname_len = strlen(vname);
 
 		if (ns->prefix_len > 0) {
 			/* skip over the namespace prefix */
@@ -499,7 +499,7 @@
 	struct mailbox_list_iterate_context *iter;
 	const struct mailbox_info *info;
 	const char *imapc_list_prefix = list->set->imapc_list_prefix;
-	unsigned int imapc_list_prefix_len = strlen(imapc_list_prefix);
+	size_t imapc_list_prefix_len = strlen(imapc_list_prefix);
 	const char *fs_name, *vname;
 
 	if (fs_list == NULL)
--- a/src/lib-storage/index/imapc/imapc-search.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/imapc/imapc-search.c	Mon Dec 12 07:19:55 2016 +0200
@@ -102,7 +102,7 @@
 	case SEARCH_SINCE:
 		if ((capa & IMAPC_CAPABILITY_WITHIN) == 0) {
 			/* a bit kludgy way to check this.. */
-			unsigned int pos = str_len(str);
+			size_t pos = str_len(str);
 			if (!mail_search_arg_to_imap(str, arg, &error))
 				return FALSE;
 			if (strncasecmp(str_c(str) + pos, "OLDER", 5) == 0 ||
--- a/src/lib-storage/index/imapc/imapc-storage.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/imapc/imapc-storage.c	Mon Dec 12 07:19:55 2016 +0200
@@ -960,7 +960,7 @@
 imapc_namespace_find_mailbox(struct imapc_storage *storage, const char *name)
 {
 	const struct imapc_namespace *ns, *best_ns = NULL;
-	unsigned int best_len = UINT_MAX, len;
+	size_t best_len = UINT_MAX, len;
 
 	array_foreach(&storage->remote_namespaces, ns) {
 		len = strlen(ns->prefix);
--- a/src/lib-storage/index/index-attribute.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/index-attribute.c	Mon Dec 12 07:19:55 2016 +0200
@@ -9,7 +9,7 @@
 	struct mailbox_attribute_iter iter;
 	struct dict_iterate_context *diter;
 	char *prefix;
-	unsigned int prefix_len;
+	size_t prefix_len;
 	bool dict_disabled;
 };
 
--- a/src/lib-storage/index/index-mail-headers.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/index-mail-headers.c	Mon Dec 12 07:19:55 2016 +0200
@@ -732,7 +732,7 @@
 static void str_replace_nuls(string_t *str)
 {
 	char *data = str_c_modifiable(str);
-	unsigned int i, len = str_len(str);
+	size_t i, len = str_len(str);
 
 	for (i = 0; i < len; i++) {
 		if (data[i] == '\0')
--- a/src/lib-storage/index/index-search.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/index-search.c	Mon Dec 12 07:19:55 2016 +0200
@@ -445,9 +445,9 @@
 }
 
 static void compress_lwsp(string_t *dest, const unsigned char *src,
-			  unsigned int src_len)
+			  size_t src_len)
 {
-	unsigned int i;
+	size_t i;
 	bool prev_lwsp = TRUE;
 
 	for (i = 0; i < src_len; i++) {
--- a/src/lib-storage/index/index-sort.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/index-sort.c	Mon Dec 12 07:19:55 2016 +0200
@@ -388,7 +388,7 @@
 
 	if (addr->name != NULL) {
 		string_t *str;
-		unsigned int len = strlen(addr->name);
+		size_t len = strlen(addr->name);
 
 		str = t_str_new(len*2);
 		(void)message_header_decode_utf8(
--- a/src/lib-storage/index/maildir/maildir-filename-flags.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/maildir/maildir-filename-flags.c	Mon Dec 12 07:19:55 2016 +0200
@@ -73,7 +73,8 @@
 				 string_t *fname)
 {
 	const unsigned int *indexes;
-	unsigned int i, count, start = str_len(fname);
+	unsigned int i, count;
+	size_t start = str_len(fname);
 	char chr;
 
 	indexes = array_get(keywords, &count);
--- a/src/lib-storage/index/maildir/maildir-save.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/maildir/maildir-save.c	Mon Dec 12 07:19:55 2016 +0200
@@ -347,7 +347,7 @@
 {
 	struct mailbox *box = &mbox->box;
 	const struct mailbox_permissions *perm = mailbox_get_permissions(box);
-	unsigned int prefix_len;
+	size_t prefix_len;
 	const char *tmp_fname;
 	string_t *path;
 	mode_t old_mask;
--- a/src/lib-storage/index/maildir/maildir-uidlist.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/maildir/maildir-uidlist.c	Mon Dec 12 07:19:55 2016 +0200
@@ -1149,7 +1149,7 @@
 {
 	const unsigned char *p;
 	buffer_t *buf;
-	unsigned int len;
+	size_t len;
 
 	/* copy existing extensions, except for the one we're updating */
 	buf = buffer_create_dynamic(pool_datastack_create(), 128);
@@ -1250,7 +1250,7 @@
 	string_t *str;
 	const unsigned char *p;
 	const char *strp;
-	unsigned int len;
+	size_t len;
 
 	i_assert(fd != -1);
 
--- a/src/lib-storage/index/mbox/mbox-storage.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/mbox/mbox-storage.c	Mon Dec 12 07:19:55 2016 +0200
@@ -689,7 +689,7 @@
 mbox_is_internal_name(struct mailbox_list *list ATTR_UNUSED,
 		      const char *name)
 {
-	unsigned int len;
+	size_t len;
 
 	/* don't allow *.lock files/dirs */
 	len = strlen(name);
--- a/src/lib-storage/index/shared/shared-list.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/index/shared/shared-list.c	Mon Dec 12 07:19:55 2016 +0200
@@ -91,7 +91,7 @@
 {
 	struct mail_namespace *ns = list->ns;
 	const char *ns_ref, *prefix = list->ns->prefix;
-	unsigned int prefix_len = strlen(prefix);
+	size_t prefix_len = strlen(prefix);
 
 	if (*ref != '\0' && strncmp(ref, prefix, prefix_len) == 0)
 		ns_ref = ref + prefix_len;
--- a/src/lib-storage/list/mailbox-list-delete.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/list/mailbox-list-delete.c	Mon Dec 12 07:19:55 2016 +0200
@@ -144,7 +144,7 @@
 	DIR *dir;
 	struct dirent *d;
 	string_t *full_path;
-	unsigned int dir_len;
+	size_t dir_len;
 	bool mailbox_dir, unlinked_something = FALSE;
 
 	if (mailbox_list_check_root_delete(list, name, path) < 0)
@@ -235,7 +235,7 @@
 				    enum mailbox_list_path_type type)
 {
 	const char *root_dir, *p;
-	unsigned int len;
+	size_t len;
 
 	root_dir = mailbox_list_get_root_forced(list, type);
 	if (strncmp(path, root_dir, strlen(root_dir)) != 0) {
--- a/src/lib-storage/list/mailbox-list-fs-iter.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/list/mailbox-list-fs-iter.c	Mon Dec 12 07:19:55 2016 +0200
@@ -338,7 +338,7 @@
 	struct mailbox_list *_list = ctx->ctx.list;
 	ARRAY(const char *) valid_patterns;
 	const char *pattern, *test_pattern, *real_pattern, *error;
-	unsigned int prefix_len;
+	size_t prefix_len;
 
 	prefix_len = strlen(_list->ns->prefix);
 	p_array_init(&valid_patterns, ctx->ctx.pool, 8);
@@ -378,7 +378,8 @@
 		ctx->ctx.list->mail_set->mail_full_filesystem_access;
 	const char *const *patterns, *pattern, *const *parentp, *const *childp;
 	const char *p, *last, *root, *prefix_vname;
-	unsigned int i, parentlen;
+	unsigned int i;
+	size_t parentlen;
 
 	i_assert(*ctx->valid_patterns != NULL);
 
--- a/src/lib-storage/list/mailbox-list-index-backend.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/list/mailbox-list-index-backend.c	Mon Dec 12 07:19:55 2016 +0200
@@ -530,8 +530,8 @@
 	/* Get the current mailbox name with \0 separators. */
 	char sep = mailbox_list_get_hierarchy_sep(box->list);
 	char *box_zerosep_name = t_strdup_noconst(box->name);
-	unsigned int box_name_len = strlen(box_zerosep_name);
-	for (unsigned int i = 0; i < box_name_len; i++) {
+	size_t box_name_len = strlen(box_zerosep_name);
+	for (size_t i = 0; i < box_name_len; i++) {
 		if (box_zerosep_name[i] == sep)
 			box_zerosep_name[i] = '\0';
 	}
@@ -697,7 +697,7 @@
 			  struct mailbox_list *_newlist, const char *newname)
 {
 	struct index_mailbox_list *list = (struct index_mailbox_list *)_oldlist;
-	const unsigned int oldname_len = strlen(oldname);
+	const size_t oldname_len = strlen(oldname);
 	struct mailbox_list_index_sync_context *sync_ctx;
 	struct mailbox_list_index_record oldrec, newrec;
 	struct mailbox_list_index_node *oldnode, *newnode, *child;
--- a/src/lib-storage/list/mailbox-list-index.h	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/list/mailbox-list-index.h	Mon Dec 12 07:19:55 2016 +0200
@@ -128,7 +128,7 @@
 	struct mailbox_info info;
 	pool_t info_pool;
 
-	unsigned int parent_len;
+	size_t parent_len;
 	string_t *path;
 	struct mailbox_list_index_node *next_node;
 
--- a/src/lib-storage/list/mailbox-list-iter.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/list/mailbox-list-iter.c	Mon Dec 12 07:19:55 2016 +0200
@@ -255,7 +255,7 @@
 	struct imap_match_glob *glob;
 	enum imap_match_result result;
 	const char *prefix_without_sep;
-	unsigned int len;
+	size_t len;
 
 	len = ns->prefix_len;
 	if (len > 0 && ns->prefix[len-1] == mail_namespace_get_sep(ns))
@@ -375,7 +375,7 @@
 				      const char *prefix)
 {
 	struct mail_namespace *ns;
-	unsigned int prefix_len = strlen(prefix);
+	size_t prefix_len = strlen(prefix);
 	int ret;
 
 	for (ns = ctx->namespaces; ns != NULL; ns = ns->next) {
@@ -789,7 +789,8 @@
 		     bool only_subscribed, unsigned int *idx_r)
 {
 	struct mailbox_settings *const *sets;
-	unsigned int i, count, len, name_len = strlen(name);
+	unsigned int i, count;
+	size_t len, name_len = strlen(name);
 	enum autocreate_match_result result = 0;
 	char sep = mail_namespace_get_sep(ns);
 
@@ -879,7 +880,7 @@
 		/* there are autocreate parent boxes.
 		   set their children flag states. */
 		struct autocreate_box *autobox;
-		unsigned int name_len;
+		size_t name_len;
 		char sep = mail_namespace_get_sep(ctx->list->ns);
 
 		array_foreach_modifiable(&actx->boxes, autobox) {
--- a/src/lib-storage/list/mailbox-list-maildir-iter.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/list/mailbox-list-maildir-iter.c	Mon Dec 12 07:19:55 2016 +0200
@@ -51,7 +51,7 @@
 	struct mail_namespace *ns = ctx->ctx.list->ns;
 	struct mailbox_node *node;
 	const char *p;
-	unsigned int vname_len = strlen(vname);
+	size_t vname_len = strlen(vname);
 	bool created;
 	char ns_sep = mail_namespace_get_sep(ns);
 
--- a/src/lib-storage/list/mailbox-list-maildir.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/list/mailbox-list-maildir.c	Mon Dec 12 07:19:55 2016 +0200
@@ -307,7 +307,8 @@
 	ARRAY(const char *) names_arr;
 	const char *pattern, *oldpath, *newpath, *old_childname, *new_childname;
 	const char *const *names, *old_vname, *new_vname;
-	unsigned int i, count, old_vnamelen;
+	unsigned int i, count;
+	size_t old_vnamelen;
 	pool_t pool;
 	char old_ns_sep;
 	int ret;
--- a/src/lib-storage/list/mailbox-list-notify-tree.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/list/mailbox-list-notify-tree.c	Mon Dec 12 07:19:55 2016 +0200
@@ -44,7 +44,7 @@
 {
 	struct mailbox_node *node;
 	struct mailbox_notify_node *nnode;
-	unsigned int prefix_len;
+	size_t prefix_len;
 	bool created;
 
 	str_append(path, index_node->name);
--- a/src/lib-storage/list/mailbox-list-subscriptions.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/list/mailbox-list-subscriptions.c	Mon Dec 12 07:19:55 2016 +0200
@@ -28,7 +28,7 @@
 	struct mail_namespace *namespaces = default_ns->user->namespaces;
 	struct mailbox_node *node;
 	const char *vname, *ns_name, *error;
-	unsigned int len;
+	size_t len;
 	bool created;
 
 	/* default_ns is whatever namespace we're currently listing.
--- a/src/lib-storage/mail-namespace.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/mail-namespace.c	Mon Dec 12 07:19:55 2016 +0200
@@ -654,7 +654,7 @@
 {
         struct mail_namespace *ns = namespaces;
 	struct mail_namespace *best = NULL;
-	unsigned int best_len = 0;
+	size_t best_len = 0;
 	bool inbox;
 
 	inbox = strncasecmp(box, "INBOX", 5) == 0;
@@ -769,7 +769,7 @@
 			   const char *prefix)
 {
         struct mail_namespace *ns;
-	unsigned int len = strlen(prefix);
+	size_t len = strlen(prefix);
 
 	for (ns = namespaces; ns != NULL; ns = ns->next) {
 		if (ns->prefix_len == len &&
@@ -784,7 +784,7 @@
 				 const char *prefix)
 {
         struct mail_namespace *ns;
-	unsigned int len = strlen(prefix);
+	size_t len = strlen(prefix);
 
 	for (ns = namespaces; ns != NULL; ns = ns->next) {
 		if (ns->prefix_len == len + 1 &&
--- a/src/lib-storage/mail-storage-service.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/mail-storage-service.c	Mon Dec 12 07:19:55 2016 +0200
@@ -137,7 +137,7 @@
 	struct setting_parser_context *set_parser = user->set_parser;
 	bool mail_debug;
 	const char *key, *orig_key, *append_value = NULL;
-	unsigned int len;
+	size_t len;
 	int ret;
 
 	mail_debug = mail_user_set_get_mail_debug(user->user_info,
@@ -766,7 +766,8 @@
 						   const char *const *fields)
 {
 	const char *field_name = t_strcut(data, ':');
-	unsigned int i, field_name_len;
+	unsigned int i;
+	size_t field_name_len;
 
 	if (fields == NULL)
 		return field_get_default(data);
@@ -1121,7 +1122,7 @@
 mail_storage_service_generate_session_id(pool_t pool, const char *prefix)
 {
 	guid_128_t guid;
-	unsigned int prefix_len = prefix == NULL ? 0 : strlen(prefix);
+	size_t prefix_len = prefix == NULL ? 0 : strlen(prefix);
 	string_t *str = str_new(pool, MAX_BASE64_ENCODED_SIZE(prefix_len + 1 + sizeof(guid)));
 
 	if (prefix != NULL)
@@ -1350,7 +1351,7 @@
 {
 	struct mail_storage_service_privileges priv;
 	const char *error;
-	unsigned int len;
+	size_t len;
 	bool disallow_root =
 		(user->flags & MAIL_STORAGE_SERVICE_FLAG_DISALLOW_ROOT) != 0;
 	bool temp_priv_drop =
--- a/src/lib-storage/mail-storage.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/mail-storage.c	Mon Dec 12 07:19:55 2016 +0200
@@ -1014,7 +1014,7 @@
 static bool have_listable_namespace_prefix(struct mail_namespace *ns,
 					   const char *name)
 {
-	unsigned int name_len = strlen(name);
+	size_t name_len = strlen(name);
 
 	for (; ns != NULL; ns = ns->next) {
 		if ((ns->flags & (NAMESPACE_FLAG_LIST_PREFIX |
--- a/src/lib-storage/mail-user.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/mail-user.c	Mon Dec 12 07:19:55 2016 +0200
@@ -483,7 +483,7 @@
 {
 	struct module_dir_load_settings mod_set;
 	struct module *module;
-	unsigned int name_len = strlen(name);
+	size_t name_len = strlen(name);
 
 	memset(&mod_set, 0, sizeof(mod_set));
 	mod_set.abi_version = DOVECOT_ABI_VERSION;
--- a/src/lib-storage/mailbox-list.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/mailbox-list.c	Mon Dec 12 07:19:55 2016 +0200
@@ -407,7 +407,7 @@
 
 static bool need_escape_dirstart(const char *vname, const char *maildir_name)
 {
-	unsigned int len;
+	size_t len;
 
 	if (vname[0] == '.') {
 		if (vname[1] == '\0' || vname[1] == '/')
@@ -429,7 +429,7 @@
 				char ns_sep, char list_sep, char escape_char,
 				const char *maildir_name)
 {
-	unsigned int ns_prefix_len = strlen(ns_prefix);
+	size_t ns_prefix_len = strlen(ns_prefix);
 	string_t *escaped_name = t_str_new(64);
 	char dirstart = TRUE;
 
@@ -523,7 +523,7 @@
 						  const char *vname)
 {
 	struct mail_namespace *ns = list->ns;
-	unsigned int prefix_len = strlen(ns->prefix);
+	size_t prefix_len = strlen(ns->prefix);
 	const char *storage_name = vname;
 	string_t *str;
 	char list_sep, ns_sep, *ret;
@@ -605,7 +605,7 @@
 mailbox_list_unescape_name_params(const char *src, const char *ns_prefix,
 				  char ns_sep, char list_sep, char escape_char)
 {
-	unsigned int ns_prefix_len = strlen(ns_prefix);
+	size_t ns_prefix_len = strlen(ns_prefix);
 	string_t *dest = t_str_new(strlen(src));
 	unsigned int num;
 
@@ -683,7 +683,7 @@
 const char *mailbox_list_default_get_vname(struct mailbox_list *list,
 					   const char *storage_name)
 {
-	unsigned int i, prefix_len, name_len;
+	size_t i, prefix_len, name_len;
 	const char *vname = storage_name;
 	char list_sep, ns_sep, *ret;
 
@@ -1428,7 +1428,7 @@
 			 enum mailbox_info_flags *flags_r)
 {
 	const char *path, *fname, *rootdir, *dir, *inbox;
-	unsigned int len;
+	size_t len;
 
 	*flags_r = 0;
 
@@ -1737,7 +1737,7 @@
 					const char **name)
 {
 	const char *root_dir, *path, *mailbox_name;
-	unsigned int len;
+	size_t len;
 
 	if (!list->mail_set->mail_full_filesystem_access)
 		return FALSE;
--- a/src/lib-storage/mailbox-tree.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/mailbox-tree.c	Mon Dec 12 07:19:55 2016 +0200
@@ -205,7 +205,7 @@
 		nodes = array_get(&ctx->node_path, &count);
 		node = NULL;
 		for (i = count; i != 0; i--) {
-			unsigned int len = strlen(nodes[i-1]->name) + 1;
+			size_t len = strlen(nodes[i-1]->name) + 1;
 
 			i_assert(len <= ctx->parent_pos);
 			ctx->parent_pos -= len;
--- a/src/lib-storage/mailbox-uidvalidity.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib-storage/mailbox-uidvalidity.c	Mon Dec 12 07:19:55 2016 +0200
@@ -75,7 +75,8 @@
 			   bool log_enoent)
 {
 	string_t *src, *dest;
-	unsigned int i, prefix_len;
+	unsigned int i;
+	size_t prefix_len;
 	int ret;
 
 	src = t_str_new(256);
@@ -111,7 +112,8 @@
 	DIR *d;
 	struct dirent *dp;
 	const char *fname, *dir, *prefix, *tmp;
-	unsigned int i, prefix_len;
+	unsigned int i;
+	size_t prefix_len;
 	uint32_t cur_value, min_value, max_value;
 	mode_t old_mask;
 	int fd;
--- a/src/lib/array.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/array.c	Mon Dec 12 07:19:55 2016 +0200
@@ -50,7 +50,8 @@
 bool array_equal_fn_i(const struct array *array1, const struct array *array2,
 		      int (*cmp)(const void *, const void*))
 {
-	unsigned int count1, count2, i, size;
+	unsigned int count1, count2, i;
+	size_t size;
 
 	if (!array_is_created_i(array1) || array1->buffer->used == 0)
 		return !array_is_created_i(array2) || array2->buffer->used == 0;
@@ -77,7 +78,8 @@
 			  int (*cmp)(const void *, const void *, const void *),
 			  const void *context)
 {
-	unsigned int count1, count2, i, size;
+	unsigned int count1, count2, i;
+	size_t size;
 
 	if (!array_is_created_i(array1) || array1->buffer->used == 0)
 		return !array_is_created_i(array2) || array2->buffer->used == 0;
@@ -144,7 +146,7 @@
 			    int (*cmp)(const void *, const void *))
 {
 	const void * const data = buffer_get_data(array->buffer, NULL);
-	const unsigned int s = array->element_size;
+	const size_t s = array->element_size;
 	unsigned int idx;
 
 	for (idx = 0; idx < array_count_i(array); idx++) {
--- a/src/lib/env-util.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/env-util.c	Mon Dec 12 07:19:55 2016 +0200
@@ -36,7 +36,7 @@
 #endif
 #else
 	extern char **environ;
-	unsigned int len;
+	size_t len;
 	char **envp;
 
 	len = strlen(name);
--- a/src/lib/failures.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/failures.c	Mon Dec 12 07:19:55 2016 +0200
@@ -102,7 +102,7 @@
 	io_loop_stop(ioloop);
 }
 
-static int log_fd_write(int fd, const unsigned char *data, unsigned int len)
+static int log_fd_write(int fd, const unsigned char *data, size_t len)
 {
 	struct ioloop *ioloop;
 	struct io *io;
@@ -551,10 +551,10 @@
 	return log_prefix != NULL ? log_prefix : "";
 }
 
-static int internal_send_split(string_t *full_str, unsigned int prefix_len)
+static int internal_send_split(string_t *full_str, size_t prefix_len)
 {
 	string_t *str;
-	unsigned int max_text_len, pos = prefix_len;
+	size_t max_text_len, pos = prefix_len;
 
 	str = t_str_new(PIPE_BUF);
 	str_append_n(str, str_c(full_str), prefix_len);
@@ -588,7 +588,7 @@
 	recursed++;
 	T_BEGIN {
 		string_t *str;
-		unsigned int prefix_len;
+		size_t prefix_len;
 
 		if (!log_prefix_sent && log_prefix != NULL) {
 			log_prefix_sent = TRUE;
--- a/src/lib/istream-base64-encoder.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/istream-base64-encoder.c	Mon Dec 12 07:19:55 2016 +0200
@@ -10,7 +10,7 @@
 	struct istream_private istream;
 
 	/* current encoded line length. */
-	unsigned int cur_line_len;
+	size_t cur_line_len;
 
 	unsigned int chars_per_line;
 	bool crlf;
--- a/src/lib/json-parser.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/json-parser.c	Mon Dec 12 07:19:55 2016 +0200
@@ -330,7 +330,7 @@
 
 static int json_parse_atom(struct json_parser *parser, const char *atom)
 {
-	unsigned int avail, len = strlen(atom);
+	size_t avail, len = strlen(atom);
 
 	avail = parser->end - parser->data;
 	if (avail < len) {
@@ -716,7 +716,7 @@
 
 void json_append_escaped_data(string_t *dest, const unsigned char *src, size_t size)
 {
-	unsigned int i;
+	size_t i;
 
 	for (i = 0; i < size; i++)
 		json_append_escaped_char(dest, src[i]);
--- a/src/lib/module-dir.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/module-dir.c	Mon Dec 12 07:19:55 2016 +0200
@@ -111,7 +111,7 @@
 	const char **deps;
 	struct module *m;
 	string_t *errmsg;
-	unsigned int len;
+	size_t len;
 
 	deps = dlsym(module->handle,
 		     t_strconcat(module->name, "_dependencies", NULL));
@@ -319,7 +319,7 @@
 struct module *module_dir_find(struct module *modules, const char *name)
 {
 	struct module *module;
-	unsigned int len = strlen(name);
+	size_t len = strlen(name);
 
 	for (module = modules; module != NULL; module = module->next) {
 		if (strncmp(module->name, name, len) == 0) {
@@ -674,7 +674,7 @@
 
 static const char *module_name_drop_suffix(const char *name)
 {
-	unsigned int len;
+	size_t len;
 
 	len = strlen(name);
 	if (len > 7 && strcmp(name + len - 7, "_plugin") == 0)
--- a/src/lib/net.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/net.c	Mon Dec 12 07:19:55 2016 +0200
@@ -963,7 +963,7 @@
 		T_BEGIN {
 			if (addr[0] == '[') {
 				/* allow [ipv6 addr] */
-				unsigned int len = strlen(addr);
+				size_t len = strlen(addr);
 				if (addr[len-1] == ']')
 					addr = t_strndup(addr+1, len-2);
 			}
--- a/src/lib/ostream-file.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/ostream-file.c	Mon Dec 12 07:19:55 2016 +0200
@@ -659,7 +659,7 @@
 				   of it in one pwrite(). */
 			} else {
 				/* write only the suffix */
-				unsigned int update_count = size - left;
+				size_t update_count = size - left;
 
 				data = CONST_PTR_OFFSET(data, update_count);
 				size -= update_count;
--- a/src/lib/printf-format-fix.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/printf-format-fix.c	Mon Dec 12 07:19:55 2016 +0200
@@ -4,11 +4,11 @@
 #include "printf-format-fix.h"
 
 static const char *
-fix_format_real(const char *fmt, const char *p, unsigned int *len_r)
+fix_format_real(const char *fmt, const char *p, size_t *len_r)
 {
 	const char *errstr;
 	char *buf;
-	unsigned int len1, len2, len3;
+	size_t len1, len2, len3;
 
 	i_assert((size_t)(p - fmt) < INT_MAX);
 	i_assert(p[0] == '%' && p[1] == 'm');
@@ -33,7 +33,7 @@
 }
 
 static const char *
-printf_format_fix_noalloc(const char *format, unsigned int *len_r)
+printf_format_fix_noalloc(const char *format, size_t *len_r)
 {
 	const char *p;
 	const char *ret = format;
@@ -60,7 +60,7 @@
 	return ret;
 }
 
-const char *printf_format_fix_get_len(const char *format, unsigned int *len_r)
+const char *printf_format_fix_get_len(const char *format, size_t *len_r)
 {
 	const char *ret;
 
@@ -73,7 +73,7 @@
 const char *printf_format_fix(const char *format)
 {
 	const char *ret;
-	unsigned int len;
+	size_t len;
 
 	ret = printf_format_fix_noalloc(format, &len);
 	if (ret != format)
@@ -83,7 +83,7 @@
 
 const char *printf_format_fix_unsafe(const char *format)
 {
-	unsigned int len;
+	size_t len;
 
 	return printf_format_fix_noalloc(format, &len);
 }
--- a/src/lib/printf-format-fix.h	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/printf-format-fix.h	Mon Dec 12 07:19:55 2016 +0200
@@ -5,7 +5,7 @@
    used. If the format string was modified, it's returned from data stack. */
 const char *printf_format_fix(const char *format) ATTR_FORMAT_ARG(1);
 /* Like printf_format_fix(), except return also the format string's length. */
-const char *printf_format_fix_get_len(const char *format, unsigned int *len_r)
+const char *printf_format_fix_get_len(const char *format, size_t *len_r)
 	ATTR_FORMAT_ARG(1);
 /* Like printf_format_fix(), except the format string is written to data
    stack without actually allocating it. Data stack must not be used until
--- a/src/lib/str-find.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/str-find.c	Mon Dec 12 07:19:55 2016 +0200
@@ -78,9 +78,10 @@
 struct str_find_context *str_find_init(pool_t pool, const char *key)
 {
 	struct str_find_context *ctx;
-	unsigned int key_len = strlen(key);
+	size_t key_len = strlen(key);
 
 	i_assert(key_len > 0);
+	i_assert(key_len < INT_MAX);
 
 	ctx = p_malloc(pool, sizeof(struct str_find_context) +
 		       sizeof(ctx->goodtab[0]) * key_len);
--- a/src/lib/str-sanitize.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/str-sanitize.c	Mon Dec 12 07:19:55 2016 +0200
@@ -25,7 +25,7 @@
 static void str_sanitize_truncate_char(string_t *dest, unsigned int initial_pos)
 {
 	const unsigned char *data = str_data(dest);
-	unsigned int len = str_len(dest);
+	size_t len = str_len(dest);
 
 	if (len == initial_pos)
 		return;
@@ -44,7 +44,7 @@
 
 void str_sanitize_append(string_t *dest, const char *src, size_t max_bytes)
 {
-	unsigned int initial_pos = str_len(dest);
+	size_t initial_pos = str_len(dest);
 	unichar_t chr;
 	size_t i;
 
--- a/src/lib/str.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/str.c	Mon Dec 12 07:19:55 2016 +0200
@@ -106,7 +106,7 @@
 #define SNPRINTF_INITIAL_EXTRA_SIZE 128
 	va_list args2;
 	char *tmp;
-	unsigned int init_size;
+	size_t init_size;
 	size_t pos = str->used;
 	int ret, ret2;
 
--- a/src/lib/strfuncs.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/strfuncs.c	Mon Dec 12 07:19:55 2016 +0200
@@ -114,7 +114,7 @@
 #define SNPRINTF_INITIAL_EXTRA_SIZE 256
 	va_list args2;
 	char *tmp;
-	unsigned int init_size;
+	size_t init_size;
 	int ret;
 #ifdef DEBUG
 	int old_errno = errno;
@@ -295,7 +295,7 @@
 const char *t_str_replace(const char *str, char from, char to)
 {
 	char *out;
-	unsigned int i, len;
+	size_t i, len;
 
 	if (strchr(str, from) == NULL)
 		return str;
--- a/src/lib/test-printf-format-fix.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/test-printf-format-fix.c	Mon Dec 12 07:19:55 2016 +0200
@@ -24,7 +24,7 @@
 
 	test_begin("printf_format_fix(safe)");
 	for (i = 0; i < N_ELEMENTS(tests); ++i) {
-		unsigned int len;
+		size_t len;
 		T_BEGIN {
 			test_assert_idx(printf_format_fix(tests[i])
 					== tests[i], i);
@@ -56,7 +56,7 @@
 	needlen = strlen(needle);
 
 	for (i = 0; i < N_ELEMENTS(tests); ++i) {
-		unsigned int len;
+		size_t len;
 		char const *chgd;
 		char const *insert;
 		unsigned int offs;
--- a/src/lib/unlink-old-files.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/unlink-old-files.c	Mon Dec 12 07:19:55 2016 +0200
@@ -18,7 +18,7 @@
 	struct dirent *d;
 	struct stat st;
 	string_t *path;
-	unsigned int prefix_len, dir_len;
+	size_t prefix_len, dir_len;
 
 	dirp = opendir(dir);
 	if (dirp == NULL) {
--- a/src/lib/var-expand.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lib/var-expand.c	Mon Dec 12 07:19:55 2016 +0200
@@ -34,7 +34,7 @@
 static const char *
 var_expand_long(const struct var_expand_table *table,
 		const struct var_expand_func_table *func_table,
-		const void *key_start, unsigned int key_len, void *context);
+		const void *key_start, size_t key_len, void *context);
 
 static const char *
 m_str_lcase(const char *str, struct var_expand_context *ctx ATTR_UNUSED)
@@ -152,7 +152,7 @@
 static const char *
 m_str_trim(const char *str, struct var_expand_context *ctx ATTR_UNUSED)
 {
-	unsigned int len;
+	size_t len;
 
 	len = strlen(str);
 	while (len > 0 && i_isspace(str[len-1]))
@@ -368,7 +368,7 @@
 static const char *
 var_expand_long(const struct var_expand_table *table,
 		const struct var_expand_func_table *func_table,
-		const void *key_start, unsigned int key_len, void *context)
+		const void *key_start, size_t key_len, void *context)
 {
         const struct var_expand_table *t;
 	const char *error, *key, *value = NULL;
@@ -434,7 +434,8 @@
 	const char *(*modifier[MAX_MODIFIER_COUNT])
 		(const char *, struct var_expand_context *);
 	const char *end;
-	unsigned int i, len, modifier_count;
+	unsigned int i, modifier_count;
+	size_t len;
 
 	memset(&ctx, 0, sizeof(ctx));
 	for (; *str != '\0'; str++) {
@@ -554,7 +555,7 @@
 					str_append_n(dest, var, ctx.width);
 				} else {
 					/* %05d -like padding. no truncation. */
-					int len = strlen(var);
+					ssize_t len = strlen(var);
 					while (len < ctx.width) {
 						str_append_c(dest, '0');
 						ctx.width--;
--- a/src/lmtp/commands.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/lmtp/commands.c	Mon Dec 12 07:19:55 2016 +0200
@@ -490,7 +490,7 @@
 {
 	const char *transpos = client->lmtp_set->lmtp_address_translate;
 	const char *p, *nextstr, *addrpos = *address;
-	unsigned int len;
+	size_t len;
 	string_t *username, *domain, *dest = NULL;
 
 	if (*transpos == '\0')
--- a/src/log/log-error-buffer.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/log/log-error-buffer.c	Mon Dec 12 07:19:55 2016 +0200
@@ -51,8 +51,8 @@
 void log_error_buffer_add(struct log_error_buffer *buf,
 			  const struct log_error *error)
 {
-	unsigned int prefix_size = strlen(error->prefix)+1;
-	unsigned int text_size = strlen(error->text)+1;
+	size_t prefix_size = strlen(error->prefix)+1;
+	size_t text_size = strlen(error->text)+1;
 	struct log_error_data *data;
 
 	if (buf->count == LOG_ERROR_BUFFER_MAX_LINES)
--- a/src/login-common/client-common-auth.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/login-common/client-common-auth.c	Mon Dec 12 07:19:55 2016 +0200
@@ -534,8 +534,7 @@
 int client_auth_read_line(struct client *client)
 {
 	const unsigned char *data;
-	size_t i, size;
-	unsigned int len;
+	size_t i, size, len;
 
 	if (i_stream_read_data(client->input, &data, &size, 0) == -1) {
 		client_destroy(client, "Disconnected");
--- a/src/login-common/client-common.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/login-common/client-common.c	Mon Dec 12 07:19:55 2016 +0200
@@ -610,7 +610,8 @@
 {
 	struct client *client = context;
 	const char *field_name = data;
-	unsigned int i, field_name_len;
+	unsigned int i;
+	size_t field_name_len;
 
 	if (client->auth_passdb_args == NULL)
 		return NULL;
--- a/src/login-common/login-proxy-state.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/login-common/login-proxy-state.c	Mon Dec 12 07:19:55 2016 +0200
@@ -132,7 +132,7 @@
 static bool login_proxy_state_try_notify(struct login_proxy_state *state,
 					 const char *user)
 {
-	unsigned int len;
+	size_t len;
 	ssize_t ret;
 
 	if (state->notify_fd == -1) {
--- a/src/master/master-settings.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/master/master-settings.c	Mon Dec 12 07:19:55 2016 +0200
@@ -284,7 +284,7 @@
 			const char **error_r)
 {
 	struct file_listener_settings *const *sets;
-	unsigned int base_dir_len = strlen(master_set->base_dir);
+	size_t base_dir_len = strlen(master_set->base_dir);
 	enum service_user_default user_default;
 
 	if (!array_is_created(l))
@@ -422,8 +422,9 @@
 	const char *const *strings;
 	ARRAY_TYPE(const_string) all_listeners;
 	struct passwd pw;
-	unsigned int i, j, count, len, client_limit, process_limit;
+	unsigned int i, j, count, client_limit, process_limit;
 	unsigned int max_auth_client_processes, max_anvil_client_processes;
+	size_t len;
 #ifdef CONFIG_BINARY
 	const struct service_settings *default_service;
 #else
@@ -666,7 +667,7 @@
 {
 	struct service_settings *const *services;
 	struct file_listener_settings *const *uls;
-	unsigned int dir_len = strlen(dir);
+	size_t dir_len = strlen(dir);
 
 	array_foreach(&set->services, services) {
 		struct service_settings *service = *services;
@@ -690,7 +691,7 @@
 	struct dirent *dp;
 	struct stat st;
 	string_t *str;
-	unsigned int prefix_len;
+	size_t prefix_len;
 
 	dirp = opendir(path);
 	if (dirp == NULL) {
--- a/src/master/service-process.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/master/service-process.c	Mon Dec 12 07:19:55 2016 +0200
@@ -172,7 +172,7 @@
 {
 	struct restrict_access_settings rset;
 	bool disallow_root;
-	unsigned int len;
+	size_t len;
 
 	if (service->vsz_limit != 0)
 		restrict_process_size(service->vsz_limit);
--- a/src/plugins/acl/acl-lookup-dict.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/acl/acl-lookup-dict.c	Mon Dec 12 07:19:55 2016 +0200
@@ -154,7 +154,7 @@
 	ARRAY_TYPE(const_string) old_ids_arr;
 	unsigned int newi, oldi, old_count, new_count;
 	string_t *path;
-	unsigned int prefix_len;
+	size_t prefix_len;
 	int ret;
 
 	/* get all existing identifiers for the user. we might be able to
@@ -261,7 +261,7 @@
 {
 	struct dict_iterate_context *dict_iter;
 	const char *const *idp, *prefix, *key, *value;
-	unsigned int prefix_len;
+	size_t prefix_len;
 
 	idp = array_idx(&iter->iter_ids, iter->iter_idx);
 	iter->iter_idx++;
--- a/src/plugins/acl/acl-mailbox-list.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/acl/acl-mailbox-list.c	Mon Dec 12 07:19:55 2016 +0200
@@ -235,7 +235,7 @@
 {
 	struct mail_namespace *ns = ctx->list->ns;
 	const char *name;
-	unsigned int len;
+	size_t len;
 
 	name = mailbox_list_get_storage_name(ns->list, vname);
 	len = strlen(name);
@@ -268,7 +268,7 @@
 	const struct mailbox_info *info;
 	string_t *pattern;
 	const char *prefix;
-	unsigned int i, prefix_len;
+	size_t i, prefix_len;
 	bool stars = FALSE, ret = FALSE;
 
 	/* do we have child mailboxes with LOOKUP right that don't match
--- a/src/plugins/dict-ldap/dict-ldap.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/dict-ldap/dict-ldap.c	Mon Dec 12 07:19:55 2016 +0200
@@ -53,12 +53,12 @@
 
 static bool
 dict_ldap_map_match(const struct dict_ldap_map *map, const char *path,
-		   ARRAY_TYPE(const_string) *values, unsigned int *pat_len_r,
-		   unsigned int *path_len_r, bool partial_ok, bool recurse)
+		   ARRAY_TYPE(const_string) *values, size_t *pat_len_r,
+		   size_t *path_len_r, bool partial_ok, bool recurse)
 {
 	const char *path_start = path;
 	const char *pat, *attribute, *p;
-	unsigned int len;
+	size_t len;
 
 	array_clear(values);
 	pat = map->pattern;
@@ -134,7 +134,8 @@
 		  ARRAY_TYPE(const_string) *values)
 {
 	const struct dict_ldap_map *maps;
-	unsigned int i, count, len;
+	unsigned int i, count;
+	size_t len;
 
 	t_array_init(values, dict->set->max_attribute_count);
 	maps = array_get(&dict->set->maps, &count);
--- a/src/plugins/fts-solr/fts-backend-solr-old.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/fts-solr/fts-backend-solr-old.c	Mon Dec 12 07:19:55 2016 +0200
@@ -60,10 +60,10 @@
 }
 
 static void
-xml_encode_data(string_t *dest, const unsigned char *data, unsigned int len)
+xml_encode_data(string_t *dest, const unsigned char *data, size_t len)
 {
 	unichar_t chr;
-	unsigned int i;
+	size_t i;
 
 	for (i = 0; i < len; i++) {
 		switch (data[i]) {
@@ -659,7 +659,7 @@
 solr_add_definite_query_args(string_t *str, struct mail_search_arg *arg,
 			     bool and_args)
 {
-	unsigned int last_len;
+	size_t last_len;
 
 	last_len = str_len(str);
 	for (; arg != NULL; arg = arg->next) {
@@ -761,7 +761,8 @@
 	struct mailbox *box;
 	const char *box_name;
 	char *box_id;
-	unsigned int i, len;
+	unsigned int i;
+	size_t len;
 
 	/* use a separate filter query for selecting the mailbox. it shouldn't
 	   affect the score and there could be some caching benefits too. */
--- a/src/plugins/fts-solr/fts-backend-solr.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/fts-solr/fts-backend-solr.c	Mon Dec 12 07:19:55 2016 +0200
@@ -80,12 +80,12 @@
 	return chr < 0x10ffff;
 }
 
-static unsigned int
-xml_encode_data_max(string_t *dest, const unsigned char *data, unsigned int len,
+static size_t
+xml_encode_data_max(string_t *dest, const unsigned char *data, size_t len,
 		    unsigned int max_len)
 {
 	unichar_t chr;
-	unsigned int i;
+	size_t i;
 
 	i_assert(max_len > 0 || len == 0);
 
@@ -135,7 +135,7 @@
 }
 
 static void
-xml_encode_data(string_t *dest, const unsigned char *data, unsigned int len)
+xml_encode_data(string_t *dest, const unsigned char *data, size_t len)
 {
 	(void)xml_encode_data_max(dest, data, len, len);
 }
@@ -564,7 +564,7 @@
 {
 	struct solr_fts_backend_update_context *ctx =
 		(struct solr_fts_backend_update_context *)_ctx;
-	unsigned int len;
+	size_t len;
 
 	if (_ctx->failed)
 		return -1;
@@ -707,7 +707,7 @@
 solr_add_definite_query_args(string_t *str, struct mail_search_arg *arg,
 			     bool and_args)
 {
-	unsigned int last_len;
+	size_t last_len;
 
 	last_len = str_len(str);
 	for (; arg != NULL; arg = arg->next) {
@@ -764,7 +764,7 @@
 solr_add_maybe_query_args(string_t *str, struct mail_search_arg *arg,
 			  bool and_args)
 {
-	unsigned int last_len;
+	size_t last_len;
 
 	last_len = str_len(str);
 	for (; arg != NULL; arg = arg->next) {
@@ -821,7 +821,7 @@
 	struct mailbox_status status;
 	string_t *str;
 	const char *box_guid;
-	unsigned int prefix_len;
+	size_t prefix_len;
 
 	if (fts_mailbox_get_guid(box, &box_guid) < 0)
 		return -1;
@@ -862,7 +862,8 @@
 	HASH_TABLE(char *, struct mailbox *) mailboxes;
 	struct mailbox *box;
 	const char *box_guid;
-	unsigned int i, len;
+	unsigned int i;
+	size_t len;
 	bool search_all_mailboxes;
 
 	/* use a separate filter query for selecting the mailbox. it shouldn't
--- a/src/plugins/fts-squat/squat-test.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/fts-squat/squat-test.c	Mon Dec 12 07:19:55 2016 +0200
@@ -43,7 +43,8 @@
 	char *line, *str, buf[4096];
 	buffer_t *valid;
 	int ret, fd;
-	unsigned int len, last = 0, seq = 1, node_count, uidlist_count;
+	unsigned int last = 0, seq = 1, node_count, uidlist_count;
+	size_t len;
 	enum squat_index_type index_type;
 	bool data_header = TRUE, first = TRUE, skip_body = FALSE;
 	bool mime_header = TRUE;
--- a/src/plugins/fts/fts-api.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/fts/fts-api.c	Mon Dec 12 07:19:55 2016 +0200
@@ -459,7 +459,7 @@
 	struct mailbox *box;
 	struct fts_index_header hdr;
 	const char *vname;
-	unsigned int len;
+	size_t len;
 	int ret;
 
 	if ((ns->flags & NAMESPACE_FLAG_INBOX_USER) != 0)
--- a/src/plugins/fts/fts-search-args.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/fts/fts-search-args.c	Mon Dec 12 07:19:55 2016 +0200
@@ -98,7 +98,7 @@
 				  struct mail_search_arg *orig_arg,
 				  const char *orig_token, const char **error_r)
 {
-	unsigned int orig_token_len = strlen(orig_token);
+	size_t orig_token_len = strlen(orig_token);
 	struct mail_search_arg *and_arg;
 	const char *token, *error;
 	int ret;
--- a/src/plugins/imap-acl/imap-acl-plugin.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/imap-acl/imap-acl-plugin.c	Mon Dec 12 07:19:55 2016 +0200
@@ -105,7 +105,8 @@
 imap_acl_write_rights_list(string_t *dest, const char *const *rights)
 {
 	const struct imap_acl_letter_map *map;
-	unsigned int i, orig_len = str_len(dest);
+	unsigned int i;
+	size_t orig_len = str_len(dest);
 	bool append_c = FALSE, append_d = FALSE;
 
 	for (i = 0; rights[i] != NULL; i++) {
@@ -211,7 +212,7 @@
 	struct acl_rights rights;
 	string_t *tmp;
 	const char *username;
-	unsigned int orig_len = str_len(dest);
+	size_t orig_len = str_len(dest);
 	bool seen_owner = FALSE, seen_positive_owner = FALSE;
 	int ret;
 
--- a/src/plugins/imap-stats/imap-stats-plugin.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/imap-stats/imap-stats-plugin.c	Mon Dec 12 07:19:55 2016 +0200
@@ -58,7 +58,7 @@
 	struct stats_client_command *scmd = IMAP_STATS_IMAP_CONTEXT(cmd);
 	struct stats *new_stats, *diff_stats;
 	const char *error;
-	unsigned int args_pos = 0, args_len = 0;
+	size_t args_pos = 0, args_len = 0;
 	string_t *str;
 	buffer_t *buf;
 
@@ -102,7 +102,7 @@
 
 	if (str_len(str) > PIPE_BUF) {
 		/* truncate the args so it fits */
-		unsigned int delete_count = str_len(str) - PIPE_BUF;
+		size_t delete_count = str_len(str) - PIPE_BUF;
 
 		i_assert(args_pos != 0);
 		if (delete_count > args_len)
--- a/src/plugins/mail-crypt/mail-crypt-pluginenv.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/mail-crypt/mail-crypt-pluginenv.c	Mon Dec 12 07:19:55 2016 +0200
@@ -61,7 +61,7 @@
 	string_t *set_key = t_str_new(64);
 	str_append(set_key, set_prefix);
 	str_append(set_key, "_private_key");
-	unsigned int prefix_len = str_len(set_key);
+	size_t prefix_len = str_len(set_key);
 
 	unsigned int i = 1;
 	const char *key_data;
--- a/src/plugins/mail-crypt/mail-crypt-userenv.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/mail-crypt/mail-crypt-userenv.c	Mon Dec 12 07:19:55 2016 +0200
@@ -15,7 +15,7 @@
 	string_t *set_key = t_str_new(64);
 	str_append(set_key, set_prefix);
 	str_append(set_key, "_private_key");
-	unsigned int prefix_len = str_len(set_key);
+	size_t prefix_len = str_len(set_key);
 
 	unsigned int i = 1;
 	const char *key_data;
--- a/src/plugins/quota/quota-dirsize.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/plugins/quota/quota-dirsize.c	Mon Dec 12 07:19:55 2016 +0200
@@ -125,7 +125,8 @@
 				 const char *path, bool is_file)
 {
 	struct quota_count_path *count_path;
-	unsigned int i, count, path_len;
+	unsigned int i, count;
+	size_t path_len;
 
 	path_len = strlen(path);
 	count_path = array_get_modifiable(paths, &count);
--- a/src/replication/aggregator/replicator-connection.c	Mon Dec 12 05:16:28 2016 +0200
+++ b/src/replication/aggregator/replicator-connection.c	Mon Dec 12 07:19:55 2016 +0200
@@ -84,7 +84,7 @@
 replicator_send_buf(struct replicator_connection *conn, buffer_t *buf)
 {
 	const unsigned char *data = buf->data;
-	unsigned int len = IO_BLOCK_SIZE;
+	size_t len = IO_BLOCK_SIZE;
 
 	/* try to send about IO_BLOCK_SIZE amount of data,
 	   but only full lines */
@@ -265,7 +265,7 @@
 replicator_send(struct replicator_connection *conn,
 		enum replication_priority priority, const char *data)
 {
-	unsigned int data_len = strlen(data);
+	size_t data_len = strlen(data);
 
 	if (conn->fd != -1 &&
 	    o_stream_get_buffer_used_size(conn->output) == 0) {