Support client_id variable expansion
Aki Tuomi
aki.tuomi at open-xchange.com
Mon Jun 28 08:58:04 EEST 2021
> On 02/06/2021 17:45 Eirik Rye <rye at trojka.no> wrote:
>
>
> Hello,
>
> We are using imap_id_log='*' (and imap_id_retain=yes) to log user client information to the dovecot logs, and this information is aggregated to give us extra debugging information for customer support.
>
> However, as some clients send the ID information pre-login and others send it post-login, the aggregation logic is needlessly complex as we need to correlate the session IDs of the pre-login ID messages in order to determine the correct user.
>
> Hoping to simplify this, I wanted to log the client_id variable on logout, in imap_logout_format:
>
> imap_logout_format = in=%i out=%o deleted=%{deleted} expunged=%{expunged} trashed=%{trashed} hdr_count=%{fetch_hdr_count} hdr_bytes=%{fetch_hdr_bytes} body_count=%{fetch_body_count} body_bytes=%{fetch_body_bytes} client_id="%{client_id}"
>
> However, this only results in the following log being printed:
>
> client_id="UNSUPPORTED_VARIABLE_client_id"
>
> While examining the source code (login-common/client-common.c), it seems like this could be trivially supported by adding `client_id` to the `login_var_expand_empty_tab` struct, and adding the relevant code to populate this variable to `get_var_expand_table(struct client *client)`.
>
> I am willing to write a pull request for this, unless I am missing some obvious reason why expansion of the client's `client_id` field is not supported in the first place?
>
> - Eirik
Hi!
To use client_id like that you'd need to export it to imap process first. You can try exporting it with userdb_client_id=%{client_id} in your passwd-file, then it will be available as %{client_id} in your imap process.
In non-passwd-file userdb, you can use just client_id=%{client_id}
Aki
More information about the dovecot
mailing list