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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
fa48e69c4786 core: hosts[*].events
Waqas Hussain <waqas20@gmail.com>
parents: 1095
diff changeset
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 }