Mercurial > prosody-modules
comparison mod_roster_command/mod_roster_command.lua @ 4326:f6fdefc5c6ac
mod_roster_command: Fix subscription when the "user JID" is a bare domain.
Do not attempt to update the roster when the user is bare domain (e.g. a
component), since they don't have rosters and the attempt results in an error:
$ prosodyctl mod_roster_command subscribe proxy.example.com contact@example.com
xxxxxxxxxxFailed to execute command: Error: /usr/lib/prosody/core/rostermanager.lua:104: attempt to concatenate local 'username' (a nil value)
stack traceback:
/usr/lib/prosody/core/rostermanager.lua:104: in function 'load_roster'
/usr/lib/prosody/core/rostermanager.lua:305: in function 'set_contact_pending_out'
mod_roster_command.lua:44: in function 'subscribe'
| author | Boris Grozev <boris@jitsi.org> |
|---|---|
| date | Tue, 05 Jan 2021 13:15:00 -0600 |
| parents | 2748aa8f36e0 |
| children |
comparison
equal
deleted
inserted
replaced
| 4325:9b95241c6ae5 | 4326:f6fdefc5c6ac |
|---|---|
| 38 end | 38 end |
| 39 if hosts[user_host].users.name == "null" then | 39 if hosts[user_host].users.name == "null" then |
| 40 storagemanager.initialize_host(user_host); | 40 storagemanager.initialize_host(user_host); |
| 41 usermanager.initialize_host(user_host); | 41 usermanager.initialize_host(user_host); |
| 42 end | 42 end |
| 43 -- Update user's roster to say subscription request is pending... | 43 -- Update user's roster to say subscription request is pending. Bare hosts (e.g. components) don't have rosters. |
| 44 rostermanager.set_contact_pending_out(user_username, user_host, contact_jid); | 44 if user_username ~= nil then |
| 45 rostermanager.set_contact_pending_out(user_username, user_host, contact_jid); | |
| 46 end | |
| 45 if hosts[contact_host] then | 47 if hosts[contact_host] then |
| 46 if contact_host ~= user_host and hosts[contact_host].users.name == "null" then | 48 if contact_host ~= user_host and hosts[contact_host].users.name == "null" then |
| 47 storagemanager.initialize_host(contact_host); | 49 storagemanager.initialize_host(contact_host); |
| 48 usermanager.initialize_host(contact_host); | 50 usermanager.initialize_host(contact_host); |
| 49 end | 51 end |
| 50 -- Update contact's roster to say subscription request is pending... | 52 -- Update contact's roster to say subscription request is pending... |
| 51 rostermanager.set_contact_pending_in(contact_username, contact_host, user_jid); | 53 rostermanager.set_contact_pending_in(contact_username, contact_host, user_jid); |
| 52 -- Update contact's roster to say subscription request approved... | 54 -- Update contact's roster to say subscription request approved... |
| 53 rostermanager.subscribed(contact_username, contact_host, user_jid); | 55 rostermanager.subscribed(contact_username, contact_host, user_jid); |
| 54 -- Update user's roster to say subscription request approved... | 56 -- Update user's roster to say subscription request approved. Bare hosts (e.g. components) don't have rosters. |
| 55 rostermanager.process_inbound_subscription_approval(user_username, user_host, contact_jid); | 57 if user_username ~= nil then |
| 58 rostermanager.process_inbound_subscription_approval(user_username, user_host, contact_jid); | |
| 59 end | |
| 56 end | 60 end |
| 57 end | 61 end |
| 58 | 62 |
| 59 -- Make a mutual subscription between jid1 and jid2. Each JID will see | 63 -- Make a mutual subscription between jid1 and jid2. Each JID will see |
| 60 -- when the other one is online. | 64 -- when the other one is online. |
