Mercurial > prosody-hg
annotate plugins/mod_s2s.lua @ 14106:b5eeb6730721
Merge 13.0->trunk
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 22 Mar 2026 11:28:52 +0100 |
| parents | e08e535a9945 a1fb05cbd44e |
| children | c1469296190d |
| rev | line source |
|---|---|
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 -- Prosody IM |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
4 -- |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- COPYING file in the source package for more information. |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 module:set_global(); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 |
|
4755
844019f369a5
mod_s2s: Fix imports and remove some unused variables
Matthew Wild <mwild1@gmail.com>
parents:
4752
diff
changeset
|
11 local prosody = prosody; |
|
844019f369a5
mod_s2s: Fix imports and remove some unused variables
Matthew Wild <mwild1@gmail.com>
parents:
4752
diff
changeset
|
12 local hosts = prosody.hosts; |
|
5013
ab693eea0869
mod_admin_adhoc, mod_admin_telnet, mod_bosh, mod_c2s, mod_component, mod_pep, mod_presence, mod_roster, mod_s2s: Import core_post_stanza from the global prosody table.
Kim Alvefur <zash@zash.se>
parents:
4997
diff
changeset
|
13 local core_process_stanza = prosody.core_process_stanza; |
|
4755
844019f369a5
mod_s2s: Fix imports and remove some unused variables
Matthew Wild <mwild1@gmail.com>
parents:
4752
diff
changeset
|
14 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
15 local tostring, type = tostring, type; |
|
8461
0f05d6535dfa
mod_s2s: Remove unused local [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8268
diff
changeset
|
16 local traceback = debug.traceback; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
18 local add_task = require "prosody.util.timer".add_task; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
19 local stop_timer = require "prosody.util.timer".stop; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
20 local st = require "prosody.util.stanza"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
21 local initialize_filters = require "prosody.util.filters".initialize; |
|
14104
a1fb05cbd44e
mod_s2s: Fully validate stream addressing
Kim Alvefur <zash@zash.se>
parents:
14028
diff
changeset
|
22 local prepped_split = require "prosody.util.jid".prepped_split; |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
23 local new_xmpp_stream = require "prosody.util.xmppstream".new; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
24 local s2s_new_incoming = require "prosody.core.s2smanager".new_incoming; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
25 local s2s_new_outgoing = require "prosody.core.s2smanager".new_outgoing; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
26 local s2s_destroy_session = require "prosody.core.s2smanager".destroy_session; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
27 local uuid_gen = require "prosody.util.uuid".generate; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
28 local async = require "prosody.util.async"; |
|
12301
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
29 local runner = async.runner; |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
30 local connect = require "prosody.net.connect".connect; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
31 local service = require "prosody.net.resolvers.service"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
32 local resolver_chain = require "prosody.net.resolvers.chain"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
33 local errors = require "prosody.util.error"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
34 local set = require "prosody.util.set"; |
|
13554
902d25cd0557
mod_s2s: Limit size of outgoing stanza queue
Kim Alvefur <zash@zash.se>
parents:
13534
diff
changeset
|
35 local queue = require "prosody.util.queue"; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 |
|
13209
c8d949cf6b09
plugins: Switch to :get_option_period() for time range options
Kim Alvefur <zash@zash.se>
parents:
13111
diff
changeset
|
37 local connect_timeout = module:get_option_period("s2s_timeout", 90); |
|
c8d949cf6b09
plugins: Switch to :get_option_period() for time range options
Kim Alvefur <zash@zash.se>
parents:
13111
diff
changeset
|
38 local stream_close_timeout = module:get_option_period("s2s_close_timeout", 5); |
|
5522
3912c9264ef0
mod_s2s: Obey tcp_keepalives option for s2s too, and make it individually configurable through s2s_tcp_keepalives (thanks yeled)
Matthew Wild <mwild1@gmail.com>
parents:
5505
diff
changeset
|
39 local opt_keepalives = module:get_option_boolean("s2s_tcp_keepalives", module:get_option_boolean("tcp_keepalives", true)); |
|
5363
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
40 local secure_auth = module:get_option_boolean("s2s_secure_auth", false); -- One day... |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
41 local secure_domains, insecure_domains = |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
42 module:get_option_set("s2s_secure_domains", {})._items, module:get_option_set("s2s_insecure_domains", {})._items; |
|
12330
38b5b05407be
various: Require encryption by default for real
Kim Alvefur <zash@zash.se>
parents:
12301
diff
changeset
|
43 local require_encryption = module:get_option_boolean("s2s_require_encryption", true); |
|
13213
50324f66ca2a
plugins: Use integer config API with interval specification where sensible
Kim Alvefur <zash@zash.se>
parents:
13209
diff
changeset
|
44 local stanza_size_limit = module:get_option_integer("s2s_stanza_size_limit", 1024*512, 10000); |
|
13554
902d25cd0557
mod_s2s: Limit size of outgoing stanza queue
Kim Alvefur <zash@zash.se>
parents:
13534
diff
changeset
|
45 local sendq_size = module:get_option_integer("s2s_send_queue_size", 1024*32, 1); |
|
13987
4067a95336dd
mod_s2s, s2smanager: Experimental s2s_block_immediate_retries option
Matthew Wild <mwild1@gmail.com>
parents:
13985
diff
changeset
|
46 local block_retries = module:get_option_boolean("s2s_block_immediate_retries", false); |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
47 |
|
13504
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
48 local advertised_idle_timeout = 14*60; -- default in all net.server implementations |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
49 local network_settings = module:get_option("network_settings"); |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
50 if type(network_settings) == "table" and type(network_settings.read_timeout) == "number" then |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
51 advertised_idle_timeout = network_settings.read_timeout; |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
52 end |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
53 |
|
11525
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
54 local measure_connections_inbound = module:metric( |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
55 "gauge", "connections_inbound", "", |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
56 "Established incoming s2s connections", |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
57 {"host", "type", "ip_family"} |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
58 ); |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
59 local measure_connections_outbound = module:metric( |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
60 "gauge", "connections_outbound", "", |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
61 "Established outgoing s2s connections", |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
62 {"host", "type", "ip_family"} |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
63 ); |
|
6630
6735e2d735d6
mod_c2s, mod_s2s: Collect statistics on number of connections
Kim Alvefur <zash@zash.se>
parents:
6608
diff
changeset
|
64 |
|
11526
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
65 local m_accepted_tcp_connections = module:metric( |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
66 "counter", "accepted_tcp", "", |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
67 "Accepted incoming connections on the TCP layer" |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
68 ); |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
69 local m_authn_connections = module:metric( |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
70 "counter", "authenticated", "", |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
71 "Authenticated incoming connections", |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
72 {"host", "direction", "mechanism"} |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
73 ); |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
74 local m_initiated_connections = module:metric( |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
75 "counter", "initiated", "", |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
76 "Initiated outbound connections", |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
77 {"host"} |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
78 ); |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
79 local m_closed_connections = module:metric( |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
80 "counter", "closed", "", |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
81 "Closed connections", |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
82 {"host", "direction", "error"} |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
83 ); |
|
11608
b2610460d9ab
mod_c2s,mod_s2s: Collect stats on TLS versions and ciphers
Kim Alvefur <zash@zash.se>
parents:
11560
diff
changeset
|
84 local m_tls_params = module:metric( |
|
b2610460d9ab
mod_c2s,mod_s2s: Collect stats on TLS versions and ciphers
Kim Alvefur <zash@zash.se>
parents:
11560
diff
changeset
|
85 "counter", "encrypted", "", |
|
b2610460d9ab
mod_c2s,mod_s2s: Collect stats on TLS versions and ciphers
Kim Alvefur <zash@zash.se>
parents:
11560
diff
changeset
|
86 "Encrypted connections", |
|
b2610460d9ab
mod_c2s,mod_s2s: Collect stats on TLS versions and ciphers
Kim Alvefur <zash@zash.se>
parents:
11560
diff
changeset
|
87 {"protocol"; "cipher"} |
|
b2610460d9ab
mod_c2s,mod_s2s: Collect stats on TLS versions and ciphers
Kim Alvefur <zash@zash.se>
parents:
11560
diff
changeset
|
88 ); |
|
11526
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
89 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 local sessions = module:shared("sessions"); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 |
|
7451
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
92 local runner_callbacks = {}; |
|
13575
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
93 local session_events = {}; |
|
7451
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
94 |
|
10120
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
95 local listener = {}; |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
96 |
| 4752 | 97 local log = module._log; |
| 98 | |
|
10625
3bfb20be844c
mod_s2s: Pass use_ipv4/use_ipv6 from config to service resolver
Matthew Wild <mwild1@gmail.com>
parents:
10622
diff
changeset
|
99 local s2s_service_options = { |
|
3bfb20be844c
mod_s2s: Pass use_ipv4/use_ipv6 from config to service resolver
Matthew Wild <mwild1@gmail.com>
parents:
10622
diff
changeset
|
100 default_port = 5269; |
|
3bfb20be844c
mod_s2s: Pass use_ipv4/use_ipv6 from config to service resolver
Matthew Wild <mwild1@gmail.com>
parents:
10622
diff
changeset
|
101 use_ipv4 = module:get_option_boolean("use_ipv4", true); |
|
3bfb20be844c
mod_s2s: Pass use_ipv4/use_ipv6 from config to service resolver
Matthew Wild <mwild1@gmail.com>
parents:
10622
diff
changeset
|
102 use_ipv6 = module:get_option_boolean("use_ipv6", true); |
|
11415
a38f9e09ca31
mod_s2s: Add config setting to enable DANE
Kim Alvefur <zash@zash.se>
parents:
11367
diff
changeset
|
103 use_dane = module:get_option_boolean("use_dane", false); |
|
10625
3bfb20be844c
mod_s2s: Pass use_ipv4/use_ipv6 from config to service resolver
Matthew Wild <mwild1@gmail.com>
parents:
10622
diff
changeset
|
104 }; |
|
11707
61759372be26
mod_s2s: Clone 'extra' data to let resolvers add more to it
Kim Alvefur <zash@zash.se>
parents:
11705
diff
changeset
|
105 local s2s_service_options_mt = { __index = s2s_service_options } |
|
10625
3bfb20be844c
mod_s2s: Pass use_ipv4/use_ipv6 from config to service resolver
Matthew Wild <mwild1@gmail.com>
parents:
10622
diff
changeset
|
106 |
|
13298
b7c08f32112c
mod_s2s: Automagically enable DANE for s2sin if 'use_dane' is enabled
Kim Alvefur <zash@zash.se>
parents:
13253
diff
changeset
|
107 if module:get_option_boolean("use_dane", false) then |
|
b7c08f32112c
mod_s2s: Automagically enable DANE for s2sin if 'use_dane' is enabled
Kim Alvefur <zash@zash.se>
parents:
13253
diff
changeset
|
108 -- DANE is supported in net.connect but only for outgoing connections, |
|
b7c08f32112c
mod_s2s: Automagically enable DANE for s2sin if 'use_dane' is enabled
Kim Alvefur <zash@zash.se>
parents:
13253
diff
changeset
|
109 -- to authenticate incoming connections with DANE we need |
|
b7c08f32112c
mod_s2s: Automagically enable DANE for s2sin if 'use_dane' is enabled
Kim Alvefur <zash@zash.se>
parents:
13253
diff
changeset
|
110 module:depends("s2s_auth_dane_in"); |
|
b7c08f32112c
mod_s2s: Automagically enable DANE for s2sin if 'use_dane' is enabled
Kim Alvefur <zash@zash.se>
parents:
13253
diff
changeset
|
111 end |
|
b7c08f32112c
mod_s2s: Automagically enable DANE for s2sin if 'use_dane' is enabled
Kim Alvefur <zash@zash.se>
parents:
13253
diff
changeset
|
112 |
|
7662
946871f6e3c8
mod_c2s, mod_s2s: Switch connection counting to 'amount' type and enumerate once per statistics interval
Kim Alvefur <zash@zash.se>
parents:
7642
diff
changeset
|
113 module:hook("stats-update", function () |
|
11525
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
114 measure_connections_inbound:clear() |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
115 measure_connections_outbound:clear() |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
116 -- TODO: init all expected metrics once? |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
117 -- or maybe create/delete them in host-activate/host-deactivate? requires |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
118 -- extra API in openmetrics.lua tho |
|
8763
67ecff7be011
mod_s2s: Add a counter for IPv6.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
8545
diff
changeset
|
119 for _, session in pairs(sessions) do |
|
11525
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
120 local is_inbound = string.sub(session.type, 4, 5) == "in" |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
121 local metric_family = is_inbound and measure_connections_inbound or measure_connections_outbound |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
122 local host = is_inbound and session.to_host or session.from_host or "" |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
123 local type_ = session.type or "other" |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
124 |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
125 -- we want to expose both v4 and v6 counters in all cases to make |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
126 -- queries smoother |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
127 local is_ipv6 = session.ip and session.ip:match(":") and 1 or 0 |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
128 local is_ipv4 = 1 - is_ipv6 |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
129 metric_family:with_labels(host, type_, "ipv4"):add(is_ipv4) |
|
5f99fcc43938
mod_s2s: Port to new OpenMetrics API
Jonas Schäfer <jonas@wielicki.name>
parents:
11419
diff
changeset
|
130 metric_family:with_labels(host, type_, "ipv6"):add(is_ipv6) |
|
7466
f28fa742def3
mod_c2s, mod_s2s: Bootstrap connection count statistic on module load
Kim Alvefur <zash@zash.se>
parents:
7449
diff
changeset
|
131 end |
|
7662
946871f6e3c8
mod_c2s, mod_s2s: Switch connection counting to 'amount' type and enumerate once per statistics interval
Kim Alvefur <zash@zash.se>
parents:
7642
diff
changeset
|
132 end); |
|
7466
f28fa742def3
mod_c2s, mod_s2s: Bootstrap connection count statistic on module load
Kim Alvefur <zash@zash.se>
parents:
7449
diff
changeset
|
133 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
134 --- Handle stanzas to remote domains |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 local bouncy_stanzas = { message = true, presence = true, iq = true }; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 local function bounce_sendq(session, reason) |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 local sendq = session.sendq; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 if not sendq then return; end |
|
13557
63492b6e7fb6
mod_s2s: Really fix logging of outgoing stanza queue counts
Kim Alvefur <zash@zash.se>
parents:
13556
diff
changeset
|
140 session.log("info", "Sending error replies for %d queued stanzas because of failed outgoing connection to %s", sendq.count(), session.to_host); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 local dummy = { |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
142 type = "s2sin"; |
|
8462
60d508f411a1
mod_s2s: Remove unused argument [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8461
diff
changeset
|
143 send = function () |
|
4755
844019f369a5
mod_s2s: Fix imports and remove some unused variables
Matthew Wild <mwild1@gmail.com>
parents:
4752
diff
changeset
|
144 (session.log or log)("error", "Replying to to an s2s error reply, please report this! Traceback: %s", traceback()); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
145 end; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
146 dummy = true; |
|
6626
071611bc4f1d
mod_s2s: Catch attempt to close dummy origin of s2s error replies (fixes a top level error)
Kim Alvefur <zash@zash.se>
parents:
6608
diff
changeset
|
147 close = function () |
|
071611bc4f1d
mod_s2s: Catch attempt to close dummy origin of s2s error replies (fixes a top level error)
Kim Alvefur <zash@zash.se>
parents:
6608
diff
changeset
|
148 (session.log or log)("error", "Attempting to close the dummy origin of s2s error replies, please report this! Traceback: %s", traceback()); |
|
071611bc4f1d
mod_s2s: Catch attempt to close dummy origin of s2s error replies (fixes a top level error)
Kim Alvefur <zash@zash.se>
parents:
6608
diff
changeset
|
149 end; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
150 }; |
|
10115
c0bd5daa9c7f
mod_s2s: Distinguish between high and low level errors in bounces
Kim Alvefur <zash@zash.se>
parents:
10111
diff
changeset
|
151 -- FIXME Allow for more specific error conditions |
|
c0bd5daa9c7f
mod_s2s: Distinguish between high and low level errors in bounces
Kim Alvefur <zash@zash.se>
parents:
10111
diff
changeset
|
152 -- TODO use util.error ? |
|
c0bd5daa9c7f
mod_s2s: Distinguish between high and low level errors in bounces
Kim Alvefur <zash@zash.se>
parents:
10111
diff
changeset
|
153 local error_type = "cancel"; |
|
c0bd5daa9c7f
mod_s2s: Distinguish between high and low level errors in bounces
Kim Alvefur <zash@zash.se>
parents:
10111
diff
changeset
|
154 local condition = "remote-server-not-found"; |
|
10403
3b82e9df5a7a
mod_s2s: Allow passing bounce reason as an util.error object (see #770)
Kim Alvefur <zash@zash.se>
parents:
10381
diff
changeset
|
155 local reason_text; |
|
10115
c0bd5daa9c7f
mod_s2s: Distinguish between high and low level errors in bounces
Kim Alvefur <zash@zash.se>
parents:
10111
diff
changeset
|
156 if session.had_stream then -- set when a stream is opened by the remote |
|
c0bd5daa9c7f
mod_s2s: Distinguish between high and low level errors in bounces
Kim Alvefur <zash@zash.se>
parents:
10111
diff
changeset
|
157 error_type, condition = "wait", "remote-server-timeout"; |
|
c0bd5daa9c7f
mod_s2s: Distinguish between high and low level errors in bounces
Kim Alvefur <zash@zash.se>
parents:
10111
diff
changeset
|
158 end |
|
13534
d532176d4334
util.error: Use is_error() instead of is_err() everywhere
Kim Alvefur <zash@zash.se>
parents:
13516
diff
changeset
|
159 if errors.is_error(reason) then |
|
10403
3b82e9df5a7a
mod_s2s: Allow passing bounce reason as an util.error object (see #770)
Kim Alvefur <zash@zash.se>
parents:
10381
diff
changeset
|
160 error_type, condition, reason_text = reason.type, reason.condition, reason.text; |
|
3b82e9df5a7a
mod_s2s: Allow passing bounce reason as an util.error object (see #770)
Kim Alvefur <zash@zash.se>
parents:
10381
diff
changeset
|
161 elseif type(reason) == "string" then |
|
3b82e9df5a7a
mod_s2s: Allow passing bounce reason as an util.error object (see #770)
Kim Alvefur <zash@zash.se>
parents:
10381
diff
changeset
|
162 reason_text = reason; |
|
3b82e9df5a7a
mod_s2s: Allow passing bounce reason as an util.error object (see #770)
Kim Alvefur <zash@zash.se>
parents:
10381
diff
changeset
|
163 end |
|
13554
902d25cd0557
mod_s2s: Limit size of outgoing stanza queue
Kim Alvefur <zash@zash.se>
parents:
13534
diff
changeset
|
164 for stanza in sendq:consume() do |
|
12493
e9ea5c88def0
mod_s2s: Don't bounce queued error stanzas (thanks Martin)
Kim Alvefur <zash@zash.se>
parents:
12480
diff
changeset
|
165 if not stanza.attr.xmlns and bouncy_stanzas[stanza.name] and stanza.attr.type ~= "error" and stanza.attr.type ~= "result" then |
|
12462
11765f0605ec
mod_s2s: Store real stanzas in session.sendq, rather than strings
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
166 local reply = st.error_reply( |
|
11765f0605ec
mod_s2s: Store real stanzas in session.sendq, rather than strings
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
167 stanza, |
|
11765f0605ec
mod_s2s: Store real stanzas in session.sendq, rather than strings
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
168 error_type, |
|
11765f0605ec
mod_s2s: Store real stanzas in session.sendq, rather than strings
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
169 condition, |
|
11765f0605ec
mod_s2s: Store real stanzas in session.sendq, rather than strings
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
170 reason_text and ("Server-to-server connection failed: "..reason_text) or nil |
|
11765f0605ec
mod_s2s: Store real stanzas in session.sendq, rather than strings
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
171 ); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
172 core_process_stanza(dummy, reply); |
|
12494
65316782862f
mod_s2s: Log queued stanzas for which no error reply is produced
Kim Alvefur <zash@zash.se>
parents:
12493
diff
changeset
|
173 else |
|
65316782862f
mod_s2s: Log queued stanzas for which no error reply is produced
Kim Alvefur <zash@zash.se>
parents:
12493
diff
changeset
|
174 (session.log or log)("debug", "Not eligible for bouncing, discarding %s", stanza:top_tag()); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
176 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
177 session.sendq = nil; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
178 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
179 |
|
4818
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
180 -- Handles stanzas to existing s2s sessions |
|
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
181 function route_to_existing_session(event) |
|
4580
351936a8de4a
mod_s2s: Split send_to_host() into two route/remote hooks, one for already exsisting sessions and one for non-existent.
Kim Alvefur <zash@zash.se>
parents:
4578
diff
changeset
|
182 local from_host, to_host, stanza = event.from_host, event.to_host, event.stanza; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
183 if not hosts[from_host] then |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
184 log("warn", "Attempt to send stanza from %s - a host we don't serve", from_host); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
185 return false; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
186 end |
|
5390
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
187 if hosts[to_host] then |
|
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
188 log("warn", "Attempt to route stanza to a remote %s - a host we do serve?!", from_host); |
|
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
189 return false; |
|
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
190 end |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
191 local host = hosts[from_host].s2sout[to_host]; |
|
10483
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
192 if not host then return end |
|
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
193 |
|
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
194 -- We have a connection to this host already |
|
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
195 if host.type == "s2sout_unauthed" and (stanza.name ~= "db:verify" or not host.dialback_key) then |
|
13886
cbb8dc92daa9
mod_s2s: Fix log to use formatting instead of concatenation (fixes #1461)
Kim Alvefur <zash@zash.se>
parents:
13804
diff
changeset
|
196 (host.log or log)("debug", "trying to send over unauthed s2sout to %s", to_host); |
|
4580
351936a8de4a
mod_s2s: Split send_to_host() into two route/remote hooks, one for already exsisting sessions and one for non-existent.
Kim Alvefur <zash@zash.se>
parents:
4578
diff
changeset
|
197 |
|
10483
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
198 -- Queue stanza until we are able to send it |
|
13554
902d25cd0557
mod_s2s: Limit size of outgoing stanza queue
Kim Alvefur <zash@zash.se>
parents:
13534
diff
changeset
|
199 if not host.sendq then |
|
10483
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
200 -- luacheck: ignore 122 |
|
13554
902d25cd0557
mod_s2s: Limit size of outgoing stanza queue
Kim Alvefur <zash@zash.se>
parents:
13534
diff
changeset
|
201 host.sendq = queue.new(sendq_size); |
|
902d25cd0557
mod_s2s: Limit size of outgoing stanza queue
Kim Alvefur <zash@zash.se>
parents:
13534
diff
changeset
|
202 end |
|
902d25cd0557
mod_s2s: Limit size of outgoing stanza queue
Kim Alvefur <zash@zash.se>
parents:
13534
diff
changeset
|
203 if not host.sendq:push(st.clone(stanza)) then |
|
13957
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
204 -- We shouldn't get here, because the last stanza |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
205 -- should have triggered the 'full?' check. |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
206 host.log("warn", "Pending connection %s->%s has full queue - unable to queue %s stanza", from_host, to_host, stanza.name); |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
207 return false; |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
208 else |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
209 host.log("debug", "stanza [%s] queued ", stanza.name); |
|
10483
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
210 end |
|
13957
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
211 |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
212 if host.sendq:full() then |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
213 -- A pending connection with a full queue could indicate |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
214 -- a stalled connection (trouble authenticating, etc.). |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
215 -- Our choice is to keep it open, and discard any additional stanzas |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
216 -- (which could cause inconsistencies, e.g. in MUC joins) or |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
217 -- force-close the connection. |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
218 host.log("warn", "Pending connection %s->%s has full queue - closing connection and bouncing stanzas", from_host, to_host); |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
219 host:close({ |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
220 condition = "resource-constraint", |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
221 text = "Too many pending stanzas for this connection", |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
222 }, nil, "Too many pending stanzas for this connection"); |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
223 end |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
224 |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
225 -- Although in some cases the stanza was not delivered, it |
|
8e6baa66f828
mod_s2s: Close outgoing pre-auth s2s sessions when their stanza queue is full
Matthew Wild <mwild1@gmail.com>
parents:
13886
diff
changeset
|
226 -- was processed (queued or bounced), so we return true |
|
10483
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
227 return true; |
|
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
228 elseif host.type == "local" or host.type == "component" then |
|
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
229 log("error", "Trying to send a stanza to ourselves??") |
|
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
230 log("error", "Traceback: %s", traceback()); |
|
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
231 log("error", "Stanza: %s", stanza); |
|
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
232 return false; |
|
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
233 else |
|
c12a24f0a385
mod_s2s: Invert condition to return early and reduce indentation
Kim Alvefur <zash@zash.se>
parents:
10482
diff
changeset
|
234 if host.sends2s(stanza) then |
|
4630
9502c0224caf
mod_s2s: Queuing a stanza constitutes handling it.
Paul Aurich <paul@darkrain42.org>
parents:
4625
diff
changeset
|
235 return true; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
236 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
237 end |
|
4818
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
238 end |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
239 |
|
4818
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
240 -- Create a new outgoing session for a stanza |
|
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
241 function route_to_new_session(event) |
|
4580
351936a8de4a
mod_s2s: Split send_to_host() into two route/remote hooks, one for already exsisting sessions and one for non-existent.
Kim Alvefur <zash@zash.se>
parents:
4578
diff
changeset
|
242 local from_host, to_host, stanza = event.from_host, event.to_host, event.stanza; |
|
351936a8de4a
mod_s2s: Split send_to_host() into two route/remote hooks, one for already exsisting sessions and one for non-existent.
Kim Alvefur <zash@zash.se>
parents:
4578
diff
changeset
|
243 log("debug", "opening a new outgoing connection for this stanza"); |
|
351936a8de4a
mod_s2s: Split send_to_host() into two route/remote hooks, one for already exsisting sessions and one for non-existent.
Kim Alvefur <zash@zash.se>
parents:
4578
diff
changeset
|
244 local host_session = s2s_new_outgoing(from_host, to_host); |
|
13987
4067a95336dd
mod_s2s, s2smanager: Experimental s2s_block_immediate_retries option
Matthew Wild <mwild1@gmail.com>
parents:
13985
diff
changeset
|
245 if block_retries then |
|
4067a95336dd
mod_s2s, s2smanager: Experimental s2s_block_immediate_retries option
Matthew Wild <mwild1@gmail.com>
parents:
13985
diff
changeset
|
246 host_session.block_retries = true; |
|
4067a95336dd
mod_s2s, s2smanager: Experimental s2s_block_immediate_retries option
Matthew Wild <mwild1@gmail.com>
parents:
13985
diff
changeset
|
247 end |
|
10120
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
248 host_session.version = 1; |
|
4580
351936a8de4a
mod_s2s: Split send_to_host() into two route/remote hooks, one for already exsisting sessions and one for non-existent.
Kim Alvefur <zash@zash.se>
parents:
4578
diff
changeset
|
249 |
|
351936a8de4a
mod_s2s: Split send_to_host() into two route/remote hooks, one for already exsisting sessions and one for non-existent.
Kim Alvefur <zash@zash.se>
parents:
4578
diff
changeset
|
250 -- Store in buffer |
|
351936a8de4a
mod_s2s: Split send_to_host() into two route/remote hooks, one for already exsisting sessions and one for non-existent.
Kim Alvefur <zash@zash.se>
parents:
4578
diff
changeset
|
251 host_session.bounce_sendq = bounce_sendq; |
|
13554
902d25cd0557
mod_s2s: Limit size of outgoing stanza queue
Kim Alvefur <zash@zash.se>
parents:
13534
diff
changeset
|
252 host_session.sendq = queue.new(sendq_size); |
|
13556
d3649ae194ab
mod_s2s: Clone queued outgoing stanzas to prevent changes
Kim Alvefur <zash@zash.se>
parents:
13555
diff
changeset
|
253 host_session.sendq:push(st.clone(stanza)); |
|
10111
0f335815244f
plugins: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents:
9854
diff
changeset
|
254 log("debug", "stanza [%s] queued until connection complete", stanza.name); |
|
11707
61759372be26
mod_s2s: Clone 'extra' data to let resolvers add more to it
Kim Alvefur <zash@zash.se>
parents:
11705
diff
changeset
|
255 -- FIXME Cleaner solution to passing extra data from resolvers to net.server |
|
61759372be26
mod_s2s: Clone 'extra' data to let resolvers add more to it
Kim Alvefur <zash@zash.se>
parents:
11705
diff
changeset
|
256 -- This mt-clone allows resolvers to add extra data, currently used for DANE TLSA records |
|
12207
65e252940337
mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls
Kim Alvefur <zash@zash.se>
parents:
12206
diff
changeset
|
257 module:context(from_host):fire_event("s2sout-created", { session = host_session }); |
|
12206
77ac0d96ac24
mod_s2s: Enable outgoing Direct TLS connections
Kim Alvefur <zash@zash.se>
parents:
11867
diff
changeset
|
258 local xmpp_extra = setmetatable({}, s2s_service_options_mt); |
|
12207
65e252940337
mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls
Kim Alvefur <zash@zash.se>
parents:
12206
diff
changeset
|
259 local resolver = service.new(to_host, "xmpp-server", "tcp", xmpp_extra); |
|
65e252940337
mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls
Kim Alvefur <zash@zash.se>
parents:
12206
diff
changeset
|
260 if host_session.ssl_ctx then |
|
65e252940337
mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls
Kim Alvefur <zash@zash.se>
parents:
12206
diff
changeset
|
261 local sslctx = host_session.ssl_ctx; |
|
65e252940337
mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls
Kim Alvefur <zash@zash.se>
parents:
12206
diff
changeset
|
262 local xmpps_extra = setmetatable({ default_port = false; servername = to_host; sslctx = sslctx }, s2s_service_options_mt); |
|
65e252940337
mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls
Kim Alvefur <zash@zash.se>
parents:
12206
diff
changeset
|
263 resolver = resolver_chain.new({ |
|
65e252940337
mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls
Kim Alvefur <zash@zash.se>
parents:
12206
diff
changeset
|
264 service.new(to_host, "xmpps-server", "tcp", xmpps_extra); |
|
65e252940337
mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls
Kim Alvefur <zash@zash.se>
parents:
12206
diff
changeset
|
265 resolver; |
|
65e252940337
mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls
Kim Alvefur <zash@zash.se>
parents:
12206
diff
changeset
|
266 }); |
|
65e252940337
mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls
Kim Alvefur <zash@zash.se>
parents:
12206
diff
changeset
|
267 end |
|
13110
d5f322dd424b
mod_s2s: Add event where resolver for s2sout can be tweaked
Kim Alvefur <zash@zash.se>
parents:
12679
diff
changeset
|
268 |
|
d5f322dd424b
mod_s2s: Add event where resolver for s2sout can be tweaked
Kim Alvefur <zash@zash.se>
parents:
12679
diff
changeset
|
269 local pre_event = { session = host_session; resolver = resolver }; |
|
d5f322dd424b
mod_s2s: Add event where resolver for s2sout can be tweaked
Kim Alvefur <zash@zash.se>
parents:
12679
diff
changeset
|
270 module:context(from_host):fire_event("s2sout-pre-connect", pre_event); |
|
d5f322dd424b
mod_s2s: Add event where resolver for s2sout can be tweaked
Kim Alvefur <zash@zash.se>
parents:
12679
diff
changeset
|
271 resolver = pre_event.resolver; |
|
12207
65e252940337
mod_s2s: Retrieve TLS context for outgoing Direct TLS connections from mod_tls
Kim Alvefur <zash@zash.se>
parents:
12206
diff
changeset
|
272 connect(resolver, listener, nil, { session = host_session }); |
|
11526
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
273 m_initiated_connections:with_labels(from_host):add(1) |
|
4581
d2eb5962d235
mod_s2s: return true when we sent the stanza, or initiated a new s2sout
Kim Alvefur <zash@zash.se>
parents:
4580
diff
changeset
|
274 return true; |
|
4818
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
275 end |
|
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
276 |
|
5669
9345c161481f
mod_c2s, mod_s2s: Fire an event on read timeouts
Kim Alvefur <zash@zash.se>
parents:
5661
diff
changeset
|
277 local function keepalive(event) |
|
11226
b3ae48362f78
mod_s2s: Prevent whitespace keepalives the stream has been opened
Kim Alvefur <zash@zash.se>
parents:
11118
diff
changeset
|
278 local session = event.session; |
|
b3ae48362f78
mod_s2s: Prevent whitespace keepalives the stream has been opened
Kim Alvefur <zash@zash.se>
parents:
11118
diff
changeset
|
279 if not session.notopen then |
|
11237
49aeae836ad1
mod_s2s: Fix copypaste mistake in b3ae48362f78
Kim Alvefur <zash@zash.se>
parents:
11226
diff
changeset
|
280 return event.session.sends2s(' '); |
|
11226
b3ae48362f78
mod_s2s: Prevent whitespace keepalives the stream has been opened
Kim Alvefur <zash@zash.se>
parents:
11118
diff
changeset
|
281 end |
|
5669
9345c161481f
mod_c2s, mod_s2s: Fire an event on read timeouts
Kim Alvefur <zash@zash.se>
parents:
5661
diff
changeset
|
282 end |
|
9345c161481f
mod_c2s, mod_s2s: Fire an event on read timeouts
Kim Alvefur <zash@zash.se>
parents:
5661
diff
changeset
|
283 |
|
5713
5cf6dedf36f4
mod_s2s: Add missing global hook for read-timeout
Kim Alvefur <zash@zash.se>
parents:
5669
diff
changeset
|
284 module:hook("s2s-read-timeout", keepalive, -1); |
|
5cf6dedf36f4
mod_s2s: Add missing global hook for read-timeout
Kim Alvefur <zash@zash.se>
parents:
5669
diff
changeset
|
285 |
|
4818
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
286 function module.add_host(module) |
|
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
287 if module:get_option_boolean("disallow_s2s", false) then |
|
7359
a5a080c12c96
Update every link to the documentation to use HTTPS
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
7278
diff
changeset
|
288 module:log("warn", "The 'disallow_s2s' config option is deprecated, please see https://prosody.im/doc/s2s#disabling"); |
|
4818
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
289 return nil, "This host has disallow_s2s set"; |
|
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
290 end |
|
5454
5f69fddf6fb9
mod_s2s: Adjust priority of route/remote hooks to negative values (like most other internal hooks)
Kim Alvefur <zash@zash.se>
parents:
5423
diff
changeset
|
291 module:hook("route/remote", route_to_existing_session, -1); |
|
5f69fddf6fb9
mod_s2s: Adjust priority of route/remote hooks to negative values (like most other internal hooks)
Kim Alvefur <zash@zash.se>
parents:
5423
diff
changeset
|
292 module:hook("route/remote", route_to_new_session, -10); |
|
12810
871d2c95b403
mod_s2s: Advertise stream features on bidi connections
Kim Alvefur <zash@zash.se>
parents:
12808
diff
changeset
|
293 module:hook("s2sout-stream-features", function (event) |
|
13504
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
294 if not (stanza_size_limit or advertised_idle_timeout) then return end |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
295 local limits = event.features:tag("limits", { xmlns = "urn:xmpp:stream-limits:0" }) |
|
12810
871d2c95b403
mod_s2s: Advertise stream features on bidi connections
Kim Alvefur <zash@zash.se>
parents:
12808
diff
changeset
|
296 if stanza_size_limit then |
|
13504
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
297 limits:text_tag("max-bytes", string.format("%d", stanza_size_limit)); |
|
12810
871d2c95b403
mod_s2s: Advertise stream features on bidi connections
Kim Alvefur <zash@zash.se>
parents:
12808
diff
changeset
|
298 end |
|
13504
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
299 if advertised_idle_timeout then |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
300 limits:text_tag("idle-seconds", string.format("%d", advertised_idle_timeout)); |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
301 end |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
302 limits:up(); |
|
12810
871d2c95b403
mod_s2s: Advertise stream features on bidi connections
Kim Alvefur <zash@zash.se>
parents:
12808
diff
changeset
|
303 end); |
|
12811
ccc0bdad82cc
mod_s2s: Retrieve stanza size limit from peer for bidi connections
Kim Alvefur <zash@zash.se>
parents:
12810
diff
changeset
|
304 module:hook_tag("urn:xmpp:bidi", "bidi", function(session, stanza) |
|
ccc0bdad82cc
mod_s2s: Retrieve stanza size limit from peer for bidi connections
Kim Alvefur <zash@zash.se>
parents:
12810
diff
changeset
|
305 -- Advertising features on bidi connections where no <stream:features> is sent in the other direction |
|
ccc0bdad82cc
mod_s2s: Retrieve stanza size limit from peer for bidi connections
Kim Alvefur <zash@zash.se>
parents:
12810
diff
changeset
|
306 local limits = stanza:get_child("limits", "urn:xmpp:stream-limits:0"); |
|
ccc0bdad82cc
mod_s2s: Retrieve stanza size limit from peer for bidi connections
Kim Alvefur <zash@zash.se>
parents:
12810
diff
changeset
|
307 if limits then |
|
13093
93c68c454cb8
mod_c2s,mod_s2s: Fix tag name for SLA (thanks mjk)
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
308 session.outgoing_stanza_size_limit = tonumber(limits:get_child_text("max-bytes")); |
|
12811
ccc0bdad82cc
mod_s2s: Retrieve stanza size limit from peer for bidi connections
Kim Alvefur <zash@zash.se>
parents:
12810
diff
changeset
|
309 end |
|
ccc0bdad82cc
mod_s2s: Retrieve stanza size limit from peer for bidi connections
Kim Alvefur <zash@zash.se>
parents:
12810
diff
changeset
|
310 end, 100); |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
311 module:hook("s2s-authenticated", make_authenticated, -1); |
|
5669
9345c161481f
mod_c2s, mod_s2s: Fire an event on read timeouts
Kim Alvefur <zash@zash.se>
parents:
5661
diff
changeset
|
312 module:hook("s2s-read-timeout", keepalive, -1); |
|
13382
f70311588c77
mod_s2s: Close connection on smacks timeout
Kim Alvefur <zash@zash.se>
parents:
13298
diff
changeset
|
313 module:hook("smacks-ack-delayed", function (event) |
|
f70311588c77
mod_s2s: Close connection on smacks timeout
Kim Alvefur <zash@zash.se>
parents:
13298
diff
changeset
|
314 if event.origin.type == "s2sin" or event.origin.type == "s2sout" then |
|
f70311588c77
mod_s2s: Close connection on smacks timeout
Kim Alvefur <zash@zash.se>
parents:
13298
diff
changeset
|
315 event.origin:close("connection-timeout"); |
|
f70311588c77
mod_s2s: Close connection on smacks timeout
Kim Alvefur <zash@zash.se>
parents:
13298
diff
changeset
|
316 return true; |
|
f70311588c77
mod_s2s: Close connection on smacks timeout
Kim Alvefur <zash@zash.se>
parents:
13298
diff
changeset
|
317 end |
|
f70311588c77
mod_s2s: Close connection on smacks timeout
Kim Alvefur <zash@zash.se>
parents:
13298
diff
changeset
|
318 end, -1); |
|
9412
063977461363
mod_s2s: Silence all warnings instead of ignoring the entire module
Kim Alvefur <zash@zash.se>
parents:
9070
diff
changeset
|
319 module:hook_stanza("http://etherx.jabber.org/streams", "features", function (session, stanza) -- luacheck: ignore 212/stanza |
|
12808
12bd40b8e105
mod_c2s,mod_s2s: Adapt to XEP-xxxx: Stream Limits Advertisement
Kim Alvefur <zash@zash.se>
parents:
12807
diff
changeset
|
320 local limits = stanza:get_child("limits", "urn:xmpp:stream-limits:0"); |
|
12806
751bdd412915
mod_s2s: Record stanza size limit advertised by other servers
Kim Alvefur <zash@zash.se>
parents:
12805
diff
changeset
|
321 if limits then |
|
13093
93c68c454cb8
mod_c2s,mod_s2s: Fix tag name for SLA (thanks mjk)
Kim Alvefur <zash@zash.se>
parents:
12977
diff
changeset
|
322 session.outgoing_stanza_size_limit = tonumber(limits:get_child_text("max-bytes")); |
|
12806
751bdd412915
mod_s2s: Record stanza size limit advertised by other servers
Kim Alvefur <zash@zash.se>
parents:
12805
diff
changeset
|
323 end |
|
6146
ac4f8770d9aa
mod_s2s: Follow XMPP Core on when a stream is to be considered ready
Kim Alvefur <zash@zash.se>
parents:
6085
diff
changeset
|
324 if session.type == "s2sout" then |
|
ac4f8770d9aa
mod_s2s: Follow XMPP Core on when a stream is to be considered ready
Kim Alvefur <zash@zash.se>
parents:
6085
diff
changeset
|
325 -- Stream is authenticated and we are seem to be done with feature negotiation, |
|
ac4f8770d9aa
mod_s2s: Follow XMPP Core on when a stream is to be considered ready
Kim Alvefur <zash@zash.se>
parents:
6085
diff
changeset
|
326 -- so the stream is ready for stanzas. RFC 6120 Section 4.3 |
|
ac4f8770d9aa
mod_s2s: Follow XMPP Core on when a stream is to be considered ready
Kim Alvefur <zash@zash.se>
parents:
6085
diff
changeset
|
327 mark_connected(session); |
|
6403
166d1bd8fc38
core.stanza_router, mod_s2s: Move handling of S2S features to mod_s2s from stanza_router
Kim Alvefur <zash@zash.se>
parents:
6382
diff
changeset
|
328 return true; |
|
10457
0c44090cb168
mod_s2s: Abort outgoing connections earlier when TLS requirement isn't satisfied
Kim Alvefur <zash@zash.se>
parents:
10456
diff
changeset
|
329 elseif require_encryption and not session.secure then |
|
0c44090cb168
mod_s2s: Abort outgoing connections earlier when TLS requirement isn't satisfied
Kim Alvefur <zash@zash.se>
parents:
10456
diff
changeset
|
330 session.log("warn", "Encrypted server-to-server communication is required but was not offered by %s", session.to_host); |
|
0c44090cb168
mod_s2s: Abort outgoing connections earlier when TLS requirement isn't satisfied
Kim Alvefur <zash@zash.se>
parents:
10456
diff
changeset
|
331 session:close({ |
|
0c44090cb168
mod_s2s: Abort outgoing connections earlier when TLS requirement isn't satisfied
Kim Alvefur <zash@zash.se>
parents:
10456
diff
changeset
|
332 condition = "policy-violation", |
|
0c44090cb168
mod_s2s: Abort outgoing connections earlier when TLS requirement isn't satisfied
Kim Alvefur <zash@zash.se>
parents:
10456
diff
changeset
|
333 text = "Encrypted server-to-server communication is required but was not offered", |
|
0c44090cb168
mod_s2s: Abort outgoing connections earlier when TLS requirement isn't satisfied
Kim Alvefur <zash@zash.se>
parents:
10456
diff
changeset
|
334 }, nil, "Could not establish encrypted connection to remote server"); |
|
10459
7456eaa83b15
mod_s2s: Prevent unhandled stanza handler from complaining about stream features on aborted connections
Kim Alvefur <zash@zash.se>
parents:
10457
diff
changeset
|
335 return true; |
|
6426
e5945fb5b71f
mod_s2s: Close s2s connections that can not proceed due to mod_dialback not being present
Kim Alvefur <zash@zash.se>
parents:
6403
diff
changeset
|
336 elseif not session.dialback_verifying then |
|
e5945fb5b71f
mod_s2s: Close s2s connections that can not proceed due to mod_dialback not being present
Kim Alvefur <zash@zash.se>
parents:
6403
diff
changeset
|
337 session.log("warn", "No SASL EXTERNAL offer and Dialback doesn't seem to be enabled, giving up"); |
|
10311
1bb1e16f24b0
mod_s2s: Close with a stream error in case neither SASL or Dialback are available
Kim Alvefur <zash@zash.se>
parents:
10249
diff
changeset
|
338 session:close({ |
|
1bb1e16f24b0
mod_s2s: Close with a stream error in case neither SASL or Dialback are available
Kim Alvefur <zash@zash.se>
parents:
10249
diff
changeset
|
339 condition = "unsupported-feature", |
|
1bb1e16f24b0
mod_s2s: Close with a stream error in case neither SASL or Dialback are available
Kim Alvefur <zash@zash.se>
parents:
10249
diff
changeset
|
340 text = "No viable authentication method offered", |
|
10426
dd4eb84d92a8
mod_s2s: Add error text for error replies on some s2s failures (#770)
Kim Alvefur <zash@zash.se>
parents:
10425
diff
changeset
|
341 }, nil, "No viable authentication method offered by remote server"); |
|
10459
7456eaa83b15
mod_s2s: Prevent unhandled stanza handler from complaining about stream features on aborted connections
Kim Alvefur <zash@zash.se>
parents:
10457
diff
changeset
|
342 return true; |
|
6146
ac4f8770d9aa
mod_s2s: Follow XMPP Core on when a stream is to be considered ready
Kim Alvefur <zash@zash.se>
parents:
6085
diff
changeset
|
343 end |
|
ac4f8770d9aa
mod_s2s: Follow XMPP Core on when a stream is to be considered ready
Kim Alvefur <zash@zash.se>
parents:
6085
diff
changeset
|
344 end, -1); |
|
11683
41b144a93897
mod_s2s: Close connections attached to a host being deactivated
Kim Alvefur <zash@zash.se>
parents:
11682
diff
changeset
|
345 |
|
41b144a93897
mod_s2s: Close connections attached to a host being deactivated
Kim Alvefur <zash@zash.se>
parents:
11682
diff
changeset
|
346 function module.unload() |
|
11684
8b0baf3003fb
mod_s2s: Don't close connections on reload
Kim Alvefur <zash@zash.se>
parents:
11683
diff
changeset
|
347 if module.reloading then return end |
|
11683
41b144a93897
mod_s2s: Close connections attached to a host being deactivated
Kim Alvefur <zash@zash.se>
parents:
11682
diff
changeset
|
348 for _, session in pairs(sessions) do |
|
12681
16ea01745dbe
mod_s2s: Simplify conditionals since all sessions should have .host now
Kim Alvefur <zash@zash.se>
parents:
12680
diff
changeset
|
349 if session.host == module.host then |
|
11683
41b144a93897
mod_s2s: Close connections attached to a host being deactivated
Kim Alvefur <zash@zash.se>
parents:
11682
diff
changeset
|
350 session:close("host-gone"); |
|
41b144a93897
mod_s2s: Close connections attached to a host being deactivated
Kim Alvefur <zash@zash.se>
parents:
11682
diff
changeset
|
351 end |
|
41b144a93897
mod_s2s: Close connections attached to a host being deactivated
Kim Alvefur <zash@zash.se>
parents:
11682
diff
changeset
|
352 end |
|
41b144a93897
mod_s2s: Close connections attached to a host being deactivated
Kim Alvefur <zash@zash.se>
parents:
11682
diff
changeset
|
353 end |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
354 end |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
355 |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
356 -- Stream is authorised, and ready for normal stanzas |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
357 function mark_connected(session) |
|
8267
42fad8465537
mod_s2s: Use a separate resolver object for each outgoing session
Matthew Wild <mwild1@gmail.com>
parents:
8234
diff
changeset
|
358 |
|
6683
873ad1023eb0
mod_s2s: Don't cache session.sends2s (or do it later), prevents sending data after session was closed
Kim Alvefur <zash@zash.se>
parents:
6600
diff
changeset
|
359 local sendq = session.sendq; |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
360 |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
361 local from, to = session.from_host, session.to_host; |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
362 |
|
5800
3a48acbcb7f3
mod_s2s: Captitalize log messages that begin with a stream direction
Kim Alvefur <zash@zash.se>
parents:
5776
diff
changeset
|
363 session.log("info", "%s s2s connection %s->%s complete", session.direction:gsub("^.", string.upper), from, to); |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
364 |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
365 local event_data = { session = session }; |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
366 if session.type == "s2sout" then |
|
11668
f18fbae6d9fe
mod_s2s: Use module API to fire events
Kim Alvefur <zash@zash.se>
parents:
11624
diff
changeset
|
367 module:fire_event("s2sout-established", event_data); |
|
f18fbae6d9fe
mod_s2s: Use module API to fire events
Kim Alvefur <zash@zash.se>
parents:
11624
diff
changeset
|
368 module:context(from):fire_event("s2sout-established", event_data); |
|
10247
5de65f30fe5e
mod_s2s: Add function to send replies on s2sout connections that support incoming traffic
Kim Alvefur <zash@zash.se>
parents:
10246
diff
changeset
|
369 |
|
5de65f30fe5e
mod_s2s: Add function to send replies on s2sout connections that support incoming traffic
Kim Alvefur <zash@zash.se>
parents:
10246
diff
changeset
|
370 if session.incoming then |
|
5de65f30fe5e
mod_s2s: Add function to send replies on s2sout connections that support incoming traffic
Kim Alvefur <zash@zash.se>
parents:
10246
diff
changeset
|
371 session.send = function(stanza) |
|
11668
f18fbae6d9fe
mod_s2s: Use module API to fire events
Kim Alvefur <zash@zash.se>
parents:
11624
diff
changeset
|
372 return module:context(from):fire_event("route/remote", { from_host = from, to_host = to, stanza = stanza }); |
|
10247
5de65f30fe5e
mod_s2s: Add function to send replies on s2sout connections that support incoming traffic
Kim Alvefur <zash@zash.se>
parents:
10246
diff
changeset
|
373 end; |
|
5de65f30fe5e
mod_s2s: Add function to send replies on s2sout connections that support incoming traffic
Kim Alvefur <zash@zash.se>
parents:
10246
diff
changeset
|
374 end |
|
5de65f30fe5e
mod_s2s: Add function to send replies on s2sout connections that support incoming traffic
Kim Alvefur <zash@zash.se>
parents:
10246
diff
changeset
|
375 |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
376 else |
|
13985
e3ef3e684855
mod_s2s: Optimize order of table accesses
Kim Alvefur <zash@zash.se>
parents:
13957
diff
changeset
|
377 local host_session = hosts[to]; |
|
e3ef3e684855
mod_s2s: Optimize order of table accesses
Kim Alvefur <zash@zash.se>
parents:
13957
diff
changeset
|
378 if session.outgoing and not host_session.s2sout[from] then |
|
10248
d7cadd118053
mod_s2s: Insert s2sin into outgoing routing table when bidirectional
Kim Alvefur <zash@zash.se>
parents:
10247
diff
changeset
|
379 session.log("debug", "Setting up to handle route from %s to %s", to, from); |
|
13985
e3ef3e684855
mod_s2s: Optimize order of table accesses
Kim Alvefur <zash@zash.se>
parents:
13957
diff
changeset
|
380 host_session.s2sout[from] = session; -- luacheck: ignore 122 |
|
10248
d7cadd118053
mod_s2s: Insert s2sin into outgoing routing table when bidirectional
Kim Alvefur <zash@zash.se>
parents:
10247
diff
changeset
|
381 end |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
382 session.send = function(stanza) |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
383 return host_session.events.fire_event("route/remote", { from_host = to, to_host = from, stanza = stanza }); |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
384 end; |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
385 |
|
11668
f18fbae6d9fe
mod_s2s: Use module API to fire events
Kim Alvefur <zash@zash.se>
parents:
11624
diff
changeset
|
386 module:fire_event("s2sin-established", event_data); |
|
f18fbae6d9fe
mod_s2s: Use module API to fire events
Kim Alvefur <zash@zash.se>
parents:
11624
diff
changeset
|
387 module:context(to):fire_event("s2sin-established", event_data); |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
388 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
389 |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
390 if session.direction == "outgoing" then |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
391 if sendq then |
|
13557
63492b6e7fb6
mod_s2s: Really fix logging of outgoing stanza queue counts
Kim Alvefur <zash@zash.se>
parents:
13556
diff
changeset
|
392 session.log("debug", "sending %d queued stanzas across new outgoing connection to %s", sendq.count(), session.to_host); |
|
6683
873ad1023eb0
mod_s2s: Don't cache session.sends2s (or do it later), prevents sending data after session was closed
Kim Alvefur <zash@zash.se>
parents:
6600
diff
changeset
|
393 local send = session.sends2s; |
|
13554
902d25cd0557
mod_s2s: Limit size of outgoing stanza queue
Kim Alvefur <zash@zash.se>
parents:
13534
diff
changeset
|
394 for stanza in sendq:consume() do |
|
902d25cd0557
mod_s2s: Limit size of outgoing stanza queue
Kim Alvefur <zash@zash.se>
parents:
13534
diff
changeset
|
395 -- TODO check send success |
|
12462
11765f0605ec
mod_s2s: Store real stanzas in session.sendq, rather than strings
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
396 send(stanza); |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
397 end |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
398 session.sendq = nil; |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
399 end |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
400 end |
|
11678
f90a337d81a8
mod_s2s: Remove connection timeout once it's no longer needed
Kim Alvefur <zash@zash.se>
parents:
11670
diff
changeset
|
401 |
|
f90a337d81a8
mod_s2s: Remove connection timeout once it's no longer needed
Kim Alvefur <zash@zash.se>
parents:
11670
diff
changeset
|
402 if session.connect_timeout then |
|
f90a337d81a8
mod_s2s: Remove connection timeout once it's no longer needed
Kim Alvefur <zash@zash.se>
parents:
11670
diff
changeset
|
403 stop_timer(session.connect_timeout); |
|
f90a337d81a8
mod_s2s: Remove connection timeout once it's no longer needed
Kim Alvefur <zash@zash.se>
parents:
11670
diff
changeset
|
404 session.connect_timeout = nil; |
|
f90a337d81a8
mod_s2s: Remove connection timeout once it's no longer needed
Kim Alvefur <zash@zash.se>
parents:
11670
diff
changeset
|
405 end |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
406 end |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
407 |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
408 function make_authenticated(event) |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
409 local session, host = event.session, event.host; |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
410 if not session.secure then |
|
5594
ad66ee47b674
mod_s2s: Fix interaction between s2s_secure_auth and s2s_require_encryption, in particular ensure that when s2s_require_encryption is NOT set, do not require encryption on s2s_insecure_domains.
Matthew Wild <mwild1@gmail.com>
parents:
5533
diff
changeset
|
411 if require_encryption or (secure_auth and not(insecure_domains[host])) or secure_domains[host] then |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
412 session:close({ |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
413 condition = "policy-violation", |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
414 text = "Encrypted server-to-server communication is required but was not " |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
415 ..((session.direction == "outgoing" and "offered") or "used") |
|
10426
dd4eb84d92a8
mod_s2s: Add error text for error replies on some s2s failures (#770)
Kim Alvefur <zash@zash.se>
parents:
10425
diff
changeset
|
416 }, nil, "Could not establish encrypted connection to remote server"); |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
417 end |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
418 end |
|
12474
8fac32810144
mod_s2s: Improve robustness of outgoing s2s certificate verification
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
419 |
|
8fac32810144
mod_s2s: Improve robustness of outgoing s2s certificate verification
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
420 if session.type == "s2sout_unauthed" and not session.authenticated_remote and secure_auth and not insecure_domains[host] then |
|
8fac32810144
mod_s2s: Improve robustness of outgoing s2s certificate verification
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
421 session:close({ |
|
8fac32810144
mod_s2s: Improve robustness of outgoing s2s certificate verification
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
422 condition = "policy-violation"; |
|
8fac32810144
mod_s2s: Improve robustness of outgoing s2s certificate verification
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
423 text = "Failed to verify certificate (internal error)"; |
|
8fac32810144
mod_s2s: Improve robustness of outgoing s2s certificate verification
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
424 }); |
|
8fac32810144
mod_s2s: Improve robustness of outgoing s2s certificate verification
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
425 return; |
|
8fac32810144
mod_s2s: Improve robustness of outgoing s2s certificate verification
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
426 end |
|
8fac32810144
mod_s2s: Improve robustness of outgoing s2s certificate verification
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
427 |
|
5390
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
428 if hosts[host] then |
|
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
429 session:close({ condition = "undefined-condition", text = "Attempt to authenticate as a host we serve" }); |
|
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
430 end |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
431 if session.type == "s2sout_unauthed" then |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
432 session.type = "s2sout"; |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
433 elseif session.type == "s2sin_unauthed" then |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
434 session.type = "s2sin"; |
|
10246
19d7a2e7b9c4
mod_s2s: Handle authentication of s2sin and s2sout the same way
Kim Alvefur <zash@zash.se>
parents:
10240
diff
changeset
|
435 elseif session.type ~= "s2sin" and session.type ~= "s2sout" then |
|
19d7a2e7b9c4
mod_s2s: Handle authentication of s2sin and s2sout the same way
Kim Alvefur <zash@zash.se>
parents:
10240
diff
changeset
|
436 return false; |
|
19d7a2e7b9c4
mod_s2s: Handle authentication of s2sin and s2sout the same way
Kim Alvefur <zash@zash.se>
parents:
10240
diff
changeset
|
437 end |
|
19d7a2e7b9c4
mod_s2s: Handle authentication of s2sin and s2sout the same way
Kim Alvefur <zash@zash.se>
parents:
10240
diff
changeset
|
438 |
|
19d7a2e7b9c4
mod_s2s: Handle authentication of s2sin and s2sout the same way
Kim Alvefur <zash@zash.se>
parents:
10240
diff
changeset
|
439 if session.incoming and host then |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
440 if not session.hosts[host] then session.hosts[host] = {}; end |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
441 session.hosts[host].authed = true; |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
442 end |
|
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
443 session.log("debug", "connection %s->%s is now authenticated for %s", session.from_host, session.to_host, host); |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
444 |
|
11526
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
445 local local_host = session.direction == "incoming" and session.to_host or session.from_host |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
446 m_authn_connections:with_labels(local_host, session.direction, event.mechanism or "other"):add(1) |
|
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
447 |
|
6146
ac4f8770d9aa
mod_s2s: Follow XMPP Core on when a stream is to be considered ready
Kim Alvefur <zash@zash.se>
parents:
6085
diff
changeset
|
448 if (session.type == "s2sout" and session.external_auth ~= "succeeded") or session.type == "s2sin" then |
|
ac4f8770d9aa
mod_s2s: Follow XMPP Core on when a stream is to be considered ready
Kim Alvefur <zash@zash.se>
parents:
6085
diff
changeset
|
449 -- Stream either used dialback for authentication or is an incoming stream. |
|
ac4f8770d9aa
mod_s2s: Follow XMPP Core on when a stream is to be considered ready
Kim Alvefur <zash@zash.se>
parents:
6085
diff
changeset
|
450 mark_connected(session); |
|
ac4f8770d9aa
mod_s2s: Follow XMPP Core on when a stream is to be considered ready
Kim Alvefur <zash@zash.se>
parents:
6085
diff
changeset
|
451 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
452 |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
453 return true; |
|
4818
3bda6fc02652
mod_s2s: Become a shared module (yay)
Matthew Wild <mwild1@gmail.com>
parents:
4814
diff
changeset
|
454 end |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
455 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
456 --- Helper to check that a session peer's certificate is valid |
|
11558
d0e9ffccdef9
mod_dialback: Remove d-w-d feature
Kim Alvefur <zash@zash.se>
parents:
11540
diff
changeset
|
457 local function check_cert_status(session) |
|
5387
1130887e0d41
mod_s2s: session.from_host does not allways exist on incoming connections, true and nil or "our hostname" does not evaluate to what we want here
Kim Alvefur <zash@zash.se>
parents:
5368
diff
changeset
|
458 local host = session.direction == "outgoing" and session.to_host or session.from_host |
|
12480
7e9ebdc75ce4
net: isolate LuaSec-specifics
Jonas Schäfer <jonas@wielicki.name>
parents:
12476
diff
changeset
|
459 local conn = session.conn |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
460 local cert |
|
12480
7e9ebdc75ce4
net: isolate LuaSec-specifics
Jonas Schäfer <jonas@wielicki.name>
parents:
12476
diff
changeset
|
461 if conn.ssl_peercertificate then |
|
7e9ebdc75ce4
net: isolate LuaSec-specifics
Jonas Schäfer <jonas@wielicki.name>
parents:
12476
diff
changeset
|
462 cert = conn:ssl_peercertificate() |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
463 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
464 |
|
5363
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
465 return module:fire_event("s2s-check-certificate", { host = host, session = session, cert = cert }); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
466 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
467 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
468 --- XMPP stream event handlers |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
469 |
|
11772
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
470 local function session_secure(session) |
|
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
471 session.secure = true; |
|
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
472 session.encrypted = true; |
|
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
473 |
|
12480
7e9ebdc75ce4
net: isolate LuaSec-specifics
Jonas Schäfer <jonas@wielicki.name>
parents:
12476
diff
changeset
|
474 local info = session.conn:ssl_info(); |
|
11772
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
475 if type(info) == "table" then |
|
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
476 (session.log or log)("info", "Stream encrypted (%s with %s)", info.protocol, info.cipher); |
|
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
477 session.compressed = info.compression; |
|
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
478 m_tls_params:with_labels(info.protocol, info.cipher):add(1) |
|
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
479 else |
|
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
480 (session.log or log)("info", "Stream encrypted"); |
|
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
481 end |
|
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
482 end |
|
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
483 |
|
7451
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
484 local stream_callbacks = { default_ns = "jabber:server" }; |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
485 |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
486 function stream_callbacks.handlestanza(session, stanza) |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
487 stanza = session.filter("stanzas/in", stanza); |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
488 session.thread:run(stanza); |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
489 end |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
490 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
491 local xmlns_xmpp_streams = "urn:ietf:params:xml:ns:xmpp-streams"; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
492 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
493 function stream_callbacks.streamopened(session, attr) |
|
7451
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
494 -- run _streamopened in async context |
|
13575
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
495 session.thread:run({ event = "streamopened", attr = attr }); |
|
7451
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
496 end |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
497 |
|
13575
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
498 function session_events.streamopened(session, event) |
|
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
499 local attr = event.attr; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
500 session.version = tonumber(attr.version) or 0; |
|
10115
c0bd5daa9c7f
mod_s2s: Distinguish between high and low level errors in bounces
Kim Alvefur <zash@zash.se>
parents:
10111
diff
changeset
|
501 session.had_stream = true; -- Had a stream opened at least once |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
502 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
503 -- TODO: Rename session.secure to session.encrypted |
|
12602
9184fe3d489a
mod_tls: Record STARTTLS state so it can be shown in Shell
Kim Alvefur <zash@zash.se>
parents:
12494
diff
changeset
|
504 if session.secure == false then -- Set by mod_tls during STARTTLS handshake |
|
9184fe3d489a
mod_tls: Record STARTTLS state so it can be shown in Shell
Kim Alvefur <zash@zash.se>
parents:
12494
diff
changeset
|
505 session.starttls = "completed"; |
|
11772
e2155e2703dd
mod_s2s: Factor out procedure for newly encrypted sessions
Kim Alvefur <zash@zash.se>
parents:
11770
diff
changeset
|
506 session_secure(session); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
507 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
508 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
509 if session.direction == "incoming" then |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
510 -- Send a reply stream header |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
511 |
|
4589
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
512 -- Validate to/from |
|
10381
66fa45d24481
mod_s2s: Only nameprep stream to/from addresses if they are present
Kim Alvefur <zash@zash.se>
parents:
10311
diff
changeset
|
513 local to, from = attr.to, attr.from; |
|
14104
a1fb05cbd44e
mod_s2s: Fully validate stream addressing
Kim Alvefur <zash@zash.se>
parents:
14028
diff
changeset
|
514 local function hostprep(s) |
|
a1fb05cbd44e
mod_s2s: Fully validate stream addressing
Kim Alvefur <zash@zash.se>
parents:
14028
diff
changeset
|
515 local node, host, res = prepped_split(s); |
|
a1fb05cbd44e
mod_s2s: Fully validate stream addressing
Kim Alvefur <zash@zash.se>
parents:
14028
diff
changeset
|
516 if not (node or res) then return host; end |
|
a1fb05cbd44e
mod_s2s: Fully validate stream addressing
Kim Alvefur <zash@zash.se>
parents:
14028
diff
changeset
|
517 end |
|
a1fb05cbd44e
mod_s2s: Fully validate stream addressing
Kim Alvefur <zash@zash.se>
parents:
14028
diff
changeset
|
518 if to then to = hostprep(attr.to); end |
|
a1fb05cbd44e
mod_s2s: Fully validate stream addressing
Kim Alvefur <zash@zash.se>
parents:
14028
diff
changeset
|
519 if from then from = hostprep(attr.from); end |
|
4589
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
520 if not to and attr.to then -- COMPAT: Some servers do not reliably set 'to' (especially on stream restarts) |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
521 session:close({ condition = "improper-addressing", text = "Invalid 'to' address" }); |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
522 return; |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
523 end |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
524 if not from and attr.from then -- COMPAT: Some servers do not reliably set 'from' (especially on stream restarts) |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
525 session:close({ condition = "improper-addressing", text = "Invalid 'from' address" }); |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
526 return; |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
527 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
528 |
|
4589
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
529 -- Set session.[from/to]_host if they have not been set already and if |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
530 -- this session isn't already authenticated |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
531 if session.type == "s2sin_unauthed" and from and not session.from_host then |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
532 session.from_host = from; |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
533 elseif from ~= session.from_host then |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
534 session:close({ condition = "improper-addressing", text = "New stream 'from' attribute does not match original" }); |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
535 return; |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
536 end |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
537 if session.type == "s2sin_unauthed" and to and not session.to_host then |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
538 session.to_host = to; |
|
12679
7d4a95ba9b6c
mod_s2s: Fix firing buffer drain events
Kim Alvefur <zash@zash.se>
parents:
12474
diff
changeset
|
539 session.host = to; |
|
4589
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
540 elseif to ~= session.to_host then |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
541 session:close({ condition = "improper-addressing", text = "New stream 'to' attribute does not match original" }); |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
542 return; |
|
8553d822f417
mod_s2s: streamopened(): Tighter validation around stream 'to' and 'from' attributes, and only set to_host and from_host if they aren't set already and if the session hasn't already been authenticated
Matthew Wild <mwild1@gmail.com>
parents:
4587
diff
changeset
|
543 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
544 |
|
4820
c65edd3bb334
mod_s2s: Cache to_host and from_host in local variables, and use these instead of repeated lookups
Matthew Wild <mwild1@gmail.com>
parents:
4819
diff
changeset
|
545 -- For convenience we'll put the sanitised values into these variables |
|
c65edd3bb334
mod_s2s: Cache to_host and from_host in local variables, and use these instead of repeated lookups
Matthew Wild <mwild1@gmail.com>
parents:
4819
diff
changeset
|
546 to, from = session.to_host, session.from_host; |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
547 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
548 session.streamid = uuid_gen(); |
|
4590
883611842d3a
mod_s2s: Log the entire stream header.
Kim Alvefur <zash@zash.se>
parents:
4587
diff
changeset
|
549 (session.log or log)("debug", "Incoming s2s received %s", st.stanza("stream:stream", attr):top_tag()); |
|
4820
c65edd3bb334
mod_s2s: Cache to_host and from_host in local variables, and use these instead of repeated lookups
Matthew Wild <mwild1@gmail.com>
parents:
4819
diff
changeset
|
550 if to then |
|
c65edd3bb334
mod_s2s: Cache to_host and from_host in local variables, and use these instead of repeated lookups
Matthew Wild <mwild1@gmail.com>
parents:
4819
diff
changeset
|
551 if not hosts[to] then |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
552 -- Attempting to connect to a host we don't serve |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
553 session:close({ |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
554 condition = "host-unknown"; |
|
4820
c65edd3bb334
mod_s2s: Cache to_host and from_host in local variables, and use these instead of repeated lookups
Matthew Wild <mwild1@gmail.com>
parents:
4819
diff
changeset
|
555 text = "This host does not serve "..to |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
556 }); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
557 return; |
|
4834
878f75ccc4fb
mod_s2s, mod_auth_anonymous, hostmanager: Remove disallow_s2s flag, deprecate the config option of the same name (disable mod_s2s instead), and add 'allow_anonymous_s2s' to separately control s2s for anonymous users
Matthew Wild <mwild1@gmail.com>
parents:
4822
diff
changeset
|
558 elseif not hosts[to].modules.s2s then |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
559 -- Attempting to connect to a host that disallows s2s |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
560 session:close({ |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
561 condition = "policy-violation"; |
|
4834
878f75ccc4fb
mod_s2s, mod_auth_anonymous, hostmanager: Remove disallow_s2s flag, deprecate the config option of the same name (disable mod_s2s instead), and add 'allow_anonymous_s2s' to separately control s2s for anonymous users
Matthew Wild <mwild1@gmail.com>
parents:
4822
diff
changeset
|
562 text = "Server-to-server communication is disabled for this host"; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
563 }); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
564 return; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
565 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
566 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
567 |
|
5390
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
568 if hosts[from] then |
|
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
569 session:close({ condition = "undefined-condition", text = "Attempt to connect from a host we serve" }); |
|
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
570 return; |
|
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
571 end |
|
b3c8757ee4f4
mod_s2s: Prevent s2s to and from hosts we serve locally
Kim Alvefur <zash@zash.se>
parents:
5389
diff
changeset
|
572 |
|
5363
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
573 if session.secure and not session.cert_chain_status then |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
574 if check_cert_status(session) == false then |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
575 return; |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
576 end |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
577 end |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
578 |
|
5533
df3c78221f26
mod_s2s: Ensure that to/from on stream headers are always correct, fixes #338
Matthew Wild <mwild1@gmail.com>
parents:
5522
diff
changeset
|
579 session:open_stream(session.to_host, session.from_host) |
|
11609
6dcc45a2e3bc
mod_s2s: Bail if connection is destroyed after attempting to open stream
Kim Alvefur <zash@zash.se>
parents:
11608
diff
changeset
|
580 if session.destroyed then |
|
6dcc45a2e3bc
mod_s2s: Bail if connection is destroyed after attempting to open stream
Kim Alvefur <zash@zash.se>
parents:
11608
diff
changeset
|
581 -- sending the stream opening could have failed during an opportunistic write |
|
6dcc45a2e3bc
mod_s2s: Bail if connection is destroyed after attempting to open stream
Kim Alvefur <zash@zash.se>
parents:
11608
diff
changeset
|
582 return |
|
6dcc45a2e3bc
mod_s2s: Bail if connection is destroyed after attempting to open stream
Kim Alvefur <zash@zash.se>
parents:
11608
diff
changeset
|
583 end |
|
6dcc45a2e3bc
mod_s2s: Bail if connection is destroyed after attempting to open stream
Kim Alvefur <zash@zash.se>
parents:
11608
diff
changeset
|
584 |
|
6684
53635a91c95c
mod_s2s: Mark stream as opened directly after opening stream, prevents session.close opening it again
Kim Alvefur <zash@zash.se>
parents:
6683
diff
changeset
|
585 session.notopen = nil; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
586 if session.version >= 1.0 then |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
587 local features = st.stanza("stream:features"); |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
588 |
|
4820
c65edd3bb334
mod_s2s: Cache to_host and from_host in local variables, and use these instead of repeated lookups
Matthew Wild <mwild1@gmail.com>
parents:
4819
diff
changeset
|
589 if to then |
|
11668
f18fbae6d9fe
mod_s2s: Use module API to fire events
Kim Alvefur <zash@zash.se>
parents:
11624
diff
changeset
|
590 module:context(to):fire_event("s2s-stream-features", { origin = session, features = features }); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
591 else |
|
5975
0d219631d47b
mod_s2s: Include IP in log messages, if host is unavailable
Florian Zeitz <florob@babelmonkeys.de>
parents:
5769
diff
changeset
|
592 (session.log or log)("warn", "No 'to' on stream header from %s means we can't offer any features", from or session.ip or "unknown host"); |
|
11668
f18fbae6d9fe
mod_s2s: Use module API to fire events
Kim Alvefur <zash@zash.se>
parents:
11624
diff
changeset
|
593 module:fire_event("s2s-stream-features-legacy", { origin = session, features = features }); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
594 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
595 |
|
6846
7eb166fa1f26
mod_c2s, mod_s2s: Close incoming connections if there are no features to offer on incomplete streams (fixes #285)
Kim Alvefur <zash@zash.se>
parents:
6685
diff
changeset
|
596 if ( session.type == "s2sin" or session.type == "s2sout" ) or features.tags[1] then |
|
13504
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
597 if stanza_size_limit or advertised_idle_timeout then |
|
12805
d96e24bd54e1
mod_s2s: Advertise stanza size limit to other servers
Kim Alvefur <zash@zash.se>
parents:
12681
diff
changeset
|
598 features:reset(); |
|
13504
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
599 local limits = features:tag("limits", { xmlns = "urn:xmpp:stream-limits:0" }); |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
600 if stanza_size_limit then |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
601 limits:text_tag("max-bytes", string.format("%d", stanza_size_limit)); |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
602 end |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
603 if advertised_idle_timeout then |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
604 limits:text_tag("idle-seconds", string.format("%d", advertised_idle_timeout)); |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
605 end |
|
2159a206684e
mod_c2s,mod_s2s: Advertise idle-seconds per XEP-0478
Kim Alvefur <zash@zash.se>
parents:
13444
diff
changeset
|
606 features:reset(); |
|
12805
d96e24bd54e1
mod_s2s: Advertise stanza size limit to other servers
Kim Alvefur <zash@zash.se>
parents:
12681
diff
changeset
|
607 end |
|
d96e24bd54e1
mod_s2s: Advertise stanza size limit to other servers
Kim Alvefur <zash@zash.se>
parents:
12681
diff
changeset
|
608 |
|
8483
6d47b74926dd
mod_s2s: Remove tostring() in logging since this is handled by util.format now
Kim Alvefur <zash@zash.se>
parents:
8463
diff
changeset
|
609 log("debug", "Sending stream features: %s", features); |
|
6846
7eb166fa1f26
mod_c2s, mod_s2s: Close incoming connections if there are no features to offer on incomplete streams (fixes #285)
Kim Alvefur <zash@zash.se>
parents:
6685
diff
changeset
|
610 session.sends2s(features); |
|
7eb166fa1f26
mod_c2s, mod_s2s: Close incoming connections if there are no features to offer on incomplete streams (fixes #285)
Kim Alvefur <zash@zash.se>
parents:
6685
diff
changeset
|
611 else |
|
7865
a8cc495a65dc
mod_s2s: Clarify that it is stream features that can't be offered (here too)
Kim Alvefur <zash@zash.se>
parents:
7679
diff
changeset
|
612 (session.log or log)("warn", "No stream features to offer, giving up"); |
|
a8cc495a65dc
mod_s2s: Clarify that it is stream features that can't be offered (here too)
Kim Alvefur <zash@zash.se>
parents:
7679
diff
changeset
|
613 session:close({ condition = "undefined-condition", text = "No stream features to offer" }); |
|
6846
7eb166fa1f26
mod_c2s, mod_s2s: Close incoming connections if there are no features to offer on incomplete streams (fixes #285)
Kim Alvefur <zash@zash.se>
parents:
6685
diff
changeset
|
614 end |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
615 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
616 elseif session.direction == "outgoing" then |
|
6359
c74670b3be53
mod_s2s: Mark stream as opened earlier for outgoing connections, fixes double stream headers on policy failures
Kim Alvefur <zash@zash.se>
parents:
5975
diff
changeset
|
617 session.notopen = nil; |
|
6378
3cec0eef0b70
mod_s2s: Close offending s2s streams missing an 'id' attribute with a stream error instead of throwing an unhandled error
Kim Alvefur <zash@zash.se>
parents:
6364
diff
changeset
|
618 if not attr.id then |
|
7677
8613086779fa
mod_s2s: Lower log message to 'warn' level, standard for remotely-triggered protocol issues
Matthew Wild <mwild1@gmail.com>
parents:
7100
diff
changeset
|
619 log("warn", "Stream response did not give us a stream id!"); |
|
6378
3cec0eef0b70
mod_s2s: Close offending s2s streams missing an 'id' attribute with a stream error instead of throwing an unhandled error
Kim Alvefur <zash@zash.se>
parents:
6364
diff
changeset
|
620 session:close({ condition = "undefined-condition", text = "Missing stream ID" }); |
|
3cec0eef0b70
mod_s2s: Close offending s2s streams missing an 'id' attribute with a stream error instead of throwing an unhandled error
Kim Alvefur <zash@zash.se>
parents:
6364
diff
changeset
|
621 return; |
|
3cec0eef0b70
mod_s2s: Close offending s2s streams missing an 'id' attribute with a stream error instead of throwing an unhandled error
Kim Alvefur <zash@zash.se>
parents:
6364
diff
changeset
|
622 end |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
623 session.streamid = attr.id; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
624 |
|
5363
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
625 if session.secure and not session.cert_chain_status then |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
626 if check_cert_status(session) == false then |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
627 return; |
|
12474
8fac32810144
mod_s2s: Improve robustness of outgoing s2s certificate verification
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
628 else |
|
8fac32810144
mod_s2s: Improve robustness of outgoing s2s certificate verification
Matthew Wild <mwild1@gmail.com>
parents:
12362
diff
changeset
|
629 session.authenticated_remote = true; |
|
5363
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
630 end |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
631 end |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
632 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
633 -- If server is pre-1.0, don't wait for features, just do dialback |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
634 if session.version < 1.0 then |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
635 if not session.dialback_verifying then |
|
11668
f18fbae6d9fe
mod_s2s: Use module API to fire events
Kim Alvefur <zash@zash.se>
parents:
11624
diff
changeset
|
636 module:context(session.from_host):fire_event("s2sout-authenticate-legacy", { origin = session }); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
637 else |
|
5362
612467e263af
s2smanager, mod_s2s, mod_dialback, mod_saslauth: Move s2smanager.make_authenticated() to mod_s2s, and plugins now signal authentication via the s2s-authenticated event
Matthew Wild <mwild1@gmail.com>
parents:
5351
diff
changeset
|
638 mark_connected(session); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
639 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
640 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
641 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
642 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
643 |
|
13575
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
644 function session_events.streamclosed(session) |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
645 (session.log or log)("debug", "Received </stream:stream>"); |
|
4988
29bdf68ad142
mod_s2s: Adjust session:close() in line with mod_c2s's - fixes waiting for </stream:stream> if it has already been sent by the peer
Matthew Wild <mwild1@gmail.com>
parents:
4969
diff
changeset
|
646 session:close(false); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
647 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
648 |
|
13575
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
649 function session_events.callback(session, event) |
|
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
650 session.log("debug", "Running session callback %s", event.name); |
|
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
651 event.callback(session, event); |
|
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
652 end |
|
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
653 |
|
10810
8a0a923e1ced
mod_s2s: Run stream close in async context
Kim Alvefur <zash@zash.se>
parents:
10809
diff
changeset
|
654 function stream_callbacks.streamclosed(session, attr) |
|
8a0a923e1ced
mod_s2s: Run stream close in async context
Kim Alvefur <zash@zash.se>
parents:
10809
diff
changeset
|
655 -- run _streamclosed in async context |
|
13575
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
656 session.thread:run({ event = "streamclosed", attr = attr }); |
|
10810
8a0a923e1ced
mod_s2s: Run stream close in async context
Kim Alvefur <zash@zash.se>
parents:
10809
diff
changeset
|
657 end |
|
8a0a923e1ced
mod_s2s: Run stream close in async context
Kim Alvefur <zash@zash.se>
parents:
10809
diff
changeset
|
658 |
|
11682
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
659 -- Some stream conditions indicate a problem on our end, e.g. that we sent |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
660 -- something invalid. Those should be investigated. Others are problems or |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
661 -- events in the remote host that don't affect us, or simply that the |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
662 -- connection was closed for being idle. |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
663 local stream_condition_severity = { |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
664 ["bad-format"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
665 ["bad-namespace-prefix"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
666 ["conflict"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
667 ["connection-timeout"] = "debug"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
668 ["host-gone"] = "info"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
669 ["host-unknown"] = "info"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
670 ["improper-addressing"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
671 ["internal-server-error"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
672 ["invalid-from"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
673 ["invalid-namespace"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
674 ["invalid-xml"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
675 ["not-authorized"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
676 ["not-well-formed"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
677 ["policy-violation"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
678 ["remote-connection-failed"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
679 ["reset"] = "info"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
680 ["resource-constraint"] = "info"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
681 ["restricted-xml"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
682 ["see-other-host"] = "info"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
683 ["system-shutdown"] = "info"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
684 ["undefined-condition"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
685 ["unsupported-encoding"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
686 ["unsupported-feature"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
687 ["unsupported-stanza-type"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
688 ["unsupported-version"] = "warn"; |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
689 } |
|
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
690 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
691 function stream_callbacks.error(session, error, data) |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
692 if error == "no-stream" then |
|
6364
4e93e8768c36
mod_c2s, mod_s2s: Log received invalid stream headers
Matthew Wild <mwild1@gmail.com>
parents:
6362
diff
changeset
|
693 session.log("debug", "Invalid opening stream header (%s)", (data:gsub("^([^\1]+)\1", "{%1}"))); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
694 session:close("invalid-namespace"); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
695 elseif error == "parse-error" then |
|
8483
6d47b74926dd
mod_s2s: Remove tostring() in logging since this is handled by util.format now
Kim Alvefur <zash@zash.se>
parents:
8463
diff
changeset
|
696 session.log("debug", "Server-to-server XML parse error: %s", error); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
697 session:close("not-well-formed"); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
698 elseif error == "stream-error" then |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
699 local condition, text = "undefined-condition"; |
|
8233
4e7269c53659
mod_component, mod_s2s: Iterate over child tags instead of child nodes (can include text) in stream error (same as 176b7f4e4ac9)
Kim Alvefur <zash@zash.se>
parents:
7677
diff
changeset
|
700 for child in data:childtags(nil, xmlns_xmpp_streams) do |
|
4e7269c53659
mod_component, mod_s2s: Iterate over child tags instead of child nodes (can include text) in stream error (same as 176b7f4e4ac9)
Kim Alvefur <zash@zash.se>
parents:
7677
diff
changeset
|
701 if child.name ~= "text" then |
|
4e7269c53659
mod_component, mod_s2s: Iterate over child tags instead of child nodes (can include text) in stream error (same as 176b7f4e4ac9)
Kim Alvefur <zash@zash.se>
parents:
7677
diff
changeset
|
702 condition = child.name; |
|
4e7269c53659
mod_component, mod_s2s: Iterate over child tags instead of child nodes (can include text) in stream error (same as 176b7f4e4ac9)
Kim Alvefur <zash@zash.se>
parents:
7677
diff
changeset
|
703 else |
|
4e7269c53659
mod_component, mod_s2s: Iterate over child tags instead of child nodes (can include text) in stream error (same as 176b7f4e4ac9)
Kim Alvefur <zash@zash.se>
parents:
7677
diff
changeset
|
704 text = child:get_text(); |
|
4e7269c53659
mod_component, mod_s2s: Iterate over child tags instead of child nodes (can include text) in stream error (same as 176b7f4e4ac9)
Kim Alvefur <zash@zash.se>
parents:
7677
diff
changeset
|
705 end |
|
4e7269c53659
mod_component, mod_s2s: Iterate over child tags instead of child nodes (can include text) in stream error (same as 176b7f4e4ac9)
Kim Alvefur <zash@zash.se>
parents:
7677
diff
changeset
|
706 if condition ~= "undefined-condition" and text then |
|
4e7269c53659
mod_component, mod_s2s: Iterate over child tags instead of child nodes (can include text) in stream error (same as 176b7f4e4ac9)
Kim Alvefur <zash@zash.se>
parents:
7677
diff
changeset
|
707 break; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
708 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
709 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
710 text = condition .. (text and (" ("..text..")") or ""); |
|
11682
7843f1ca3b33
mod_s2s: Vary log level by remote stream error
Kim Alvefur <zash@zash.se>
parents:
11678
diff
changeset
|
711 session.log(stream_condition_severity[condition] or "info", "Session closed by remote with error: %s", text); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
712 session:close(nil, text); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
713 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
714 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
715 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
716 --- Session methods |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
717 local stream_xmlns_attr = {xmlns='urn:ietf:params:xml:ns:xmpp-streams'}; |
|
10632
c9de8275aaf2
mod_s2s: Comment on the various 'reason' arguments passed to :close
Kim Alvefur <zash@zash.se>
parents:
10625
diff
changeset
|
718 -- reason: stream error to send to the remote server |
|
c9de8275aaf2
mod_s2s: Comment on the various 'reason' arguments passed to :close
Kim Alvefur <zash@zash.se>
parents:
10625
diff
changeset
|
719 -- remote_reason: stream error received from the remote server |
|
10648
2bd17e043275
mod_s2s: Fix typo in comment [codespell]
Kim Alvefur <zash@zash.se>
parents:
10632
diff
changeset
|
720 -- bounce_reason: stanza error to pass to bounce_sendq because stream- and stanza errors are different |
|
10425
42cf93ff4618
s2s: Allow passing a custom error for bouncing queued stanzas (#770)
Kim Alvefur <zash@zash.se>
parents:
10421
diff
changeset
|
721 local function session_close(session, reason, remote_reason, bounce_reason) |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
722 local log = session.log or log; |
|
11669
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
723 if not session.conn then |
|
11670
7f6c816a2c09
mod_s2s: Log debug message on attempted close of an connectionless session
Kim Alvefur <zash@zash.se>
parents:
11669
diff
changeset
|
724 log("debug", "Attempt to close without associated connection with reason %q", reason); |
|
11669
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
725 return |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
726 end |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
727 |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
728 local conn = session.conn; |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
729 conn:pause_writes(); -- until :close |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
730 if session.notopen then |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
731 if session.direction == "incoming" then |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
732 session:open_stream(session.to_host, session.from_host); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
733 else |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
734 session:open_stream(session.from_host, session.to_host); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
735 end |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
736 end |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
737 |
|
11704
0a8671f32424
mod_s2s: Guard against missing 'to' on incoming stream
Kim Alvefur <zash@zash.se>
parents:
11684
diff
changeset
|
738 local this_host = session.direction == "outgoing" and session.from_host or session.to_host |
|
11859
14cf34d35c30
mod_s2s: Don't pass unknown hostnames as stats label
Kim Alvefur <zash@zash.se>
parents:
11775
diff
changeset
|
739 if not hosts[this_host] then this_host = ":unknown"; end |
|
11669
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
740 |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
741 if reason then -- nil == no err, initiated by us, false == initiated by remote |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
742 local stream_error; |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
743 local condition, text, extra |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
744 if type(reason) == "string" then -- assume stream error |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
745 condition = reason |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
746 elseif type(reason) == "table" and not st.is_stanza(reason) then |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
747 condition = reason.condition or "undefined-condition" |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
748 text = reason.text |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
749 extra = reason.extra |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
750 end |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
751 if condition then |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
752 stream_error = st.stanza("stream:error"):tag(condition, stream_xmlns_attr):up(); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
753 if text then |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
754 stream_error:tag("text", stream_xmlns_attr):text(text):up(); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
755 end |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
756 if extra then |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
757 stream_error:add_child(extra); |
|
5533
df3c78221f26
mod_s2s: Ensure that to/from on stream headers are always correct, fixes #338
Matthew Wild <mwild1@gmail.com>
parents:
5522
diff
changeset
|
758 end |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
759 end |
|
11669
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
760 if this_host and condition then |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
761 m_closed_connections:with_labels(this_host, session.direction, condition):add(1) |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
762 end |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
763 if st.is_stanza(stream_error) then |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
764 -- to and from are never unknown on outgoing connections |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
765 log("debug", "Disconnecting %s->%s[%s], <stream:error> is: %s", |
|
11867
bb20cfd4884f
mod_s2s: Fix logging of <stream:error> consistency with other mods
Kim Alvefur <zash@zash.se>
parents:
11859
diff
changeset
|
766 session.from_host or "(unknown host)" or session.ip, session.to_host or "(unknown host)", session.type, stream_error); |
|
11669
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
767 session.sends2s(stream_error); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
768 end |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
769 else |
|
11705
7132acfd287e
mod_s2s: Handle measurement where the local host is unknown
Kim Alvefur <zash@zash.se>
parents:
11704
diff
changeset
|
770 m_closed_connections:with_labels(this_host or ":unknown", session.direction, reason == false and ":remote-choice" or ":local-choice"):add(1) |
|
11669
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
771 end |
|
11526
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
772 |
|
11669
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
773 session.sends2s("</stream:stream>"); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
774 function session.sends2s() return false; end |
|
11526
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
775 |
|
11669
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
776 -- luacheck: ignore 422/reason 412/reason |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
777 -- FIXME reason should be managed in a place common to c2s, s2s, bosh, component etc |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
778 local reason = remote_reason or (reason and (reason.text or reason.condition)) or reason; |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
779 session.log("info", "%s s2s stream %s->%s closed: %s", session.direction:gsub("^.", string.upper), |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
780 session.from_host or "(unknown host)", session.to_host or "(unknown host)", reason or "stream closed"); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
781 |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
782 conn:resume_writes(); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
783 |
|
11678
f90a337d81a8
mod_s2s: Remove connection timeout once it's no longer needed
Kim Alvefur <zash@zash.se>
parents:
11670
diff
changeset
|
784 if session.connect_timeout then |
|
f90a337d81a8
mod_s2s: Remove connection timeout once it's no longer needed
Kim Alvefur <zash@zash.se>
parents:
11670
diff
changeset
|
785 stop_timer(session.connect_timeout); |
|
f90a337d81a8
mod_s2s: Remove connection timeout once it's no longer needed
Kim Alvefur <zash@zash.se>
parents:
11670
diff
changeset
|
786 session.connect_timeout = nil; |
|
f90a337d81a8
mod_s2s: Remove connection timeout once it's no longer needed
Kim Alvefur <zash@zash.se>
parents:
11670
diff
changeset
|
787 end |
|
f90a337d81a8
mod_s2s: Remove connection timeout once it's no longer needed
Kim Alvefur <zash@zash.se>
parents:
11670
diff
changeset
|
788 |
|
11669
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
789 -- Authenticated incoming stream may still be sending us stanzas, so wait for </stream:stream> from remote |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
790 if reason == nil and not session.notopen and session.direction == "incoming" then |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
791 add_task(stream_close_timeout, function () |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
792 if not session.destroyed then |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
793 session.log("warn", "Failed to receive a stream close response, closing connection anyway..."); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
794 s2s_destroy_session(session, reason, bounce_reason); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
795 conn:close(); |
|
11526
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
796 end |
|
11669
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
797 end); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
798 else |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
799 s2s_destroy_session(session, reason, bounce_reason); |
|
bca75f34d374
mod_s2s: Drop level of indentation by inverting a condition and early return
Kim Alvefur <zash@zash.se>
parents:
11668
diff
changeset
|
800 conn:close(); -- Close immediately, as this is an outgoing connection or is not authed |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
801 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
802 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
803 |
|
9412
063977461363
mod_s2s: Silence all warnings instead of ignoring the entire module
Kim Alvefur <zash@zash.se>
parents:
9070
diff
changeset
|
804 function session_stream_attrs(session, from, to, attr) -- luacheck: ignore 212/session |
|
5533
df3c78221f26
mod_s2s: Ensure that to/from on stream headers are always correct, fixes #338
Matthew Wild <mwild1@gmail.com>
parents:
5522
diff
changeset
|
805 if not from or (hosts[from] and hosts[from].modules.dialback) then |
|
5351
901ed253bbf7
mod_s2s, mod_saslauth, mod_compression: Refactor to have common code for opening streams
Kim Alvefur <zash@zash.se>
parents:
5345
diff
changeset
|
806 attr["xmlns:db"] = 'jabber:server:dialback'; |
|
901ed253bbf7
mod_s2s, mod_saslauth, mod_compression: Refactor to have common code for opening streams
Kim Alvefur <zash@zash.se>
parents:
5345
diff
changeset
|
807 end |
| 6602 | 808 if not from then |
| 809 attr.from = ''; | |
| 810 end | |
| 811 if not to then | |
| 812 attr.to = ''; | |
| 813 end | |
|
5351
901ed253bbf7
mod_s2s, mod_saslauth, mod_compression: Refactor to have common code for opening streams
Kim Alvefur <zash@zash.se>
parents:
5345
diff
changeset
|
814 end |
|
901ed253bbf7
mod_s2s, mod_saslauth, mod_compression: Refactor to have common code for opening streams
Kim Alvefur <zash@zash.se>
parents:
5345
diff
changeset
|
815 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
816 -- Session initialization logic shared by incoming and outgoing |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
817 local function initialize_session(session) |
|
10850
bd2814f900dd
mod_c2s,mod_s2s: Make stanza size limits configurable
Kim Alvefur <zash@zash.se>
parents:
10849
diff
changeset
|
818 local stream = new_xmpp_stream(session, stream_callbacks, stanza_size_limit); |
|
7451
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
819 |
|
13575
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
820 session.thread = runner(function (item) |
|
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
821 if st.is_stanza(item) then |
|
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
822 core_process_stanza(session, item); |
|
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
823 else |
|
750ff9f579e2
mod_c2s, mod_s2s: Support for queuing callbacks to run in session thread
Matthew Wild <mwild1@gmail.com>
parents:
13557
diff
changeset
|
824 session_events[item.event](session, item); |
|
7451
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
825 end |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
826 end, runner_callbacks, session); |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
827 |
|
6255
6167f8bc5a6b
mod_s2s: Decide on log function once
Kim Alvefur <zash@zash.se>
parents:
6146
diff
changeset
|
828 local log = session.log or log; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
829 session.stream = stream; |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
830 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
831 session.notopen = true; |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
832 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
833 function session.reset_stream() |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
834 session.notopen = true; |
|
6362
f5f44504e18b
mod_s2s: Reset stream ID when resetting stream [compliance]
Kim Alvefur <zash@zash.se>
parents:
6359
diff
changeset
|
835 session.streamid = nil; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
836 session.stream:reset(); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
837 end |
|
5351
901ed253bbf7
mod_s2s, mod_saslauth, mod_compression: Refactor to have common code for opening streams
Kim Alvefur <zash@zash.se>
parents:
5345
diff
changeset
|
838 |
|
6085
2f911644f527
mod_s2s: Replace open_stream() with function that only adds s2s/dialback attributes to stream header
Kim Alvefur <zash@zash.se>
parents:
6069
diff
changeset
|
839 session.stream_attrs = session_stream_attrs; |
|
6069
446148cad35e
mod_s2s: Revert e626ee2fe106 change, it broke Dialback
Kim Alvefur <zash@zash.se>
parents:
6063
diff
changeset
|
840 |
|
6256
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
841 local filter = initialize_filters(session); |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
842 local conn = session.conn; |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
843 local w = conn.write; |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
844 |
|
11773
c5f2b63cf6ff
mod_s2s: Handle connections having TLS from the start
Kim Alvefur <zash@zash.se>
parents:
11772
diff
changeset
|
845 if conn:ssl() then |
|
12602
9184fe3d489a
mod_tls: Record STARTTLS state so it can be shown in Shell
Kim Alvefur <zash@zash.se>
parents:
12494
diff
changeset
|
846 -- Direct TLS was used |
|
11773
c5f2b63cf6ff
mod_s2s: Handle connections having TLS from the start
Kim Alvefur <zash@zash.se>
parents:
11772
diff
changeset
|
847 session_secure(session); |
|
c5f2b63cf6ff
mod_s2s: Handle connections having TLS from the start
Kim Alvefur <zash@zash.se>
parents:
11772
diff
changeset
|
848 end |
|
c5f2b63cf6ff
mod_s2s: Handle connections having TLS from the start
Kim Alvefur <zash@zash.se>
parents:
11772
diff
changeset
|
849 |
|
6256
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
850 function session.sends2s(t) |
|
9069
22e5f11c778a
sessionmanager, mod_s2s: Bring debug line for outgoing stanzas in line with that for incoming
Kim Alvefur <zash@zash.se>
parents:
9068
diff
changeset
|
851 log("debug", "Sending[%s]: %s", session.type, t.top_tag and t:top_tag() or t:match("^[^>]*>?")); |
|
6256
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
852 if t.name then |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
853 t = filter("stanzas/out", t); |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
854 end |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
855 if t then |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
856 t = filter("bytes/out", tostring(t)); |
|
12807
f0f7b0c61465
mod_s2s: Avoid sending too large stanzas
Kim Alvefur <zash@zash.se>
parents:
12806
diff
changeset
|
857 if session.outgoing_stanza_size_limit and #t > session.outgoing_stanza_size_limit then |
|
f0f7b0c61465
mod_s2s: Avoid sending too large stanzas
Kim Alvefur <zash@zash.se>
parents:
12806
diff
changeset
|
858 log("warn", "Attempt to send a stanza exceeding session limit of %dB (%dB)!", session.outgoing_stanza_size_limit, #t); |
|
f0f7b0c61465
mod_s2s: Avoid sending too large stanzas
Kim Alvefur <zash@zash.se>
parents:
12806
diff
changeset
|
859 -- TODO Pass identifiable error condition back to allow appropriate handling |
|
f0f7b0c61465
mod_s2s: Avoid sending too large stanzas
Kim Alvefur <zash@zash.se>
parents:
12806
diff
changeset
|
860 return false |
|
f0f7b0c61465
mod_s2s: Avoid sending too large stanzas
Kim Alvefur <zash@zash.se>
parents:
12806
diff
changeset
|
861 end |
|
6256
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
862 if t then |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
863 return w(conn, t); |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
864 end |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
865 end |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
866 end |
|
d05627c89c99
mod_s2s: Move filter initialization to common place
Kim Alvefur <zash@zash.se>
parents:
6255
diff
changeset
|
867 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
868 function session.data(data) |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
869 data = filter("bytes/in", data); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
870 if data then |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
871 local ok, err = stream:feed(data); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
872 if ok then return; end |
|
10111
0f335815244f
plugins: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents:
9854
diff
changeset
|
873 log("debug", "Received invalid XML (%s) %d bytes: %q", err, #data, data:sub(1, 300)); |
|
10849
19e7092e062c
mod_c2s,mod_s2s: Use a distinct stream error for hitting stanza size limit
Kim Alvefur <zash@zash.se>
parents:
10810
diff
changeset
|
874 if err == "stanza-too-large" then |
|
11770
d2a9aa1c7ac8
mod_c2s,mod_s2s: Indicate stanza size violation with condition from XEP-0205 (thanks mjk)
Kim Alvefur <zash@zash.se>
parents:
11742
diff
changeset
|
875 session:close({ |
|
d2a9aa1c7ac8
mod_c2s,mod_s2s: Indicate stanza size violation with condition from XEP-0205 (thanks mjk)
Kim Alvefur <zash@zash.se>
parents:
11742
diff
changeset
|
876 condition = "policy-violation", |
|
d2a9aa1c7ac8
mod_c2s,mod_s2s: Indicate stanza size violation with condition from XEP-0205 (thanks mjk)
Kim Alvefur <zash@zash.se>
parents:
11742
diff
changeset
|
877 text = "XML stanza is too big", |
|
d2a9aa1c7ac8
mod_c2s,mod_s2s: Indicate stanza size violation with condition from XEP-0205 (thanks mjk)
Kim Alvefur <zash@zash.se>
parents:
11742
diff
changeset
|
878 extra = st.stanza("stanza-too-big", { xmlns = 'urn:xmpp:errors' }), |
|
d2a9aa1c7ac8
mod_c2s,mod_s2s: Indicate stanza size violation with condition from XEP-0205 (thanks mjk)
Kim Alvefur <zash@zash.se>
parents:
11742
diff
changeset
|
879 }, nil, "Received invalid XML from remote server"); |
|
10849
19e7092e062c
mod_c2s,mod_s2s: Use a distinct stream error for hitting stanza size limit
Kim Alvefur <zash@zash.se>
parents:
10810
diff
changeset
|
880 else |
|
19e7092e062c
mod_c2s,mod_s2s: Use a distinct stream error for hitting stanza size limit
Kim Alvefur <zash@zash.se>
parents:
10810
diff
changeset
|
881 session:close("not-well-formed", nil, "Received invalid XML from remote server"); |
|
19e7092e062c
mod_c2s,mod_s2s: Use a distinct stream error for hitting stanza size limit
Kim Alvefur <zash@zash.se>
parents:
10810
diff
changeset
|
882 end |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
883 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
884 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
885 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
886 session.close = session_close; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
887 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
888 local handlestanza = stream_callbacks.handlestanza; |
|
9412
063977461363
mod_s2s: Silence all warnings instead of ignoring the entire module
Kim Alvefur <zash@zash.se>
parents:
9070
diff
changeset
|
889 function session.dispatch_stanza(session, stanza) -- luacheck: ignore 432/session |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
890 return handlestanza(session, stanza); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
891 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
892 |
|
6259
36f611624987
mod_s2s: Fire a 's2s-created' event when new s2s connections are initialized
Kim Alvefur <zash@zash.se>
parents:
6257
diff
changeset
|
893 module:fire_event("s2s-created", { session = session }); |
|
36f611624987
mod_s2s: Fire a 's2s-created' event when new s2s connections are initialized
Kim Alvefur <zash@zash.se>
parents:
6257
diff
changeset
|
894 |
|
11678
f90a337d81a8
mod_s2s: Remove connection timeout once it's no longer needed
Kim Alvefur <zash@zash.se>
parents:
11670
diff
changeset
|
895 session.connect_timeout = add_task(connect_timeout, function () |
|
4960
8950510ddb2e
mod_s2s: Make unauthed session timeout a little more aggressive... otherwise it's possible for sessions to slip under the net and never get killed off
Matthew Wild <mwild1@gmail.com>
parents:
4906
diff
changeset
|
896 if session.type == "s2sin" or session.type == "s2sout" then |
|
8950510ddb2e
mod_s2s: Make unauthed session timeout a little more aggressive... otherwise it's possible for sessions to slip under the net and never get killed off
Matthew Wild <mwild1@gmail.com>
parents:
4906
diff
changeset
|
897 return; -- Ok, we're connected |
|
5307
d80e56d8805c
mod_s2s: Don't try to close sessions that were destroyed before timeout
Kim Alvefur <zash@zash.se>
parents:
5281
diff
changeset
|
898 elseif session.type == "s2s_destroyed" then |
|
d80e56d8805c
mod_s2s: Don't try to close sessions that were destroyed before timeout
Kim Alvefur <zash@zash.se>
parents:
5281
diff
changeset
|
899 return; -- Session already destroyed |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
900 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
901 -- Not connected, need to close session and clean up |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
902 (session.log or log)("debug", "Destroying incomplete session %s->%s due to inactivity", |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
903 session.from_host or "(unknown)", session.to_host or "(unknown)"); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
904 session:close("connection-timeout"); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
905 end); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
906 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
907 |
|
7451
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
908 function runner_callbacks:ready() |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
909 self.data.log("debug", "Runner %s ready (%s)", self.thread, coroutine.status(self.thread)); |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
910 self.data.conn:resume(); |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
911 end |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
912 |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
913 function runner_callbacks:waiting() |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
914 self.data.log("debug", "Runner %s waiting (%s)", self.thread, coroutine.status(self.thread)); |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
915 self.data.conn:pause(); |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
916 end |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
917 |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
918 function runner_callbacks:error(err) |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
919 (self.data.log or log)("error", "Traceback[s2s]: %s", err); |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
920 end |
|
464a8a8de625
mod_s2s: Add util.async support
Kim Alvefur <zash@zash.se>
parents:
7450
diff
changeset
|
921 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
922 function listener.onconnect(conn) |
|
5522
3912c9264ef0
mod_s2s: Obey tcp_keepalives option for s2s too, and make it individually configurable through s2s_tcp_keepalives (thanks yeled)
Matthew Wild <mwild1@gmail.com>
parents:
5505
diff
changeset
|
923 conn:setoption("keepalive", opt_keepalives); |
|
4906
89df1f03546a
mod_s2s, s2sout.lib: Send stream header in onconnect()
Matthew Wild <mwild1@gmail.com>
parents:
4873
diff
changeset
|
924 local session = sessions[conn]; |
|
89df1f03546a
mod_s2s, s2sout.lib: Send stream header in onconnect()
Matthew Wild <mwild1@gmail.com>
parents:
4873
diff
changeset
|
925 if not session then -- New incoming connection |
|
89df1f03546a
mod_s2s, s2sout.lib: Send stream header in onconnect()
Matthew Wild <mwild1@gmail.com>
parents:
4873
diff
changeset
|
926 session = s2s_new_incoming(conn); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
927 sessions[conn] = session; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
928 session.log("debug", "Incoming s2s connection"); |
|
12280
74f8739b967a
mod_s2s: Add new early s2s-connected events
Kim Alvefur <zash@zash.se>
parents:
12207
diff
changeset
|
929 module:fire_event("s2sin-connected", { session = session }) |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
930 initialize_session(session); |
|
11526
15a3db955ad3
s2s et al.: Add counters for connection state transitions
Jonas Schäfer <jonas@wielicki.name>
parents:
11525
diff
changeset
|
931 m_accepted_tcp_connections:with_labels():add(1) |
|
4906
89df1f03546a
mod_s2s, s2sout.lib: Send stream header in onconnect()
Matthew Wild <mwild1@gmail.com>
parents:
4873
diff
changeset
|
932 else -- Outgoing session connected |
|
12280
74f8739b967a
mod_s2s: Add new early s2s-connected events
Kim Alvefur <zash@zash.se>
parents:
12207
diff
changeset
|
933 module:fire_event("s2sout-connected", { session = session }) |
|
4906
89df1f03546a
mod_s2s, s2sout.lib: Send stream header in onconnect()
Matthew Wild <mwild1@gmail.com>
parents:
4873
diff
changeset
|
934 session:open_stream(session.from_host, session.to_host); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
935 end |
|
12280
74f8739b967a
mod_s2s: Add new early s2s-connected events
Kim Alvefur <zash@zash.se>
parents:
12207
diff
changeset
|
936 module:fire_event("s2s-connected", { session = session }) |
| 5661 | 937 session.ip = conn:ip(); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
938 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
939 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
940 function listener.onincoming(conn, data) |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
941 local session = sessions[conn]; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
942 if session then |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
943 session.data(data); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
944 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
945 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
946 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
947 function listener.onstatus(conn, status) |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
948 if status == "ssl-handshake-complete" then |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
949 local session = sessions[conn]; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
950 if session and session.direction == "outgoing" then |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
951 session.log("debug", "Sending stream header..."); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
952 session:open_stream(session.from_host, session.to_host); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
953 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
954 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
955 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
956 |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
957 function listener.ondisconnect(conn, err) |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
958 local session = sessions[conn]; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
959 if session then |
|
5274
0d08c0965824
mod_s2s: Remove connection from sessions table as soon as we learn it is disconnected. Fixes a connection/session leak.
Matthew Wild <mwild1@gmail.com>
parents:
5173
diff
changeset
|
960 sessions[conn] = nil; |
|
10120
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
961 (session.log or log)("debug", "s2s disconnected: %s->%s (%s)", session.from_host, session.to_host, err or "connection closed"); |
|
10473
b2dd1219a321
mod_s2s: Improve TLS handshake error messages
Kim Alvefur <zash@zash.se>
parents:
10472
diff
changeset
|
962 if session.secure == false and err then |
|
b2dd1219a321
mod_s2s: Improve TLS handshake error messages
Kim Alvefur <zash@zash.se>
parents:
10472
diff
changeset
|
963 -- TODO util.error-ify this |
|
b2dd1219a321
mod_s2s: Improve TLS handshake error messages
Kim Alvefur <zash@zash.se>
parents:
10472
diff
changeset
|
964 err = "Error during negotiation of encrypted connection: "..err; |
|
b2dd1219a321
mod_s2s: Improve TLS handshake error messages
Kim Alvefur <zash@zash.se>
parents:
10472
diff
changeset
|
965 end |
|
10120
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
966 s2s_destroy_session(session, err); |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
967 end |
|
12301
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
968 module:fire_event("s2s-closed", { session = session; conn = conn }); |
|
10120
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
969 end |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
970 |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
971 function listener.onfail(data, err) |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
972 local session = data and data.session; |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
973 if session then |
|
4969
15183193c6a6
mod_s2s: Don't call ondisconnect manually, don't call conn:close() 3 times (!) and merge its logic and streamdisconnected into session_close - including now waiting for a reply </stream:stream> if there is the chance of further stanzas requiring delivery arriving. session.sends2s() on a half-closed stream returns false.
Matthew Wild <mwild1@gmail.com>
parents:
4968
diff
changeset
|
974 if err and session.direction == "outgoing" and session.notopen then |
|
15183193c6a6
mod_s2s: Don't call ondisconnect manually, don't call conn:close() 3 times (!) and merge its logic and streamdisconnected into session_close - including now waiting for a reply </stream:stream> if there is the chance of further stanzas requiring delivery arriving. session.sends2s() on a half-closed stream returns false.
Matthew Wild <mwild1@gmail.com>
parents:
4968
diff
changeset
|
975 (session.log or log)("debug", "s2s connection attempt failed: %s", err); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
976 end |
|
8483
6d47b74926dd
mod_s2s: Remove tostring() in logging since this is handled by util.format now
Kim Alvefur <zash@zash.se>
parents:
8463
diff
changeset
|
977 (session.log or log)("debug", "s2s disconnected: %s->%s (%s)", session.from_host, session.to_host, err or "connection closed"); |
|
4969
15183193c6a6
mod_s2s: Don't call ondisconnect manually, don't call conn:close() 3 times (!) and merge its logic and streamdisconnected into session_close - including now waiting for a reply </stream:stream> if there is the chance of further stanzas requiring delivery arriving. session.sends2s() on a half-closed stream returns false.
Matthew Wild <mwild1@gmail.com>
parents:
4968
diff
changeset
|
978 s2s_destroy_session(session, err); |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
979 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
980 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
981 |
|
5638
c5b7f4858014
mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents:
5636
diff
changeset
|
982 function listener.onreadtimeout(conn) |
|
c5b7f4858014
mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents:
5636
diff
changeset
|
983 local session = sessions[conn]; |
|
c5b7f4858014
mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents:
5636
diff
changeset
|
984 if session then |
|
12679
7d4a95ba9b6c
mod_s2s: Fix firing buffer drain events
Kim Alvefur <zash@zash.se>
parents:
12474
diff
changeset
|
985 return (hosts[session.host] or prosody).events.fire_event("s2s-read-timeout", { session = session }); |
|
5638
c5b7f4858014
mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents:
5636
diff
changeset
|
986 end |
|
c5b7f4858014
mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents:
5636
diff
changeset
|
987 end |
|
c5b7f4858014
mod_c2s, mod_c2s: Send a whitespace on read timeout, to prod TCP into detecting if the connection died
Kim Alvefur <zash@zash.se>
parents:
5636
diff
changeset
|
988 |
|
11740
b92f2abe0bda
mod_s2s: Fire 's2s-ondrain' event, mirroring mod_c2s
Kim Alvefur <zash@zash.se>
parents:
11707
diff
changeset
|
989 function listener.ondrain(conn) |
|
b92f2abe0bda
mod_s2s: Fire 's2s-ondrain' event, mirroring mod_c2s
Kim Alvefur <zash@zash.se>
parents:
11707
diff
changeset
|
990 local session = sessions[conn]; |
|
b92f2abe0bda
mod_s2s: Fire 's2s-ondrain' event, mirroring mod_c2s
Kim Alvefur <zash@zash.se>
parents:
11707
diff
changeset
|
991 if session then |
|
b92f2abe0bda
mod_s2s: Fire 's2s-ondrain' event, mirroring mod_c2s
Kim Alvefur <zash@zash.se>
parents:
11707
diff
changeset
|
992 return (hosts[session.host] or prosody).events.fire_event("s2s-ondrain", { session = session }); |
|
b92f2abe0bda
mod_s2s: Fire 's2s-ondrain' event, mirroring mod_c2s
Kim Alvefur <zash@zash.se>
parents:
11707
diff
changeset
|
993 end |
|
b92f2abe0bda
mod_s2s: Fire 's2s-ondrain' event, mirroring mod_c2s
Kim Alvefur <zash@zash.se>
parents:
11707
diff
changeset
|
994 end |
|
b92f2abe0bda
mod_s2s: Fire 's2s-ondrain' event, mirroring mod_c2s
Kim Alvefur <zash@zash.se>
parents:
11707
diff
changeset
|
995 |
|
11742
9c450185bac1
mod_c2s,mod_s2s: Fire event just before writes
Kim Alvefur <zash@zash.se>
parents:
11740
diff
changeset
|
996 function listener.onpredrain(conn) |
|
9c450185bac1
mod_c2s,mod_s2s: Fire event just before writes
Kim Alvefur <zash@zash.se>
parents:
11740
diff
changeset
|
997 local session = sessions[conn]; |
|
9c450185bac1
mod_c2s,mod_s2s: Fire event just before writes
Kim Alvefur <zash@zash.se>
parents:
11740
diff
changeset
|
998 if session then |
|
9c450185bac1
mod_c2s,mod_s2s: Fire event just before writes
Kim Alvefur <zash@zash.se>
parents:
11740
diff
changeset
|
999 return (hosts[session.host] or prosody).events.fire_event("s2s-pre-ondrain", { session = session }); |
|
9c450185bac1
mod_c2s,mod_s2s: Fire event just before writes
Kim Alvefur <zash@zash.se>
parents:
11740
diff
changeset
|
1000 end |
|
9c450185bac1
mod_c2s,mod_s2s: Fire event just before writes
Kim Alvefur <zash@zash.se>
parents:
11740
diff
changeset
|
1001 end |
|
9c450185bac1
mod_c2s,mod_s2s: Fire event just before writes
Kim Alvefur <zash@zash.se>
parents:
11740
diff
changeset
|
1002 |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1003 function listener.register_outgoing(conn, session) |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1004 sessions[conn] = session; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1005 initialize_session(session); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1006 end |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1007 |
|
6380
4220ffb87b22
net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents:
6378
diff
changeset
|
1008 function listener.ondetach(conn) |
|
4220ffb87b22
net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents:
6378
diff
changeset
|
1009 sessions[conn] = nil; |
|
4220ffb87b22
net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents:
6378
diff
changeset
|
1010 end |
|
4220ffb87b22
net.http, net.http.server, mod_c2s, mod_s2s, mod_component, mod_admin_telnet, mod_net_multiplex: Add ondetach to release connection from 'sessions' table (or equivalent)
Matthew Wild <mwild1@gmail.com>
parents:
6378
diff
changeset
|
1011 |
|
10120
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
1012 function listener.onattach(conn, data) |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
1013 local session = data and data.session; |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
1014 if session then |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
1015 session.conn = conn; |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
1016 sessions[conn] = session; |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
1017 initialize_session(session); |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
1018 end |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
1019 end |
|
756b8821007a
mod_s2s: Use net.connect instead of s2sout.lib for outgoing s2s connections
Kim Alvefur <zash@zash.se>
parents:
10115
diff
changeset
|
1020 |
|
10455
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1021 -- Complete the sentence "Your certificate " with what's wrong |
|
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1022 local function friendly_cert_error(session) --> string |
|
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1023 if session.cert_chain_status == "invalid" then |
|
13804
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1024 local cert_errors = set.new(); |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1025 |
|
13516
078780f262d5
mod_s2s: Fix traceback due to type confusion (Thanks Menel)
Kim Alvefur <zash@zash.se>
parents:
13504
diff
changeset
|
1026 if type(session.cert_chain_errors) == "table" then |
|
13804
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1027 cert_errors:add_list(session.cert_chain_errors[1]); |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1028 elseif type(session.cert_chain_errors) == "string" then |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1029 cert_errors:add(session.cert_chain_errors); |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1030 end |
|
12472
48121960983e
mod_s2s: Recognise and report errors with CA or intermediate certs
Kim Alvefur <zash@zash.se>
parents:
12462
diff
changeset
|
1031 |
|
13804
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1032 if cert_errors:contains("certificate has expired") then |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1033 return "has expired"; |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1034 elseif cert_errors:contains("self signed certificate") or cert_errors:contains("self-signed certificate") then |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1035 return "is self-signed"; |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1036 elseif cert_errors:contains("no matching DANE TLSA records") then |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1037 return "does not match any DANE TLSA records"; |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1038 end |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1039 |
|
e128ed4494f3
mod_s2s: Handle single message from chain validation
Kim Alvefur <zash@zash.se>
parents:
13802
diff
changeset
|
1040 if type(session.cert_chain_errors) == "table" then |
|
12472
48121960983e
mod_s2s: Recognise and report errors with CA or intermediate certs
Kim Alvefur <zash@zash.se>
parents:
12462
diff
changeset
|
1041 local chain_errors = set.new(session.cert_chain_errors[2]); |
|
48121960983e
mod_s2s: Recognise and report errors with CA or intermediate certs
Kim Alvefur <zash@zash.se>
parents:
12462
diff
changeset
|
1042 for i, e in pairs(session.cert_chain_errors) do |
|
48121960983e
mod_s2s: Recognise and report errors with CA or intermediate certs
Kim Alvefur <zash@zash.se>
parents:
12462
diff
changeset
|
1043 if i > 2 then chain_errors:add_list(e); end |
|
48121960983e
mod_s2s: Recognise and report errors with CA or intermediate certs
Kim Alvefur <zash@zash.se>
parents:
12462
diff
changeset
|
1044 end |
|
48121960983e
mod_s2s: Recognise and report errors with CA or intermediate certs
Kim Alvefur <zash@zash.se>
parents:
12462
diff
changeset
|
1045 if chain_errors:contains("certificate has expired") then |
|
48121960983e
mod_s2s: Recognise and report errors with CA or intermediate certs
Kim Alvefur <zash@zash.se>
parents:
12462
diff
changeset
|
1046 return "has an expired certificate chain"; |
|
13253
68d540df46b8
mod_s2s: Fix reporting of DANE mismatch
Kim Alvefur <zash@zash.se>
parents:
13213
diff
changeset
|
1047 elseif chain_errors:contains("no matching DANE TLSA records") then |
|
12473
bb85be686a01
mod_s2s: Distinguish DANE TLSA errors from generic cert chain errors
Kim Alvefur <zash@zash.se>
parents:
12472
diff
changeset
|
1048 return "does not match any DANE TLSA records"; |
|
12472
48121960983e
mod_s2s: Recognise and report errors with CA or intermediate certs
Kim Alvefur <zash@zash.se>
parents:
12462
diff
changeset
|
1049 end |
|
10455
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1050 end |
|
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1051 return "is not trusted"; -- for some other reason |
|
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1052 elseif session.cert_identity_status == "invalid" then |
|
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1053 return "is not valid for this name"; |
|
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1054 end |
|
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1055 -- this should normally be unreachable except if no s2s auth module was loaded |
|
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1056 return "could not be validated"; |
|
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1057 end |
|
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1058 |
|
5363
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
1059 function check_auth_policy(event) |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
1060 local host, session = event.host, event.session; |
|
5368
ab31dbb3a415
mod_s2s: Fix variable usage in check_auth_policy (thanks Florob)
Matthew Wild <mwild1@gmail.com>
parents:
5365
diff
changeset
|
1061 local must_secure = secure_auth; |
|
ab31dbb3a415
mod_s2s: Fix variable usage in check_auth_policy (thanks Florob)
Matthew Wild <mwild1@gmail.com>
parents:
5365
diff
changeset
|
1062 |
|
ab31dbb3a415
mod_s2s: Fix variable usage in check_auth_policy (thanks Florob)
Matthew Wild <mwild1@gmail.com>
parents:
5365
diff
changeset
|
1063 if not must_secure and secure_domains[host] then |
|
ab31dbb3a415
mod_s2s: Fix variable usage in check_auth_policy (thanks Florob)
Matthew Wild <mwild1@gmail.com>
parents:
5365
diff
changeset
|
1064 must_secure = true; |
|
ab31dbb3a415
mod_s2s: Fix variable usage in check_auth_policy (thanks Florob)
Matthew Wild <mwild1@gmail.com>
parents:
5365
diff
changeset
|
1065 elseif must_secure and insecure_domains[host] then |
|
ab31dbb3a415
mod_s2s: Fix variable usage in check_auth_policy (thanks Florob)
Matthew Wild <mwild1@gmail.com>
parents:
5365
diff
changeset
|
1066 must_secure = false; |
|
5363
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
1067 end |
|
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5770
diff
changeset
|
1068 |
| 5767 | 1069 if must_secure and (session.cert_chain_status ~= "valid" or session.cert_identity_status ~= "valid") then |
|
10455
698ff3610e57
mod_s2s: Improve error in bounces due to cert validation problems
Kim Alvefur <zash@zash.se>
parents:
10426
diff
changeset
|
1070 local reason = friendly_cert_error(session); |
|
10472
676e6a1b23d4
mod_s2s: Log from session logger
Kim Alvefur <zash@zash.se>
parents:
10471
diff
changeset
|
1071 session.log("warn", "Forbidding insecure connection to/from %s because its certificate %s", host or session.ip or "(unknown host)", reason); |
|
10456
2ab1cbb1c6b0
mod_s2s: Send stream errors for cert problems on outgoing connections
Kim Alvefur <zash@zash.se>
parents:
10455
diff
changeset
|
1072 -- XEP-0178 recommends closing outgoing connections without warning |
|
2ab1cbb1c6b0
mod_s2s: Send stream errors for cert problems on outgoing connections
Kim Alvefur <zash@zash.se>
parents:
10455
diff
changeset
|
1073 -- but does not give a rationale for this. |
|
2ab1cbb1c6b0
mod_s2s: Send stream errors for cert problems on outgoing connections
Kim Alvefur <zash@zash.se>
parents:
10455
diff
changeset
|
1074 -- In practice most cases are configuration mistakes or forgotten |
|
2ab1cbb1c6b0
mod_s2s: Send stream errors for cert problems on outgoing connections
Kim Alvefur <zash@zash.se>
parents:
10455
diff
changeset
|
1075 -- certificate renewals. We think it's better to let the other party |
|
2ab1cbb1c6b0
mod_s2s: Send stream errors for cert problems on outgoing connections
Kim Alvefur <zash@zash.se>
parents:
10455
diff
changeset
|
1076 -- know about the problem so that they can fix it. |
|
13444
783706350faa
mod_s2s: Comment on why we avoid hostnames in stanza bounce messages
Kim Alvefur <zash@zash.se>
parents:
13382
diff
changeset
|
1077 -- |
|
783706350faa
mod_s2s: Comment on why we avoid hostnames in stanza bounce messages
Kim Alvefur <zash@zash.se>
parents:
13382
diff
changeset
|
1078 -- Note: Bounce message must not include name of server, as it may leak half your JID in semi-anon MUCs. |
|
10456
2ab1cbb1c6b0
mod_s2s: Send stream errors for cert problems on outgoing connections
Kim Alvefur <zash@zash.se>
parents:
10455
diff
changeset
|
1079 session:close({ condition = "not-authorized", text = "Your server's certificate "..reason }, |
|
2ab1cbb1c6b0
mod_s2s: Send stream errors for cert problems on outgoing connections
Kim Alvefur <zash@zash.se>
parents:
10455
diff
changeset
|
1080 nil, "Remote server's certificate "..reason); |
|
5363
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
1081 return false; |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
1082 end |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
1083 end |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
1084 |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
1085 module:hook("s2s-check-certificate", check_auth_policy, -1); |
|
f29c26da7ecc
mod_s2s: Add controls for certificate validation via the s2s_secure_auth option. Plugins can now return false from handling s2s-check-certificate to prevent connection establishment (s2sin+s2sout)
Matthew Wild <mwild1@gmail.com>
parents:
5362
diff
changeset
|
1086 |
|
14021
d4a7cc295363
mod_s2s: Report outgoing connection failures to remote servers
Kim Alvefur <zash@zash.se>
parents:
13987
diff
changeset
|
1087 -- When an outgoing connection fails, close a corresponding incoming connection with a stream error to indicate the problem to the remote |
|
d4a7cc295363
mod_s2s: Report outgoing connection failures to remote servers
Kim Alvefur <zash@zash.se>
parents:
13987
diff
changeset
|
1088 module:hook("s2s-destroyed", function(event) |
|
d4a7cc295363
mod_s2s: Report outgoing connection failures to remote servers
Kim Alvefur <zash@zash.se>
parents:
13987
diff
changeset
|
1089 local s2sout = event.session; |
|
d4a7cc295363
mod_s2s: Report outgoing connection failures to remote servers
Kim Alvefur <zash@zash.se>
parents:
13987
diff
changeset
|
1090 if s2sout.type ~= "s2sout_unauthed" then return end |
|
d4a7cc295363
mod_s2s: Report outgoing connection failures to remote servers
Kim Alvefur <zash@zash.se>
parents:
13987
diff
changeset
|
1091 for s2sin in pairs(prosody.incoming_s2s) do |
|
d4a7cc295363
mod_s2s: Report outgoing connection failures to remote servers
Kim Alvefur <zash@zash.se>
parents:
13987
diff
changeset
|
1092 if s2sin.from_host == s2sout.to_host and s2sin.to_host == s2sout.from_host then |
|
d4a7cc295363
mod_s2s: Report outgoing connection failures to remote servers
Kim Alvefur <zash@zash.se>
parents:
13987
diff
changeset
|
1093 s2sin:close(errors.new({ condition = "reset", text = "Could not deliver return stanzas, please check your DNS and firewall" })); |
|
d4a7cc295363
mod_s2s: Report outgoing connection failures to remote servers
Kim Alvefur <zash@zash.se>
parents:
13987
diff
changeset
|
1094 end |
|
d4a7cc295363
mod_s2s: Report outgoing connection failures to remote servers
Kim Alvefur <zash@zash.se>
parents:
13987
diff
changeset
|
1095 end |
|
d4a7cc295363
mod_s2s: Report outgoing connection failures to remote servers
Kim Alvefur <zash@zash.se>
parents:
13987
diff
changeset
|
1096 end); |
|
d4a7cc295363
mod_s2s: Report outgoing connection failures to remote servers
Kim Alvefur <zash@zash.se>
parents:
13987
diff
changeset
|
1097 |
|
5281
815c689f85ad
prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents:
5274
diff
changeset
|
1098 module:hook("server-stopping", function(event) |
|
12298
cb459f8fa740
mod_c2s,mod_s2s: Disable and close port listeners before closing sessions
Kim Alvefur <zash@zash.se>
parents:
12280
diff
changeset
|
1099 -- Close ports |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12811
diff
changeset
|
1100 local pm = require "prosody.core.portmanager"; |
|
12298
cb459f8fa740
mod_c2s,mod_s2s: Disable and close port listeners before closing sessions
Kim Alvefur <zash@zash.se>
parents:
12280
diff
changeset
|
1101 for _, netservice in pairs(module.items["net-provider"]) do |
|
cb459f8fa740
mod_c2s,mod_s2s: Disable and close port listeners before closing sessions
Kim Alvefur <zash@zash.se>
parents:
12280
diff
changeset
|
1102 pm.unregister_service(netservice.name, netservice); |
|
cb459f8fa740
mod_c2s,mod_s2s: Disable and close port listeners before closing sessions
Kim Alvefur <zash@zash.se>
parents:
12280
diff
changeset
|
1103 end |
|
cb459f8fa740
mod_c2s,mod_s2s: Disable and close port listeners before closing sessions
Kim Alvefur <zash@zash.se>
parents:
12280
diff
changeset
|
1104 |
|
12299
ff36ac5c7d2b
mod_s2s: Disable creation of new outgoing connections during shutdown
Kim Alvefur <zash@zash.se>
parents:
12298
diff
changeset
|
1105 -- Stop opening new connections |
|
ff36ac5c7d2b
mod_s2s: Disable creation of new outgoing connections during shutdown
Kim Alvefur <zash@zash.se>
parents:
12298
diff
changeset
|
1106 for host in pairs(prosody.hosts) do |
|
ff36ac5c7d2b
mod_s2s: Disable creation of new outgoing connections during shutdown
Kim Alvefur <zash@zash.se>
parents:
12298
diff
changeset
|
1107 if prosody.hosts[host].modules.s2s then |
|
ff36ac5c7d2b
mod_s2s: Disable creation of new outgoing connections during shutdown
Kim Alvefur <zash@zash.se>
parents:
12298
diff
changeset
|
1108 module:context(host):unhook("route/remote", route_to_new_session); |
|
ff36ac5c7d2b
mod_s2s: Disable creation of new outgoing connections during shutdown
Kim Alvefur <zash@zash.se>
parents:
12298
diff
changeset
|
1109 end |
|
ff36ac5c7d2b
mod_s2s: Disable creation of new outgoing connections during shutdown
Kim Alvefur <zash@zash.se>
parents:
12298
diff
changeset
|
1110 end |
|
ff36ac5c7d2b
mod_s2s: Disable creation of new outgoing connections during shutdown
Kim Alvefur <zash@zash.se>
parents:
12298
diff
changeset
|
1111 |
|
12311
bc30e1b9ad89
mod_c2s,mod_s2s: Fix error on shutdown (Thanks Martin)
Kim Alvefur <zash@zash.se>
parents:
12309
diff
changeset
|
1112 local wait, done = async.waiter(1, true); |
|
12301
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
1113 module:hook("s2s-closed", function () |
|
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
1114 if next(sessions) == nil then done(); end |
|
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
1115 end, 1) |
|
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
1116 |
|
12298
cb459f8fa740
mod_c2s,mod_s2s: Disable and close port listeners before closing sessions
Kim Alvefur <zash@zash.se>
parents:
12280
diff
changeset
|
1117 -- Close sessions |
|
5281
815c689f85ad
prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents:
5274
diff
changeset
|
1118 local reason = event.reason; |
|
815c689f85ad
prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents:
5274
diff
changeset
|
1119 for _, session in pairs(sessions) do |
|
815c689f85ad
prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents:
5274
diff
changeset
|
1120 session:close{ condition = "system-shutdown", text = reason }; |
|
815c689f85ad
prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents:
5274
diff
changeset
|
1121 end |
|
12301
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
1122 |
|
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
1123 -- Wait for them to close properly if they haven't already |
|
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
1124 if next(sessions) ~= nil then |
|
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
1125 module:log("info", "Waiting for sessions to close"); |
|
12309
926a6c5d13e7
mod_c2s,mod_s2s: Wrap callback to improve tracebacks
Kim Alvefur <zash@zash.se>
parents:
12301
diff
changeset
|
1126 add_task(stream_close_timeout + 1, function () done() end); |
|
12301
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
1127 wait(); |
|
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
1128 end |
|
4f1fe6eb1ddb
mod_c2s,mod_s2s: Wait for sessions to close before proceeding with shutdown steps
Kim Alvefur <zash@zash.se>
parents:
12299
diff
changeset
|
1129 |
|
7100
301d58705667
mod_c2s, mod_s2s: Lower priority of session shutdown to negative, so that plugins hooking at the default priority run first (fixes #601)
Kim Alvefur <zash@zash.se>
parents:
6684
diff
changeset
|
1130 end, -200); |
|
5281
815c689f85ad
prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents:
5274
diff
changeset
|
1131 |
|
815c689f85ad
prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents:
5274
diff
changeset
|
1132 |
|
815c689f85ad
prosody, mod_c2s, mod_s2s: Move closing of c2s and s2s sessions to respective plugins
Kim Alvefur <zash@zash.se>
parents:
5274
diff
changeset
|
1133 |
|
5120
bcabea740c00
mod_{admin_telnet,c2s,component,http,net_multiplex,s2s}: Use module:provides() instead of module:add_item().
Waqas Hussain <waqas20@gmail.com>
parents:
5013
diff
changeset
|
1134 module:provides("net", { |
|
4610
171051f9dd00
mod_c2s: Use module:add_item() to add the net-provider for portmanager
Matthew Wild <mwild1@gmail.com>
parents:
4601
diff
changeset
|
1135 name = "s2s"; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1136 listener = listener; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1137 default_port = 5269; |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1138 encryption = "starttls"; |
|
11367
9525c4b4e5de
mod_s2s: Clarify comment about unused TLS settings
Kim Alvefur <zash@zash.se>
parents:
11238
diff
changeset
|
1139 ssl_config = { |
|
9525c4b4e5de
mod_s2s: Clarify comment about unused TLS settings
Kim Alvefur <zash@zash.se>
parents:
11238
diff
changeset
|
1140 -- FIXME This only applies to Direct TLS, which we don't use yet. |
|
9525c4b4e5de
mod_s2s: Clarify comment about unused TLS settings
Kim Alvefur <zash@zash.se>
parents:
11238
diff
changeset
|
1141 -- This gets applied for real in mod_tls |
|
9852
6ea3cafb6ac3
core.certmanager: Do not ask for client certificates by default
Kim Alvefur <zash@zash.se>
parents:
9784
diff
changeset
|
1142 verify = { "peer", "client_once", }; |
|
13703
99d2100d2918
core.certmanager: Move LuaSec verification tweaks to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
13575
diff
changeset
|
1143 verifyext = { |
|
99d2100d2918
core.certmanager: Move LuaSec verification tweaks to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
13575
diff
changeset
|
1144 "lsec_continue", -- Continue past certificate verification errors |
|
99d2100d2918
core.certmanager: Move LuaSec verification tweaks to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
13575
diff
changeset
|
1145 "lsec_ignore_purpose", -- Validate client certificates as if they were server certificates |
|
99d2100d2918
core.certmanager: Move LuaSec verification tweaks to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
13575
diff
changeset
|
1146 }; |
|
9852
6ea3cafb6ac3
core.certmanager: Do not ask for client certificates by default
Kim Alvefur <zash@zash.se>
parents:
9784
diff
changeset
|
1147 }; |
|
4620
e9dc6ae68c69
mod_c2s, mod_s2s: Add multiplex support
Matthew Wild <mwild1@gmail.com>
parents:
4610
diff
changeset
|
1148 multiplex = { |
|
10465
09697a673015
mod_net_multiplex: Add support for using ALPN
Kim Alvefur <zash@zash.se>
parents:
10459
diff
changeset
|
1149 protocol = "xmpp-server"; |
|
4620
e9dc6ae68c69
mod_c2s, mod_s2s: Add multiplex support
Matthew Wild <mwild1@gmail.com>
parents:
4610
diff
changeset
|
1150 pattern = "^<.*:stream.*%sxmlns%s*=%s*(['\"])jabber:server%1.*>"; |
|
e9dc6ae68c69
mod_c2s, mod_s2s: Add multiplex support
Matthew Wild <mwild1@gmail.com>
parents:
4610
diff
changeset
|
1151 }; |
|
4555
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1152 }); |
|
3dce04129693
s2smanager, mod_s2s, mod_s2s/s2sout: Split connection handling out of s2smanager into mod_s2s, and further split connection logic for s2sout to a module lib, s2sout.lib.lua
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1153 |
|
11774
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1154 |
|
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1155 module:provides("net", { |
|
11775
af9c7f3f4735
mod_s2s: Rename Direct TLS listener 's2s_direct_tls'
Kim Alvefur <zash@zash.se>
parents:
11774
diff
changeset
|
1156 name = "s2s_direct_tls"; |
|
11774
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1157 listener = listener; |
|
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1158 encryption = "ssl"; |
|
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1159 ssl_config = { |
|
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1160 verify = { "peer", "client_once", }; |
|
13703
99d2100d2918
core.certmanager: Move LuaSec verification tweaks to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
13575
diff
changeset
|
1161 verifyext = { |
|
99d2100d2918
core.certmanager: Move LuaSec verification tweaks to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
13575
diff
changeset
|
1162 "lsec_continue", -- Continue past certificate verification errors |
|
99d2100d2918
core.certmanager: Move LuaSec verification tweaks to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
13575
diff
changeset
|
1163 "lsec_ignore_purpose", -- Validate client certificates as if they were server certificates |
|
99d2100d2918
core.certmanager: Move LuaSec verification tweaks to mod_s2s
Kim Alvefur <zash@zash.se>
parents:
13575
diff
changeset
|
1164 }; |
|
11774
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1165 }; |
|
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1166 multiplex = { |
|
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1167 protocol = "xmpp-server"; |
|
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1168 pattern = "^<.*:stream.*%sxmlns%s*=%s*(['\"])jabber:server%1.*>"; |
|
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1169 }; |
|
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1170 }); |
|
4625093b0768
mod_s2s: Add a Direct TLS listener
Kim Alvefur <zash@zash.se>
parents:
11773
diff
changeset
|
1171 |
