#1331 mod_firewall: stacktrace in SUBSCRIBED? when local user goes offline
Reporter
ge0rg
Owner
Nobody
Created
Updated
Stars
★ (1)
Tags
Priority-Medium
Type-Defect
Status-Accepted
ge0rg
on
I have the following shortened rules in my ::preroute chain:
SUBSCRIBED?
PASS.
When a local user goes offline, it's triggered on the presence-unavailable going out via s2s, causing this stacktrace (because the user is offline, their roster is unavailable and thus mod_firewall assumes that the recipient is the local user):
Mar 20 07:37:04 c2s5569b5f71820 debug Received[c2s]: <presence type='unavailable'>
Mar 20 07:37:04 mod_firewall::preroute debug Chain "user/pass_acceptable" accepted stanza (ret false)
Mar 20 07:37:04 c2s5569b5f71820 debug Presence without caps received, skipping
Mar 20 07:37:04 mod_firewall::deliver debug Chain "user/pass_acceptable" accepted stanza (ret false)
Mar 20 07:37:04 mod_firewall::preroute debug Chain "user/pass_acceptable" did not accept or reject stanza (ret nil)
Mar 20 07:37:04 rostermanager debug load_roster: asked for: contact@xmpp.jp
Mar 20 07:37:04 rostermanager debug load_roster: loading for offline user: contact@xmpp.jp
Mar 20 07:37:04 storagemanager error Failed to load storage driver plugin internal on xmpp.jp: unknown-host
Mar 20 07:37:04 storagemanager warn Falling back to null driver for roster storage on xmpp.jp
Mar 20 07:37:04 mod_c2s error Traceback[c2s]: /usr/lib/prosody/core/storagemanager.lua:167: attempt to index field '?' (a nil value)
stack traceback:
/usr/lib/prosody/core/storagemanager.lua:167: in function 'open'
/usr/lib/prosody/core/rostermanager.lua:111: in function 'load_roster'
/usr/lib/prosody/core/rostermanager.lua:244: in function 'is_contact_subscribed'
mod_firewall::user/marked_user_spam:52: in function '?'
/usr/lib/prosody/util/events.lua:78: in function </usr/lib/prosody/util/events.lua:74>
(tail call): ?
...-enabled/mod_log_slow_events/mod_log_slow_events.lua:12: in function <...-enabled/mod_log_slow_events/mod_log_slow_events.lua:10>
(tail call): ?
(tail call): ?
(tail call): ?
...
/usr/lib/prosody/modules/mod_c2s.lua:296: in function 'ondisconnect'
/usr/lib/prosody/net/server_event.lua:226: in function </usr/lib/prosody/net/server_event.lua:213>
(tail call): ?
/usr/lib/prosody/net/server_event.lua:603: in function </usr/lib/prosody/net/server_event.lua:557>
[C]: in function 'loop'
/usr/lib/prosody/net/server_event.lua:751: in function </usr/lib/prosody/net/server_event.lua:750>
[C]: in function 'xpcall'
/usr/bin/prosody:400: in function 'loop'
/usr/bin/prosody:431: in main chunk
[C]: ?
Zash
on
Thanks for the report.
Did we decide if this is a bug in rostermanager or a misuse of the API by mod_firewall?
I have the following shortened rules in my ::preroute chain: SUBSCRIBED? PASS. When a local user goes offline, it's triggered on the presence-unavailable going out via s2s, causing this stacktrace (because the user is offline, their roster is unavailable and thus mod_firewall assumes that the recipient is the local user): Mar 20 07:37:04 c2s5569b5f71820 debug Received[c2s]: <presence type='unavailable'> Mar 20 07:37:04 mod_firewall::preroute debug Chain "user/pass_acceptable" accepted stanza (ret false) Mar 20 07:37:04 c2s5569b5f71820 debug Presence without caps received, skipping Mar 20 07:37:04 mod_firewall::deliver debug Chain "user/pass_acceptable" accepted stanza (ret false) Mar 20 07:37:04 mod_firewall::preroute debug Chain "user/pass_acceptable" did not accept or reject stanza (ret nil) Mar 20 07:37:04 rostermanager debug load_roster: asked for: contact@xmpp.jp Mar 20 07:37:04 rostermanager debug load_roster: loading for offline user: contact@xmpp.jp Mar 20 07:37:04 storagemanager error Failed to load storage driver plugin internal on xmpp.jp: unknown-host Mar 20 07:37:04 storagemanager warn Falling back to null driver for roster storage on xmpp.jp Mar 20 07:37:04 mod_c2s error Traceback[c2s]: /usr/lib/prosody/core/storagemanager.lua:167: attempt to index field '?' (a nil value) stack traceback: /usr/lib/prosody/core/storagemanager.lua:167: in function 'open' /usr/lib/prosody/core/rostermanager.lua:111: in function 'load_roster' /usr/lib/prosody/core/rostermanager.lua:244: in function 'is_contact_subscribed' mod_firewall::user/marked_user_spam:52: in function '?' /usr/lib/prosody/util/events.lua:78: in function </usr/lib/prosody/util/events.lua:74> (tail call): ? ...-enabled/mod_log_slow_events/mod_log_slow_events.lua:12: in function <...-enabled/mod_log_slow_events/mod_log_slow_events.lua:10> (tail call): ? (tail call): ? (tail call): ? ... /usr/lib/prosody/modules/mod_c2s.lua:296: in function 'ondisconnect' /usr/lib/prosody/net/server_event.lua:226: in function </usr/lib/prosody/net/server_event.lua:213> (tail call): ? /usr/lib/prosody/net/server_event.lua:603: in function </usr/lib/prosody/net/server_event.lua:557> [C]: in function 'loop' /usr/lib/prosody/net/server_event.lua:751: in function </usr/lib/prosody/net/server_event.lua:750> [C]: in function 'xpcall' /usr/bin/prosody:400: in function 'loop' /usr/bin/prosody:431: in main chunk [C]: ?
Thanks for the report. Did we decide if this is a bug in rostermanager or a misuse of the API by mod_firewall?
Changes