]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-smtp: smtp-server-transaction - Base transaction ID on connection session ID.
authorStephan Bosch <stephan.bosch@open-xchange.com>
Fri, 1 Oct 2021 22:36:09 +0000 (00:36 +0200)
committertimo.sirainen <timo.sirainen@open-xchange.com>
Wed, 6 Oct 2021 21:58:03 +0000 (21:58 +0000)
Composed as "<connection session ID>:<trasaction sequence>".

src/lib-smtp/smtp-server-private.h
src/lib-smtp/smtp-server-transaction.c

index 3c890054f00c5d9e93be1c45cedada450084e7ef..54edb6bedad14e7621cf8fed536c81a152e07743 100644 (file)
@@ -164,6 +164,7 @@ struct smtp_server_connection {
        char *helo_domain, *username;
 
        char *session_id;
+       unsigned int transaction_seq;
 
        struct timeout *to_idle;
        struct istream *raw_input;
index d91775f1477d217d5fe714450b44d6721b5240d9..07bc44302d688cc78e8ab388c71d0072e4f00210 100644 (file)
@@ -4,8 +4,6 @@
 #include "array.h"
 #include "str.h"
 #include "strfuncs.h"
-#include "guid.h"
-#include "base64.h"
 #include "message-date.h"
 #include "smtp-address.h"
 #include "smtp-params.h"
@@ -18,6 +16,7 @@ smtp_server_transaction_update_event(struct smtp_server_transaction *trans)
        struct event *event = trans->event;
 
        event_add_str(event, "transaction_id", trans->id);
+       event_add_str(event, "session", trans->id);
        event_add_str(event, "mail_from",
                      smtp_address_encode(trans->mail_from));
        event_add_str(event, "mail_from_raw",
@@ -33,8 +32,6 @@ smtp_server_transaction_create(struct smtp_server_connection *conn,
 {
        struct smtp_server_transaction *trans;
        pool_t pool;
-       guid_128_t guid;
-       string_t *id;
 
        /* create new transaction */
        pool = pool_alloconly_create("smtp server transaction", 4096);
@@ -43,12 +40,9 @@ smtp_server_transaction_create(struct smtp_server_connection *conn,
        trans->conn = conn;
 
        /* generate transaction ID */
-       id = t_str_new(30);
-       guid_128_generate(guid);
-       base64_encode(guid, sizeof(guid), id);
-       i_assert(str_c(id)[str_len(id)-2] == '=');
-       str_truncate(id, str_len(id)-2); /* drop trailing "==" */
-       trans->id = p_strdup(pool, str_c(id));
+       conn->transaction_seq++;
+       trans->id = p_strdup_printf(pool, "%s:%u", conn->session_id,
+                                   conn->transaction_seq);
 
        trans->flags = mail_data->flags;
        trans->mail_from = smtp_address_clone(trans->pool, mail_data->path);