Opened 11 years ago

Last modified 10 years ago

#6000 new defect

Deletion of roster entries when pidgin is offline doesn't update blist.xml

Reported by: j141cjm Owned by: deryni
Milestone: Component: XMPP
Version: 2.4.2 Keywords: XMPP roster
Cc:

Description

I run an XMPP server, and centrally manage the rosters. It's a jabberd2 server (I realize other servers have better centralized roster management). It's a complicated process, first I shut down the server, then in mysql, delete everyone's roster, delete everyone from the "active" table, and edit the roster template file accordingly.

Deleting people from the active table is supposed to trigger that user's rosters are then updated from the template file next time they sign in. This works with pidgin/adium/exodus. New buddies/groups show up immediately upon next sign in. However, both pidgin/adium seem to keep old deleted entries around.

For instance, if I shutdown the server, delete everyone's roster on the server, delete them again from the active table, update the roster template file by "removing" some roster entries, these deleted buddies will still appear the next time a pidgin/adium user signs in. Exodus properly will not display them, retrieving the roster fresh/new/properly from the server. It is almost like the roster is being cached on the client side while disconnected and not being properly updated upon signon.

Change History (7)

comment:1 follow-up: Changed 11 years ago by chemistrydioxide

I suppose this happens to prevent IM servers from removing buddies that were created by a user without any notice.

comment:2 in reply to: ↑ 1 Changed 11 years ago by j141cjm

Replying to chemistrydioxide:

I suppose this happens to prevent IM servers from removing buddies that were created by a user without any notice.

Hmmm. Your explanation does indeed seem to make sense. But it does make it difficult to centrally manage roster/groups, such as within a corporation. I guess there is no clean way of handling my desire, if you could differentiate between buddies a user added, versus those from a "template" file - but that sounds crazy. Where is this information cached on the user's system? is it in the blist.xml file? I guess it looks like if I remove that blist.xml file, a new one is created next time I start the program, but I haven't fully tested whether that fixes my problem. And it would be a nightmare to ask people to delete that file every time I do roster changes (it also seems to ask for my password again).

comment:3 follow-up: Changed 11 years ago by deryni

  • pending changed from 0 to 1

pidgin does not delete the buddies from the local blist.xml file because it is never told to by the server. If, instead of your manual hackery, you issued the correct roster additions/deletions pidgin would honor those requests and clean up the roster locally.

This sounds like you are attempting to implement a poor-man's version of a shared roster group (though for the entire roster instead of just by-group. Is that correct? If so this really isn't the right way to do that.

comment:4 Changed 11 years ago by deryni

  • Owner changed from nwalp to deryni

comment:5 in reply to: ↑ 3 Changed 11 years ago by j141cjm

  • pending changed from 1 to 0

Replying to deryni:

pidgin does not delete the buddies from the local blist.xml file because it is never told to by the server. If, instead of your manual hackery, you issued the correct roster additions/deletions pidgin would honor those requests and clean up the roster locally.

This sounds like you are attempting to implement a poor-man's version of a shared roster group (though for the entire roster instead of just by-group. Is that correct? If so this really isn't the right way to do that.

you are definitely right, this is a very poor-man's version of a shared roster group. The server software version I'm currently using doesn't support anything better. Instead of me doing these hacks to the files, I should take the time and get better server software running. I've been putting off that day. Thanks for the ideas/discussions, you can close this as a defect - it's clear that I've dug my own hole here.

comment:6 follow-up: Changed 11 years ago by deryni

  • Summary changed from pidgin/adium (thus I believe libpurple) doesn't refresh contact list from server to Deletion of roster entries when pidgin is offline doesn't update blist.xml

While in your specific case there isn't in fact anything technically wrong with what pidgin is doing a similar problem exists for the far more normal case of a user deleting a buddy from the roster while an instance of pidgin is simply not running. That instance will not see the buddy removal when it logs in next time and will thusly be unable to clean up the local copy of the buddy (most people don't notice this because the buddies never show up as online in the buddy list).

Unfortunately there isn't much pidgin can do about this at the moment as it really does need to keep the local copy and there is no extant XMPP provision for this. There was recent discussion on some of the XMPP lists about roster version sequencing that would allow for better client-caching semantics (for bandwidth limited clients) that would have the nice added effect of making this sort of situation not a problem. I'm hoping that actually goes somewhere, I may actually poke them about it again and see what the story is.

comment:7 in reply to: ↑ 6 Changed 10 years ago by darkrain42

Replying to deryni:

Unfortunately there isn't much pidgin can do about this at the moment as it really does need to keep the local copy and there is no extant XMPP provision for this. There was recent discussion on some of the XMPP lists about roster version sequencing that would allow for better client-caching semantics (for bandwidth limited clients) that would have the nice added effect of making this sort of situation not a problem. I'm hoping that actually goes somewhere, I may actually poke them about it again and see what the story is.

Roster versioning support will be in the next release (likely 2.6.5) barring any emergency releases, though libpurple still does not notice deleted roster entries if the server does not support versioning.

Note: See TracTickets for help on using tickets.
All information, including names and email addresses, entered onto this website or sent to mailing lists affiliated with this website will be public. Do not post confidential information, especially passwords!