diff options
author | dequis <dx@dxzone.com.ar> | 2017-11-19 21:51:16 -0300 |
---|---|---|
committer | dequis <dx@dxzone.com.ar> | 2017-11-19 21:51:16 -0300 |
commit | 49108f35b8ca7974820b9d29e31965e5f0264270 (patch) | |
tree | 5e56e86bc5ae449048544402ac1030a638c37aa4 /protocols | |
parent | f75aaac5e9c0a0ce6e19c3d167ae41acc02f95b1 (diff) |
jabber: Fix chat joins when ext_jid is provided for your own user
This is the presence needed to finalize a join to the channel, the
'from' field is our own user in the context of that channel:
<presence to="dx@server/resource" from="channel@gateway.server/dx">
<x xmlns="http://jabber.org/protocol/muc#user">
<status code="110"/>
<item jid="~dx@198.51.100.1" affiliation="none" role="participant"/>
</x>
</presence>
Bitlbee takes the stuff to <item jid="..."> as the "real" jid, as it
does for non-anonymous MUCs. It sets that to ext_jid, and uses it as the
handle internally.
In this particular case, that real jid is nonsense for us, so
imcb_chat_add_buddy() interprets that as yet another person joining the
channel, instead of the expected self-join.
This fixes it by checking if the buddy is our own user, and ignoring the
provided ext_jid in those cases.
Thanks to ivucica for reporting this, who was using Biboumi (a gateway
from XMPP to IRC)
Diffstat (limited to 'protocols')
-rw-r--r-- | protocols/jabber/conference.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/protocols/jabber/conference.c b/protocols/jabber/conference.c index b3d3f95e..6af7688d 100644 --- a/protocols/jabber/conference.c +++ b/protocols/jabber/conference.c @@ -328,6 +328,9 @@ void jabber_chat_pkt_presence(struct im_connection *ic, struct jabber_buddy *bud } } bud->flags |= JBFLAG_IS_ANONYMOUS; + } else if (bud == jc->me) { + g_free(bud->ext_jid); + bud->ext_jid = g_strdup(jd->me); } if (bud != jc->me && bud->flags & JBFLAG_IS_ANONYMOUS) { |