Configure Socks5 Proxy in Lua policy extras sources helper?


2025-03-03T21:27:16.248287Z DEBUG       main kumod::logging: Joined -> Some(Ok(()))
2025-03-03T21:27:16.248338Z  INFO       main kumod::spool: Shutting down spool
Error: Initialization raised an error: call validate_config callback: runtime error: /opt/kumomta/share/policy-extras/sources.lua:75: /opt/kumomta/share/policy-extras/sources.lua:41 SourcesHelperConfig: invalid value for field 'source'
/opt/kumomta/share/policy-extras/sources.lua:41 Expected value of type 'map<string,SourceConfig>' and encountered an error during coercion
/opt/kumomta/share/policy-extras/sources.lua:41 /opt/kumomta/share/policy-extras/sources.lua:75: /opt/kumomta/share/policy-extras/sources.lua:41 map<string,SourceConfig>: invalid value for key 'ip-1'
/opt/kumomta/share/policy-extras/sources.lua:41 Expected value of type 'SourceConfig' and encountered an error during coercion
/opt/kumomta/share/policy-extras/sources.lua:41 /opt/kumomta/share/policy-extras/sources.lua:75: /opt/kumomta/share/policy-extras/sources.lua:41 SourceConfig: unknown field 'socks5_proxy_server'
stack traceback:
    [C]: in function 'error'
    /opt/kumomta/share/policy-extras/typing.lua:78: in method 'raise'
    /opt/kumomta/share/policy-extras/typing.lua:249: in metamethod 'newindex'
    /opt/kumomta/share/policy-extras/typing.lua:258: in function </opt/kumomta/share/policy-extras/typing.lua:253>
    (...tail calls...)
    /opt/kumomta/share/policy-extras/sources.lua:41: in upvalue 'load_data_from_file'
    /opt/kumomta/share/policy-extras/sources.lua:75: in function </opt/kumomta/share/policy-extras/sources.lua:68>
stack traceback:
    [C]: in local 'poll'
    [string "?"]:4: in main chunk
    (...tail calls...)
    /opt/kumomta/share/policy-extras/queue.lua:599: in function </opt/kumomta/share/policy-extras/queue.lua:550>

I see, the underlying error message is getting lost in the lua typing layer. If you make a script like this:

local kumo = require 'kumo'

kumo.make_egress_source {
  socks5_proxy_server = 'kumo-proxy:5000'
}

and evaluate it like this, you get a better diagnostic:

$ kumod --script --policy ./proxy.lua
Error: Failed to parse policy file "./proxy.lua"

Caused by:
    deserialize error: invalid socket address syntax, while processing {"socks5_proxy_server":"kumo-proxy:5000"}
    stack traceback:
        [C]: in function 'kumo.make_egress_source'
        [string "./proxy.lua"]:3: in main chunk

sources.lua: surface socks5_proxy_source_address issues better · KumoCorp/kumomta@f1f5d27 · GitHub improves this case

Thanks Wez