]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: mail-user - Add event_ prefixed values from userdb as event fields
authorAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 1 Feb 2023 11:58:42 +0000 (13:58 +0200)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Wed, 8 Feb 2023 17:31:33 +0000 (19:31 +0200)
src/lib-storage/mail-storage-service.c
src/lib-storage/mail-user.c
src/lib-storage/mail-user.h

index 86584c5fb04902709a59e00e623ac0ed5705f383..dd31cbca2d590aadac3e2699d8afa54163893d41 100644 (file)
@@ -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",
index 9cf60424a5c34b1da619af474fed98b6296d05e3..1382e7161a56a70b3f4802ac6a1d40984363f776 100644 (file)
@@ -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,
index ef833d1bd101af47c5a91ce7f89104dbc0fe6574..166c425ac1cc1e01014c5a74c518b0eb34787648 100644 (file)
@@ -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);