From 97e121bb6d06758cb1fd432fc4269e4082108b41 Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Wed, 1 Feb 2023 13:58:42 +0200 Subject: [PATCH] lib-storage: mail-user - Add event_ prefixed values from userdb as event fields --- src/lib-storage/mail-storage-service.c | 2 ++ src/lib-storage/mail-user.c | 17 +++++++++++++++++ src/lib-storage/mail-user.h | 3 +++ 3 files changed, 22 insertions(+) diff --git a/src/lib-storage/mail-storage-service.c b/src/lib-storage/mail-storage-service.c index 86584c5fb0..dd31cbca2d 100644 --- a/src/lib-storage/mail-storage-service.c +++ b/src/lib-storage/mail-storage-service.c @@ -721,6 +721,8 @@ mail_storage_service_init_post(struct mail_storage_service_ctx *ctx, mail_user->userdb_fields = user->input.userdb_fields == NULL ? NULL : p_strarray_dup(mail_user->pool, user->input.userdb_fields); + mail_user_add_event_fields(mail_user); + string_t *str = t_str_new(64); str_printfa(str, "Effective uid=%s, gid=%s, home=%s", diff --git a/src/lib-storage/mail-user.c b/src/lib-storage/mail-user.c index 9cf60424a5..1382e7161a 100644 --- a/src/lib-storage/mail-user.c +++ b/src/lib-storage/mail-user.c @@ -53,6 +53,23 @@ static void mail_user_stats_fill_base(struct mail_user *user ATTR_UNUSED, { } +void mail_user_add_event_fields(struct mail_user *user) +{ + if (user->userdb_fields == NULL) + return; + for (unsigned int i = 0; user->userdb_fields[i] != NULL; i++) { + const char *field = user->userdb_fields[i]; + if (!str_begins(field, "event_")) + continue; + const char *key = field + 6; + const char *value = strchr(key, '='); + if (value != NULL) { + event_add_str(user->event, t_strdup_until(key, value), + value+1); + } + } +} + static struct mail_user * mail_user_alloc_int(struct event *parent_event, const char *username, diff --git a/src/lib-storage/mail-user.h b/src/lib-storage/mail-user.h index ef833d1bd1..166c425ac1 100644 --- a/src/lib-storage/mail-user.h +++ b/src/lib-storage/mail-user.h @@ -208,6 +208,9 @@ const char *mail_user_get_anvil_userip_ident(struct mail_user *user); struct mail_storage * mail_user_get_storage_class(struct mail_user *user, const char *name); +/* Import any event_ fields from userdb fields to mail user event. */ +void mail_user_add_event_fields(struct mail_user *user); + /* Initialize SSL client settings from mail_user settings. */ void mail_user_init_ssl_client_settings(struct mail_user *user, struct ssl_iostream_settings *ssl_set_r); -- 2.47.3