Software / code / prosody
Comparison
core/moduleapi.lua @ 12690:546c7e0f3f31
core.moduleapi: Check for local role-aware sessions before e.g. s2s
The condition checked for s2sin but not s2sout, so would have ignored
bidi-enabled s2sout sessions. Components as well.
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 29 Aug 2022 11:47:31 +0200 |
| parent | 12662:07424992d7fc |
| child | 12874:b9468c8ac1d3 |
comparison
equal
deleted
inserted
replaced
| 12689:1bc2220cd6ec | 12690:546c7e0f3f31 |
|---|---|
| 647 | 647 |
| 648 local session = context.origin or context.session; | 648 local session = context.origin or context.session; |
| 649 if type(session) ~= "table" then | 649 if type(session) ~= "table" then |
| 650 error("Unable to identify actor session from context"); | 650 error("Unable to identify actor session from context"); |
| 651 end | 651 end |
| 652 if session.type == "s2sin" or (session.type == "c2s" and session.host ~= self.host) then | 652 if session.role and session.type == "c2s" and session.host == self.host then |
| 653 local permit = session.role:may(action, context); | |
| 654 if not permit then | |
| 655 self:log("debug", "Access denied: session %s (%s) may not %s (not permitted by role %s)", | |
| 656 session.id, session.full_jid, action, session.role.name | |
| 657 ); | |
| 658 end | |
| 659 return permit; | |
| 660 else | |
| 653 local actor_jid = context.stanza.attr.from; | 661 local actor_jid = context.stanza.attr.from; |
| 654 local role = hosts[self.host].authz.get_jid_role(actor_jid); | 662 local role = hosts[self.host].authz.get_jid_role(actor_jid); |
| 655 if not role then | 663 if not role then |
| 656 self:log("debug", "Access denied: JID <%s> may not %s (no role found)", actor_jid, action); | 664 self:log("debug", "Access denied: JID <%s> may not %s (no role found)", actor_jid, action); |
| 657 return false; | 665 return false; |
| 659 local permit = role:may(action, context); | 667 local permit = role:may(action, context); |
| 660 if not permit then | 668 if not permit then |
| 661 self:log("debug", "Access denied: JID <%s> may not %s (not permitted by role %s)", actor_jid, action, role.name); | 669 self:log("debug", "Access denied: JID <%s> may not %s (not permitted by role %s)", actor_jid, action, role.name); |
| 662 end | 670 end |
| 663 return permit; | 671 return permit; |
| 664 elseif session.role then | |
| 665 local permit = session.role:may(action, context); | |
| 666 if not permit then | |
| 667 self:log("debug", "Access denied: session %s (%s) may not %s (not permitted by role %s)", | |
| 668 session.id, session.full_jid, action, session.role.name | |
| 669 ); | |
| 670 end | |
| 671 return permit; | |
| 672 end | 672 end |
| 673 end | 673 end |
| 674 | 674 |
| 675 return api; | 675 return api; |