]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Don't use same session ID for multiple mail_storage_service_next() calls.
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 15 Apr 2016 13:12:44 +0000 (16:12 +0300)
committerGitLab <gitlab@git.dovecot.net>
Mon, 25 Apr 2016 17:24:32 +0000 (20:24 +0300)
dsync does multiple mail_storage_service_next() calls for the same
mail_storage_service_user. This causes stats plugin to send the same
session ID to stats process, which complains about duplicates. Solved this
in a generic way by having the following mail_storage_service_next() calls
append :counter to session ID.

src/lib-storage/mail-storage-service.c

index babdab9804dfa121ffc1704c8d044e412e8ad58f..b94d08b513809a575305cc942a534353c6005f96 100644 (file)
@@ -82,6 +82,8 @@ struct mail_storage_service_user {
        const struct setting_parser_info *user_info;
        struct setting_parser_context *set_parser;
 
+       unsigned int session_id_counter;
+
        unsigned int anonymous:1;
        unsigned int admin:1;
 };
@@ -658,8 +660,15 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx,
        mail_user->admin = user->admin;
        mail_user->auth_token = p_strdup(mail_user->pool, user->auth_token);
        mail_user->auth_user = p_strdup(mail_user->pool, user->auth_user);
-       mail_user->session_id =
-               p_strdup(mail_user->pool, user->input.session_id);
+       if (user->session_id_counter++ == 0) {
+               mail_user->session_id =
+                       p_strdup(mail_user->pool, user->input.session_id);
+       } else {
+               mail_user->session_id =
+                       p_strdup_printf(mail_user->pool, "%s:%u",
+                                       user->input.session_id,
+                                       user->session_id_counter);
+       }
        mail_user->userdb_fields = user->input.userdb_fields == NULL ? NULL :
                p_strarray_dup(mail_user->pool, user->input.userdb_fields);
        mail_user->autoexpunge_enabled =