Sat, 22 May 2010 05:52:24 +0500
sessionmanager: If roster loading fails during resource bind, kick the user with an internal-server-error.
core/sessionmanager.lua | file | annotate | diff | comparison | revisions |
--- a/core/sessionmanager.lua Sat May 22 05:50:47 2010 +0500 +++ b/core/sessionmanager.lua Sat May 22 05:52:24 2010 +0500 @@ -174,7 +174,19 @@ hosts[session.host].sessions[session.username].sessions[resource] = session; full_sessions[session.full_jid] = session; - session.roster = rm_load_roster(session.username, session.host); + local err; + session.roster, err = rm_load_roster(session.username, session.host); + if err then + full_sessions[session.full_jid] = nil; + hosts[session.host].sessions[session.username].sessions[resource] = nil; + session.full_jid = nil; + session.resource = nil; + if next(bare_sessions[session.username..'@'..session.host]) == nil then + bare_sessions[session.username..'@'..session.host] = nil; + hosts[session.host].sessions[session.username] = nil; + end + return nil, "cancel", "internal-server-error", "Error loading roster"; + end hosts[session.host].events.fire_event("resource-bind", {session=session});