From 8f48a9e7e65e53da03bcc460ed2084cf63fa0048 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 10 Sep 2026 11:33:40 +0000 Subject: [PATCH 1/2] man/doveadm-who: Document the --ps parameter --- data/updates.js | 1 + docs/core/man/doveadm-who.1.md | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/data/updates.js b/data/updates.js index 36eed90fc..ee4f346aa 100644 --- a/data/updates.js +++ b/data/updates.js @@ -31,6 +31,7 @@ export const updates = { dict_protocol_v4: '2.4.0', doveadm_ex_expired_code: '2.4.0', doveadm_mailbox_commands_user: '2.4.0', + doveadm_who_ps_added: '2.4.6', extra_fields_default: '2.4.0', extra_fields_empty: '2.4.0', event_export_drivers_file_unix_added: '2.4.0', diff --git a/docs/core/man/doveadm-who.1.md b/docs/core/man/doveadm-who.1.md index ca4568894..3069c316f 100644 --- a/docs/core/man/doveadm-who.1.md +++ b/docs/core/man/doveadm-who.1.md @@ -10,6 +10,7 @@ dovecotComponent: core **doveadm** [*GLOBAL OPTIONS*] **who** [**-1**] + [**--ps**] [**-f** *passdb_field*] [**-a** *anvil_socket_path*] [*user_mask*] @@ -45,6 +46,11 @@ This command uses by default the output formatter **table**. Only the passdb fields beginning with the *user_* prefix are tracked. +**--ps** +: Print one line per process, with the process title as shown by ps(1). + This shows what each of the user's processes is currently doing. Can't + be used together with **-1**. [[added,doveadm_who_ps_added]] + ## ARGUMENTS *ip* [**/** *bits*] From bd5e0f506e8f9ac236e3ab92f1c2502d661c559c Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sun, 20 Sep 2026 08:19:51 +0000 Subject: [PATCH 2/2] lua: Document the new Lua functions http_request gained set_timeout(), set_absolute_timeout() and set_max_attempts(), which override the corresponding settings of the client that created the request. dovecot gained str_sanitize() and str_sanitize_utf8() for shortening a string for logging without cutting a multi-byte character in half. --- data/lua.js | 99 +++++++++++++++++++++++++++++++++++++++++++++++++ data/updates.js | 2 + 2 files changed, 101 insertions(+) diff --git a/data/lua.js b/data/lua.js index 6a3d89f91..ff24e8779 100644 --- a/data/lua.js +++ b/data/lua.js @@ -103,6 +103,53 @@ as the parent.` `Expand variables in the input string, [[link,settings_variables]].` }, + { + name: 'str_sanitize', + args: { + input: { + type: 'string', + text: `String to sanitize.` + }, + max_bytes: { + type: 'int', + text: `Maximum length of the result in bytes, including the appended \`...\`. Must be at least 1.` + }, + }, + return: `The sanitized string.`, + tags: [ 'dovecot' ], + text: ` +[[added,lua_str_sanitize_added]] Replace all control characters in the input +with \`?\`, and truncate it to \`max_bytes\` bytes. + +A truncated result ends with \`...\`. The input is treated as UTF-8, so a +multi-byte character is never cut in half, but \`max_bytes\` counts bytes +rather than characters. Use \`str_sanitize_utf8()\` to count characters. + +This is mainly useful for including untrusted data in log messages.` + }, + + { + name: 'str_sanitize_utf8', + args: { + input: { + type: 'string', + text: `String to sanitize.` + }, + max_cps: { + type: 'int', + text: `Maximum length of the result in unicode code points, including the appended ellipsis. Must be at least 1.` + }, + }, + return: `The sanitized string.`, + tags: [ 'dovecot' ], + text: ` +[[added,lua_str_sanitize_added]] Like \`str_sanitize()\`, but counts unicode +code points instead of bytes. + +Control characters are replaced with the unicode replacement character +(U+FFFD), and a truncated result ends with a horizontal ellipsis (U+2026).` + }, + { name: 'base64.encode', args: { @@ -354,6 +401,58 @@ Optionally you can set \`synchronous\`, which will cause "100 Continue" header to be sent.` }, + { + name: 'set_timeout', + args: { + value: { + type: 'string', + text: `Time interval, e.g. \`2s\` or \`500ms\`.` + }, + }, + tags: [ 'http_request' ], + text: ` +[[added,lua_http_request_overrides_added]] Override the client's +\`request_timeout\` ([[setting,http_client_request_timeout]]) for this +request. + +This is the timeout for a single attempt, so a request that is retried can +take up to \`max_attempts\` times this long. Use \`set_absolute_timeout()\` +to limit the total time instead.` + }, + + { + name: 'set_absolute_timeout', + args: { + value: { + type: 'string', + text: `Time interval, e.g. \`2s\` or \`500ms\`.` + }, + }, + tags: [ 'http_request' ], + text: ` +[[added,lua_http_request_overrides_added]] Override the client's +\`request_absolute_timeout\` ([[setting,http_client_request_absolute_timeout]]) +for this request. + +This is the maximum total time the request may take, counted from +\`submit()\` and including any retries.` + }, + + { + name: 'set_max_attempts', + args: { + value: { + type: 'int', + text: `Maximum number of attempts. Must be at least 1.` + }, + }, + tags: [ 'http_request' ], + text: ` +[[added,lua_http_request_overrides_added]] Override the client's +\`request_max_attempts\` ([[setting,http_client_request_max_attempts]]) for +this request.` + }, + { name: 'set_event', args: { diff --git a/data/updates.js b/data/updates.js index ee4f346aa..4695f30bd 100644 --- a/data/updates.js +++ b/data/updates.js @@ -54,7 +54,9 @@ export const updates = { login_proxy_rawlog_dir_changed: '2.4.2', lua_auth_init: '2.4.0', lua_dns_client: '2.4.0', + lua_http_request_overrides_added: '2.4.6', lua_script_init: '2.4.0', + lua_str_sanitize_added: '2.4.6', mail_attachment_detection_options_changed: '2.4.2', mail_attachment_detection_options_maildir_changed: '2.4.3', mail_cache_fields_changed: '2.4.1',