mirror of
https://github.com/rsyslog/rsyslog.git
synced 2026-06-19 21:02:57 +02:00
Some deployments need to disambiguate multiple senders sharing an IP,
for example autossh or similar tunnel setups. Exposing the source port
improves observability and lets pipelines key on a stable tuple.
Impact: new property/JSON field; tcps_sess IF v4; out-of-tree modules
must rebuild.
Before: messages exposed fromhost and fromhost-ip only.
After: messages also expose fromhost-port and jsonmesg includes it.
Introduce PROP_FROMHOST_PORT and wire it through msg.{h,c}. For TCP,
capture the remote port on accept, store it in tcps_sess, and attach it
to the msg on submit. For other inputs, resolveDNS derives the port from
the sockaddr when available; local inputs return an empty string. Add a
getter, duplication and destructor handling, and name<->ID mapping. Add
the field to jsonmesg output. Update docs, lexer keywords, and the
external plugin interface doc (property is modifiable). Bump
tcps_sessCURR_IF_VERSION to 4 and add SetHostPort() to the interface.
Include a focused test (fromhost-port.sh) that verifies the property.
Non-technical rationale: allow identification by (fromhost-ip,
fromhost-port) where IP alone is shared across systems (e.g., autossh).
With help from AI-Agents: ChatGPT
27 lines
729 B
Bash
Executable File
27 lines
729 B
Bash
Executable File
#!/bin/bash
|
|
## fromhost-port.sh
|
|
## Check that fromhost-port property records sender port
|
|
. ${srcdir:=.}/diag.sh init
|
|
export NUMMESSAGES=1
|
|
export QUEUE_EMPTY_CHECK_FUNC=wait_file_lines
|
|
generate_conf
|
|
add_conf '
|
|
module(load="../plugins/imtcp/.libs/imtcp")
|
|
input(type="imtcp" port="0" listenPortFileName="'$RSYSLOG_DYNNAME'.tcpflood_port")
|
|
|
|
template(name="outfmt" type="list") {
|
|
property(name="fromhost-port")
|
|
constant(value="\n")
|
|
}
|
|
|
|
:msg, contains, "msgnum:" action(type="omfile" template="outfmt"
|
|
file="'$RSYSLOG_OUT_LOG'")
|
|
'
|
|
startup
|
|
tcpflood -m $NUMMESSAGES -w "${RSYSLOG_DYNNAME}.tcpflood-port"
|
|
shutdown_when_empty
|
|
wait_shutdown
|
|
export EXPECTED="$(cat "${RSYSLOG_DYNNAME}.tcpflood-port")"
|
|
cmp_exact
|
|
exit_test
|