Software /
code /
prosody
Annotate
core/hostmanager.lua @ 8791:8da11142fabf
muc: Allow clients to change multiple affiliations or roles at once (#345)
According to XEP-0045 sections 9.2, 9.5 and 9.8 affiliation lists and role
lists should allow mass-modification. Prosody however would just use the
first entry of the list and ignore the rest. This is fixed by introducing
a `for` loop to `set` stanzas of the respective `muc#admin` namespace.
In order for this loop to work, the error handling was changed a little.
Prosody no longer returns after the first error. Instead, an error reply
is sent for each malformed or otherwise wrong entry, but the loop keeps
going over the other entries. This may lead to multiple error messages
being sent for one client request. A notable exception from this is when
the XML Schema for `muc#admin` requests is violated. In that case the loop
is aborted with an error message to the client.
The change is a bit bigger than that in order to have the loop only for
`set` stanzas without changing the behaviour of the `get` stanzas. This is
now more in line with trunk, where there are separate methods for each
stanza type.
References: #345
author | Lennart Sauerbeck <devel@lennart.sauerbeck.org> |
---|---|
date | Sat, 18 Mar 2017 18:47:28 +0100 |
parent | 8559:d5d746e4c453 |
child | 8561:7b9ffddc4276 |
rev | line source |
---|---|
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1467
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2877
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2877
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5377
diff
changeset
|
4 -- |
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1467
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1467
diff
changeset
|
6 -- COPYING file in the source package for more information. |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1467
diff
changeset
|
7 -- |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1467
diff
changeset
|
8 |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 local configmanager = require "core.configmanager"; |
1975
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
10 local modulemanager = require "core.modulemanager"; |
1188 | 11 local events_new = require "util.events".new; |
3599
adc0b4df6fdd
hostmanager: Added function get_children(host) which copies componentmanager.get_children(host).
Waqas Hussain <waqas20@gmail.com>
parents:
3597
diff
changeset
|
12 local disco_items = require "util.multitable".new(); |
adc0b4df6fdd
hostmanager: Added function get_children(host) which copies componentmanager.get_children(host).
Waqas Hussain <waqas20@gmail.com>
parents:
3597
diff
changeset
|
13 local NULL = {}; |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
14 |
4502
dd1eaecc11f9
hostmanager: Import jid_split (thanks chris)
Matthew Wild <mwild1@gmail.com>
parents:
4460
diff
changeset
|
15 local jid_split = require "util.jid".split; |
2420
6ccd36a95a81
s2smanager, hostmanager: Make dialback secrets per-host
Matthew Wild <mwild1@gmail.com>
parents:
2321
diff
changeset
|
16 |
3434
428f13c098d5
hostmanager: Remove dependency on eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
2984
diff
changeset
|
17 local log = require "util.logger".init("hostmanager"); |
428f13c098d5
hostmanager: Remove dependency on eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
2984
diff
changeset
|
18 |
5360
e44cfbf0ae8d
hostmanager: Use prosody.hosts instead of 'hosts' global
Matthew Wild <mwild1@gmail.com>
parents:
5357
diff
changeset
|
19 local hosts = prosody.hosts; |
3434
428f13c098d5
hostmanager: Remove dependency on eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
2984
diff
changeset
|
20 local prosody_events = prosody.events; |
1975
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
21 if not _G.prosody.incoming_s2s then |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
22 require "core.s2smanager"; |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
23 end |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
24 local incoming_s2s = _G.prosody.incoming_s2s; |
5347
32e25358c3c2
hostmanager: Import core_post_stanza from the global prosody table
Kim Alvefur <zash@zash.se>
parents:
5123
diff
changeset
|
25 local core_route_stanza = _G.prosody.core_route_stanza; |
1975
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
26 |
5361
38e7a5fafb28
hostmanager: Use rawget to check for activated hosts to prevent recursion in dynamic host loaders
Matthew Wild <mwild1@gmail.com>
parents:
5360
diff
changeset
|
27 local pairs, select, rawget = pairs, select, rawget; |
3717
135128fdf565
hostmanager: Improved error handling.
Waqas Hussain <waqas20@gmail.com>
parents:
3716
diff
changeset
|
28 local tostring, type = tostring, type; |
6706
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
29 local setmetatable = setmetatable; |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 |
6779
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6706
diff
changeset
|
31 local _ENV = nil; |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 |
6706
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
33 local host_mt = { } |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
34 function host_mt:__tostring() |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
35 if self.type == "component" then |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
36 local typ = configmanager.get(self.host, "component_module"); |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
37 if typ == "component" then |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
38 return ("Component %q"):format(self.host); |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
39 end |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
40 return ("Component %q %q"):format(self.host, typ); |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
41 elseif self.type == "local" then |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
42 return ("VirtualHost %q"):format(self.host); |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
43 end |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
44 end |
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
45 |
1095
cad4205f4925
hostmanager: Reduce log output at startup to 'debug'
Matthew Wild <mwild1@gmail.com>
parents:
749
diff
changeset
|
46 local hosts_loaded_once; |
cad4205f4925
hostmanager: Reduce log output at startup to 'debug'
Matthew Wild <mwild1@gmail.com>
parents:
749
diff
changeset
|
47 |
6779
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6706
diff
changeset
|
48 local activate, deactivate; |
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6706
diff
changeset
|
49 |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
50 local function load_enabled_hosts(config) |
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 local defined_hosts = config or configmanager.getconfig(); |
2855
66a1aa0bedc0
hostmanager: Log an error if no hosts are defined
Matthew Wild <mwild1@gmail.com>
parents:
1980
diff
changeset
|
52 local activated_any_host; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5377
diff
changeset
|
53 |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 for host, host_config in pairs(defined_hosts) do |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5347
diff
changeset
|
55 if host ~= "*" and host_config.enabled ~= false then |
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5347
diff
changeset
|
56 if not host_config.component_module then |
3597
8090880f0e18
hostmanager, componentmanager: hostmanager now handles component initialization at server start, not componentmanager.
Waqas Hussain <waqas20@gmail.com>
parents:
3594
diff
changeset
|
57 activated_any_host = true; |
8090880f0e18
hostmanager, componentmanager: hostmanager now handles component initialization at server start, not componentmanager.
Waqas Hussain <waqas20@gmail.com>
parents:
3594
diff
changeset
|
58 end |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
59 activate(host, host_config); |
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 end |
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5377
diff
changeset
|
62 |
2855
66a1aa0bedc0
hostmanager: Log an error if no hosts are defined
Matthew Wild <mwild1@gmail.com>
parents:
1980
diff
changeset
|
63 if not activated_any_host then |
2981
15a7afea7f59
hostmanager: Re-word log messages in line with config changes
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
64 log("error", "No active VirtualHost entries in the config file. This may cause unexpected behaviour as no modules will be loaded."); |
2855
66a1aa0bedc0
hostmanager: Log an error if no hosts are defined
Matthew Wild <mwild1@gmail.com>
parents:
1980
diff
changeset
|
65 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5377
diff
changeset
|
66 |
3434
428f13c098d5
hostmanager: Remove dependency on eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
2984
diff
changeset
|
67 prosody_events.fire_event("hosts-activated", defined_hosts); |
1095
cad4205f4925
hostmanager: Reduce log output at startup to 'debug'
Matthew Wild <mwild1@gmail.com>
parents:
749
diff
changeset
|
68 hosts_loaded_once = true; |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 end |
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 |
3434
428f13c098d5
hostmanager: Remove dependency on eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
2984
diff
changeset
|
71 prosody_events.add_handler("server-starting", load_enabled_hosts); |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 |
4460
a813a130cede
hostmanager: Add send() method to hosts
Matthew Wild <mwild1@gmail.com>
parents:
3984
diff
changeset
|
73 local function host_send(stanza) |
6618
469151b08065
hostmanager: Rename variable to avoid shadowing 'type()' function
Matthew Wild <mwild1@gmail.com>
parents:
6548
diff
changeset
|
74 local name, stanza_type = stanza.name, stanza.attr.type; |
469151b08065
hostmanager: Rename variable to avoid shadowing 'type()' function
Matthew Wild <mwild1@gmail.com>
parents:
6548
diff
changeset
|
75 if stanza_type == "error" or (name == "iq" and stanza_type == "result") then |
4460
a813a130cede
hostmanager: Add send() method to hosts
Matthew Wild <mwild1@gmail.com>
parents:
3984
diff
changeset
|
76 local dest_host_name = select(2, jid_split(stanza.attr.to)); |
a813a130cede
hostmanager: Add send() method to hosts
Matthew Wild <mwild1@gmail.com>
parents:
3984
diff
changeset
|
77 local dest_host = hosts[dest_host_name] or { type = "unknown" }; |
a813a130cede
hostmanager: Add send() method to hosts
Matthew Wild <mwild1@gmail.com>
parents:
3984
diff
changeset
|
78 log("warn", "Unhandled response sent to %s host %s: %s", dest_host.type, dest_host_name, tostring(stanza)); |
a813a130cede
hostmanager: Add send() method to hosts
Matthew Wild <mwild1@gmail.com>
parents:
3984
diff
changeset
|
79 return; |
a813a130cede
hostmanager: Add send() method to hosts
Matthew Wild <mwild1@gmail.com>
parents:
3984
diff
changeset
|
80 end |
a813a130cede
hostmanager: Add send() method to hosts
Matthew Wild <mwild1@gmail.com>
parents:
3984
diff
changeset
|
81 core_route_stanza(nil, stanza); |
a813a130cede
hostmanager: Add send() method to hosts
Matthew Wild <mwild1@gmail.com>
parents:
3984
diff
changeset
|
82 end |
a813a130cede
hostmanager: Add send() method to hosts
Matthew Wild <mwild1@gmail.com>
parents:
3984
diff
changeset
|
83 |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 function activate(host, host_config) |
5361
38e7a5fafb28
hostmanager: Use rawget to check for activated hosts to prevent recursion in dynamic host loaders
Matthew Wild <mwild1@gmail.com>
parents:
5360
diff
changeset
|
85 if rawget(hosts, host) then return nil, "The host "..host.." is already activated"; end |
3715
d7574530572c
hostmanager: activate() now gets the host config from configmanager when a config isn't given.
Waqas Hussain <waqas20@gmail.com>
parents:
3601
diff
changeset
|
86 host_config = host_config or configmanager.getconfig()[host]; |
3717
135128fdf565
hostmanager: Improved error handling.
Waqas Hussain <waqas20@gmail.com>
parents:
3716
diff
changeset
|
87 if not host_config then return nil, "Couldn't find the host "..tostring(host).." defined in the current config"; end |
3594
d3b57562cd87
hostmanager: Added support for components to hostmanager.activate().
Waqas Hussain <waqas20@gmail.com>
parents:
3587
diff
changeset
|
88 local host_session = { |
d3b57562cd87
hostmanager: Added support for components to hostmanager.activate().
Waqas Hussain <waqas20@gmail.com>
parents:
3587
diff
changeset
|
89 host = host; |
d3b57562cd87
hostmanager: Added support for components to hostmanager.activate().
Waqas Hussain <waqas20@gmail.com>
parents:
3587
diff
changeset
|
90 s2sout = {}; |
d3b57562cd87
hostmanager: Added support for components to hostmanager.activate().
Waqas Hussain <waqas20@gmail.com>
parents:
3587
diff
changeset
|
91 events = events_new(); |
4460
a813a130cede
hostmanager: Add send() method to hosts
Matthew Wild <mwild1@gmail.com>
parents:
3984
diff
changeset
|
92 send = host_send; |
5123
7c5c86fa552e
hostmanager, modulemanager: Ensure hosts[*].modules always exists.
Waqas Hussain <waqas20@gmail.com>
parents:
5081
diff
changeset
|
93 modules = {}; |
3594
d3b57562cd87
hostmanager: Added support for components to hostmanager.activate().
Waqas Hussain <waqas20@gmail.com>
parents:
3587
diff
changeset
|
94 }; |
8559
d5d746e4c453
hostmanager: Add a logging close method in case something tries to close the origin of local-originated stanzas (see #1084)
Kim Alvefur <zash@zash.se>
parents:
8251
diff
changeset
|
95 function host_session:close(reason) |
d5d746e4c453
hostmanager: Add a logging close method in case something tries to close the origin of local-originated stanzas (see #1084)
Kim Alvefur <zash@zash.se>
parents:
8251
diff
changeset
|
96 log("debug", "Attempt to close host session %s with reason: %s", self.host, reason); |
d5d746e4c453
hostmanager: Add a logging close method in case something tries to close the origin of local-originated stanzas (see #1084)
Kim Alvefur <zash@zash.se>
parents:
8251
diff
changeset
|
97 end |
6706
60c692828cf6
hostmanager: Metatable with __tostring on hosts
Kim Alvefur <zash@zash.se>
parents:
6618
diff
changeset
|
98 setmetatable(host_session, host_mt); |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5347
diff
changeset
|
99 if not host_config.component_module then -- host |
3594
d3b57562cd87
hostmanager: Added support for components to hostmanager.activate().
Waqas Hussain <waqas20@gmail.com>
parents:
3587
diff
changeset
|
100 host_session.type = "local"; |
d3b57562cd87
hostmanager: Added support for components to hostmanager.activate().
Waqas Hussain <waqas20@gmail.com>
parents:
3587
diff
changeset
|
101 host_session.sessions = {}; |
d3b57562cd87
hostmanager: Added support for components to hostmanager.activate().
Waqas Hussain <waqas20@gmail.com>
parents:
3587
diff
changeset
|
102 else -- component |
d3b57562cd87
hostmanager: Added support for components to hostmanager.activate().
Waqas Hussain <waqas20@gmail.com>
parents:
3587
diff
changeset
|
103 host_session.type = "component"; |
d3b57562cd87
hostmanager: Added support for components to hostmanager.activate().
Waqas Hussain <waqas20@gmail.com>
parents:
3587
diff
changeset
|
104 end |
d3b57562cd87
hostmanager: Added support for components to hostmanager.activate().
Waqas Hussain <waqas20@gmail.com>
parents:
3587
diff
changeset
|
105 hosts[host] = host_session; |
8251
cb2d86f4b511
hostmanager: Add support for 'disco_hidden' option to hide hosts from disco#items (thanks Ge0rG)
Matthew Wild <mwild1@gmail.com>
parents:
6779
diff
changeset
|
106 if not host_config.disco_hidden and not host:match("[@/]") then |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5347
diff
changeset
|
107 disco_items:set(host:match("%.(.*)") or "*", host, host_config.name or true); |
3601
829e23b374cc
hostmanager: Don't include hosts with '@' or '/' in the name in the get_children(host) result.
Waqas Hussain <waqas20@gmail.com>
parents:
3599
diff
changeset
|
108 end |
5357
ac530c44772e
configmanager, hostmanager, prosody: Almost complete removal of section-related code, and the infamous 'core' section. Still backwards-compatible with API users.
Matthew Wild <mwild1@gmail.com>
parents:
5347
diff
changeset
|
109 for option_name in pairs(host_config) do |
2981
15a7afea7f59
hostmanager: Re-word log messages in line with config changes
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
110 if option_name:match("_ports$") or option_name:match("_interface$") then |
15a7afea7f59
hostmanager: Re-word log messages in line with config changes
Matthew Wild <mwild1@gmail.com>
parents:
2923
diff
changeset
|
111 log("warn", "%s: Option '%s' has no effect for virtual hosts - put it in the server-wide section instead", host, option_name); |
1614
951ed38ad64f
hostmanager: Warn when user puts port configuration under vhost section
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
112 end |
951ed38ad64f
hostmanager: Warn when user puts port configuration under vhost section
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
113 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5377
diff
changeset
|
114 |
1095
cad4205f4925
hostmanager: Reduce log output at startup to 'debug'
Matthew Wild <mwild1@gmail.com>
parents:
749
diff
changeset
|
115 log((hosts_loaded_once and "info") or "debug", "Activated host: %s", host); |
4732
29ff25c8bf56
hostmanager: Remove unused host_config parameter from host-activated event
Matthew Wild <mwild1@gmail.com>
parents:
4731
diff
changeset
|
116 prosody_events.fire_event("host-activated", host); |
3597
8090880f0e18
hostmanager, componentmanager: hostmanager now handles component initialization at server start, not componentmanager.
Waqas Hussain <waqas20@gmail.com>
parents:
3594
diff
changeset
|
117 return true; |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 end |
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 |
1975
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
120 function deactivate(host, reason) |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 local host_session = hosts[host]; |
3717
135128fdf565
hostmanager: Improved error handling.
Waqas Hussain <waqas20@gmail.com>
parents:
3716
diff
changeset
|
122 if not host_session then return nil, "The host "..tostring(host).." is not activated"; end |
575
428c951d0a33
Log in hostmanager when a vhost is activated/deactivated
Matthew Wild <mwild1@gmail.com>
parents:
569
diff
changeset
|
123 log("info", "Deactivating host: %s", host); |
4730
2587e249927f
hostmanager: Convert host-deactivating event parameters to a table
Matthew Wild <mwild1@gmail.com>
parents:
4508
diff
changeset
|
124 prosody_events.fire_event("host-deactivating", { host = host, host_session = host_session, reason = reason }); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5377
diff
changeset
|
125 |
3717
135128fdf565
hostmanager: Improved error handling.
Waqas Hussain <waqas20@gmail.com>
parents:
3716
diff
changeset
|
126 if type(reason) ~= "table" then |
135128fdf565
hostmanager: Improved error handling.
Waqas Hussain <waqas20@gmail.com>
parents:
3716
diff
changeset
|
127 reason = { condition = "host-gone", text = tostring(reason or "This server has stopped serving "..host) }; |
135128fdf565
hostmanager: Improved error handling.
Waqas Hussain <waqas20@gmail.com>
parents:
3716
diff
changeset
|
128 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5377
diff
changeset
|
129 |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
130 -- Disconnect local users, s2s connections |
4731
84596fc32b31
hostmanager: Add some TODO comments
Matthew Wild <mwild1@gmail.com>
parents:
4730
diff
changeset
|
131 -- TODO: These should move to mod_c2s and mod_s2s (how do they know they're being unloaded and not reloaded?) |
1975
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
132 if host_session.sessions then |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
133 for username, user in pairs(host_session.sessions) do |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
134 for resource, session in pairs(user.sessions) do |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
135 log("debug", "Closing connection for %s@%s/%s", username, host, resource); |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
136 session:close(reason); |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
137 end |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 end |
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 end |
1975
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
140 if host_session.s2sout then |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
141 for remotehost, session in pairs(host_session.s2sout) do |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
142 if session.close then |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
143 log("debug", "Closing outgoing connection to %s", remotehost); |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
144 if session.srv_hosts then session.srv_hosts = nil; end |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
145 session:close(reason); |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
146 end |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
147 end |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
148 end |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
149 for remote_session in pairs(incoming_s2s) do |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
150 if remote_session.to_host == host then |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
151 log("debug", "Closing incoming connection from %s", remote_session.from_host or "<unknown>"); |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
152 remote_session:close(reason); |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
153 end |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
154 end |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
155 |
4731
84596fc32b31
hostmanager: Add some TODO comments
Matthew Wild <mwild1@gmail.com>
parents:
4730
diff
changeset
|
156 -- TODO: This should be done in modulemanager |
1975
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
157 if host_session.modules then |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
158 for module in pairs(host_session.modules) do |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
159 modulemanager.unload(host, module); |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
160 end |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
161 end |
a9998fac292c
hostmanager: deactivate() now accepts a reason, closes s2s connections as well as disconnecting users, and unloads modules for the host
Matthew Wild <mwild1@gmail.com>
parents:
1974
diff
changeset
|
162 |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 hosts[host] = nil; |
3601
829e23b374cc
hostmanager: Don't include hosts with '@' or '/' in the name in the get_children(host) result.
Waqas Hussain <waqas20@gmail.com>
parents:
3599
diff
changeset
|
164 if not host:match("[@/]") then |
829e23b374cc
hostmanager: Don't include hosts with '@' or '/' in the name in the get_children(host) result.
Waqas Hussain <waqas20@gmail.com>
parents:
3599
diff
changeset
|
165 disco_items:remove(host:match("%.(.*)") or "*", host); |
829e23b374cc
hostmanager: Don't include hosts with '@' or '/' in the name in the get_children(host) result.
Waqas Hussain <waqas20@gmail.com>
parents:
3599
diff
changeset
|
166 end |
3434
428f13c098d5
hostmanager: Remove dependency on eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
2984
diff
changeset
|
167 prosody_events.fire_event("host-deactivated", host); |
575
428c951d0a33
Log in hostmanager when a vhost is activated/deactivated
Matthew Wild <mwild1@gmail.com>
parents:
569
diff
changeset
|
168 log("info", "Deactivated host: %s", host); |
3716
ebb2c6209e24
hostmanager: deactivate() now returns true on success.
Waqas Hussain <waqas20@gmail.com>
parents:
3715
diff
changeset
|
169 return true; |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
170 end |
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
171 |
6779
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6706
diff
changeset
|
172 local function get_children(host) |
3599
adc0b4df6fdd
hostmanager: Added function get_children(host) which copies componentmanager.get_children(host).
Waqas Hussain <waqas20@gmail.com>
parents:
3597
diff
changeset
|
173 return disco_items:get(host) or NULL; |
569
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
174 end |
5216efe6088b
Add hostmanager, and eventmanager
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
175 |
6779
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6706
diff
changeset
|
176 return { |
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6706
diff
changeset
|
177 activate = activate; |
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6706
diff
changeset
|
178 deactivate = deactivate; |
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6706
diff
changeset
|
179 get_children = get_children; |
6236668da30a
core.*: Remove use of module() function
Kim Alvefur <zash@zash.se>
parents:
6706
diff
changeset
|
180 } |