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