Software / code / prosody
Annotate
plugins/muc/password.lib.lua @ 13792:4ea7bd7325be 13.0
core.portmanager: Restore use of per-host 'ssl' for SNI hosts. Fixes #1915.
This was an unintentional regression, as per-host 'ssl' options became valid
in 0.12 when SNI support was added for direct TLS ports. While we encourage
most people to use the simpler automatic certificate selection (and it seems
most do, given the overlooking of this bug), there are likely always going to
be use cases for manually-configured certificates.
The issue was introduced in commit 7e9ebdc75ce4 which inadvertently removed
the per-host option checking for SNI.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 29 Mar 2025 22:25:19 +0100 |
| parent | 12977:74b9e05af71e |
| rev | line source |
|---|---|
|
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
1 -- Prosody IM |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
4 -- Copyright (C) 2014 Daurnimator |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
5 -- |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
6 -- This project is MIT/X11 licensed. Please see the |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
7 -- COPYING file in the source package for more information. |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
8 -- |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
9 |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
12029
diff
changeset
|
10 local st = require "prosody.util.stanza"; |
|
6329
6b3eb1611587
mod_muc: Import util.stanza into the config handler modules that need it. Fixes #432.
Matthew Wild <mwild1@gmail.com>
parents:
6208
diff
changeset
|
11 |
|
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
12 local function get_password(room) |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
13 return room._data.password; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
14 end |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
15 |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
16 local function set_password(room, password) |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
17 if password == "" then password = nil; end |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
18 if room._data.password == password then return false; end |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
19 room._data.password = password; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
20 return true; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
21 end |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
22 |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
23 module:hook("muc-disco#info", function(event) |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
24 event.reply:tag("feature", {var = get_password(event.room) and "muc_passwordprotected" or "muc_unsecured"}):up(); |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
25 end); |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
26 |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
27 module:hook("muc-config-form", function(event) |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
28 table.insert(event.form, { |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
29 name = "muc#roomconfig_roomsecret"; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
30 type = "text-private"; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
31 label = "Password"; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
32 value = get_password(event.room) or ""; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
33 }); |
|
9035
173c0e16e704
MUC: Add sections in room config form
Matthew Wild <mwild1@gmail.com>
parents:
8997
diff
changeset
|
34 end, 90-2); |
|
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
35 |
|
6991
84e01dbb739e
MUC: Update all config form handlers to take advantage of the new per-option events
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
36 module:hook("muc-config-submitted/muc#roomconfig_roomsecret", function(event) |
|
84e01dbb739e
MUC: Update all config form handlers to take advantage of the new per-option events
Matthew Wild <mwild1@gmail.com>
parents:
6329
diff
changeset
|
37 if set_password(event.room, event.value) then |
|
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
38 event.status_codes["104"] = true; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
39 end |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
40 end); |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
41 |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
42 -- Don't allow anyone to join room unless they provide the password |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
43 module:hook("muc-occupant-pre-join", function(event) |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
44 local room, stanza = event.room, event.stanza; |
|
9455
c62c983b8be3
MUC: Check that a room password is set before verifying password supplied by user
Michel Le Bihan <michel@lebihan.pl>
parents:
9035
diff
changeset
|
45 if not get_password(room) then return end |
|
8996
2df7dc99566a
MUC/password: Rename variable for clarity [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7401
diff
changeset
|
46 local muc_x = stanza:get_child("x", "http://jabber.org/protocol/muc"); |
|
2df7dc99566a
MUC/password: Rename variable for clarity [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7401
diff
changeset
|
47 if not muc_x then return end |
|
2df7dc99566a
MUC/password: Rename variable for clarity [luacheck]
Kim Alvefur <zash@zash.se>
parents:
7401
diff
changeset
|
48 local password = muc_x:get_child_text("password", "http://jabber.org/protocol/muc"); |
|
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
49 if not password or password == "" then password = nil; end |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
50 if get_password(room) ~= password then |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
51 local from, to = stanza.attr.from, stanza.attr.to; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
52 module:log("debug", "%s couldn't join due to invalid password: %s", from, to); |
|
10447
b5fd1637f15c
MUC: Indicate origin of password related errors
Kim Alvefur <zash@zash.se>
parents:
9455
diff
changeset
|
53 local reply = st.error_reply(stanza, "auth", "not-authorized", nil, room.jid):up(); |
|
12029
631b2afa7bc1
MUC: Remove <{muc}x> tags in some errors
Kim Alvefur <zash@zash.se>
parents:
12027
diff
changeset
|
54 event.origin.send(reply); |
|
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
55 return true; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
56 end |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
57 end, -20); |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
58 |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
59 -- Add password to outgoing invite |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
60 module:hook("muc-invite", function(event) |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
61 local password = get_password(event.room); |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
62 if password then |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
63 local x = event.stanza:get_child("x", "http://jabber.org/protocol/muc#user"); |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
64 x:tag("password"):text(password):up(); |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
65 end |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
66 end); |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
67 |
|
8997
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
68 module:hook("muc-room-pre-create", function (event) |
|
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
69 local stanza, room = event.stanza, event.room; |
|
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
70 local muc_x = stanza:get_child("x", "http://jabber.org/protocol/muc"); |
|
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
71 if not muc_x then return end |
|
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
72 local password = muc_x:get_child_text("password", "http://jabber.org/protocol/muc"); |
|
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
73 set_password(room, password); |
|
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
74 end); |
|
8c4dd4375823
MUC/password: Set room password on creation if included in join stanza
Kim Alvefur <zash@zash.se>
parents:
8996
diff
changeset
|
75 |
|
6208
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
76 return { |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
77 get = get_password; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
78 set = set_password; |
|
d724289a5226
plugins/muc: Move password functions to seperate module
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
79 }; |