Mercurial > prosody-hg
comparison plugins/muc/muc.lib.lua @ 8187:4d83876aac3e
MUC: Reject whitespace-only nicknames (fixes #337)
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Fri, 21 Jul 2017 00:07:34 +0200 |
| parents | f07cfc9b9b36 |
| children | d43012448c1f |
comparison
equal
deleted
inserted
replaced
| 8186:becb593ed86d | 8187:4d83876aac3e |
|---|---|
| 433 if current_nick == to then -- simple presence | 433 if current_nick == to then -- simple presence |
| 434 log("debug", "%s broadcasted presence", current_nick); | 434 log("debug", "%s broadcasted presence", current_nick); |
| 435 self._occupants[current_nick].sessions[from] = pr; | 435 self._occupants[current_nick].sessions[from] = pr; |
| 436 self:broadcast_presence(pr, from); | 436 self:broadcast_presence(pr, from); |
| 437 else -- change nick | 437 else -- change nick |
| 438 -- a MUC service MUST NOT allow empty or invisible Room Nicknames | |
| 439 -- (i.e., Room Nicknames that consist only of one or more space characters). | |
| 440 if not select(3, jid_split(nick)):find("[^ ]") then -- resourceprep turns all whitespace into 0x20 | |
| 441 module:log("debug", "Rejecting invisible nickname"); | |
| 442 origin.send(st.error_reply(stanza, "cancel", "not-allowed")); | |
| 443 return; | |
| 444 end | |
| 438 local occupant = self._occupants[current_nick]; | 445 local occupant = self._occupants[current_nick]; |
| 439 local is_multisession = next(occupant.sessions, next(occupant.sessions)); | 446 local is_multisession = next(occupant.sessions, next(occupant.sessions)); |
| 440 if self._occupants[to] or is_multisession then | 447 if self._occupants[to] or is_multisession then |
| 441 log("debug", "%s couldn't change nick", current_nick); | 448 log("debug", "%s couldn't change nick", current_nick); |
| 442 local reply = st.error_reply(stanza, "cancel", "conflict"):up(); | 449 local reply = st.error_reply(stanza, "cancel", "conflict"):up(); |
| 465 -- self:handle_to_occupant(origin, st.presence({type='unavailable', from=from, to=to}) | 472 -- self:handle_to_occupant(origin, st.presence({type='unavailable', from=from, to=to}) |
| 466 -- :tag('status'):text('Replaced by new connection'):up()); -- send unavailable | 473 -- :tag('status'):text('Replaced by new connection'):up()); -- send unavailable |
| 467 -- self:handle_to_occupant(origin, stanza); -- resend available | 474 -- self:handle_to_occupant(origin, stanza); -- resend available |
| 468 --end | 475 --end |
| 469 else -- enter room | 476 else -- enter room |
| 477 -- a MUC service MUST NOT allow empty or invisible Room Nicknames | |
| 478 -- (i.e., Room Nicknames that consist only of one or more space characters). | |
| 479 if not select(3, jid_split(nick)):find("[^ ]") then -- resourceprep turns all whitespace into 0x20 | |
| 480 module:log("debug", "Rejecting invisible nickname"); | |
| 481 origin.send(st.error_reply(stanza, "cancel", "not-allowed")); | |
| 482 return; | |
| 483 end | |
| 470 local new_nick = to; | 484 local new_nick = to; |
| 471 local is_merge; | 485 local is_merge; |
| 472 if self._occupants[to] then | 486 if self._occupants[to] then |
| 473 if jid_bare(from) ~= jid_bare(self._occupants[to].jid) then | 487 if jid_bare(from) ~= jid_bare(self._occupants[to].jid) then |
| 474 new_nick = nil; | 488 new_nick = nil; |
