View Issue Details
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0005144||unreal||ircd||public||2018-09-14 21:39||2018-09-15 08:49|
|Target Version||Fixed in Version||4.2.0|
|Summary||0005144: away-notify fails to send :AWAY when users join channel while away|
|Description||UnrealIRCd currently does not send ":AWAY" messages on behalf of clients that join a channel to "away-notify"-enabled clients that are already in the channel. This does not follow the IRCv3 specifications and makes it impossible for "away-notify"-enabled clients to always accurately track "/away" state.|
> When this capability is enabled, clients will be sent an AWAY message when a user sharing a channel with them sets or removes their away state, **as well as when a user joins and has an away message set.** (Note that AWAY will not be sent for joining users with no away message set.)
As of git-master commit 57a008b8084833259b6318153850ba56afef5fa1, UnrealIRCd does not follow the IRCv3 specification. This regresses functionality for "away-notify"-enabled clients as they will not see the away state of users that join a channel afterwards, unless they implement hacks like automatically WHO'ng all users that join a channel.
(Context: I implemented the above who-on-join workaround for UnrealIRCd's non-compliant behavior in Quassel IRC until others encouraged me to get it addressed in UnrealIRCd instead. I'll be removing the workaround from Quassel IRC soon.)
This is addressed with the patch in https://bugs.unrealircd.org/view.php?id=4575 , but bundled with an overhaul to implement who-extended that is currently slated to never be included. However, the away-notify "send on join" change can be split off, and doing so should make it much less risky. If you need assistance with this, I can attempt it.
|Steps To Reproduce||1. Join an UnrealIRCd server with an "away-notify"-enabled client, client A|
2. Join a test channel, e.g. #test
3. Connect to the same server with another instance of the client, client B, **and do NOT join the same channel, #test**
4. Set client B to "/away Test"
5. Join client B to #test
Client A receives an ":AWAY :Test" message for client B, letting it know of client B's away message and away status.
In client A, observe that no ":AWAY :Test" message is sent. Client A does not know client B is away and will not find out (as WHO polling is disabled) until messaging client B or manually WHO'ng.
|Additional Information||This is based on searching UnrealIRCd's source code for "PROTO_AWAY_NOTIFY" (via https://github.com/unrealircd/unrealircd/search?q=PROTO_AWAY_NOTIFY&unscoped_q=PROTO_AWAY_NOTIFY ) and reading the entirety of the "away" module "src/modules/m_away.c" ( https://github.com/unrealircd/unrealircd/blob/57a008b8084833259b6318153850ba56afef5fa1/src/modules/m_away.c ).|
I have not set up an actual test instance of UnrealIRCd, but this behavior appears to be unchanged from back in Unreal 3.2 days.
See also: https://bugs.unrealircd.org/view.php?id=4575
|3rd party modules|
Yup, that should be easy and isolated.
And always a good idea to report the issue, indeed. Too often I hear years later that someone has been working around something and never notified us. This happens especially with client and services devs. I understand, they just want something fixed *right now* so they implement a workaround. That's good, but... then the issue should also be reported to our bug tracker otherwise it never gets fixed and will only annoy more and more client/server devs (and users). If nobody reports it then it never gets fixed. So, just saying: glad you did :).
Fixed, thanks for the report. This will be in 4.0.19 stable.
commit 3f7ec605dd0733ede281462a6e3697ebe1b8d4c2 (HEAD -> unreal40, origin/unreal40, origin/HEAD)
Author: Bram Matthys <firstname.lastname@example.org>
Date: Sat Sep 15 08:46:18 2018 +0200
The away-notify CAP did not send AWAY status upon join, which is required.
Reported by digitalcircuit in https://bugs.unrealircd.org/view.php?id=5144
|2018-09-14 21:39||digitalcircuit||New Issue|
|2018-09-14 21:39||digitalcircuit||Tag Attached: bug ircv3|
|2018-09-14 21:40||digitalcircuit||Tag Attached: bug|
|2018-09-14 21:40||digitalcircuit||Tag Attached: ircv3|
|2018-09-14 21:40||digitalcircuit||Tag Detached: bug ircv3|
|2018-09-15 08:33||syzop||Assigned To||=> syzop|
|2018-09-15 08:33||syzop||Status||new => acknowledged|
|2018-09-15 08:33||syzop||Note Added: 0020326|
|2018-09-15 08:49||syzop||Status||acknowledged => resolved|
|2018-09-15 08:49||syzop||Resolution||open => fixed|
|2018-09-15 08:49||syzop||Fixed in Version||=> 4.2.0|
|2018-09-15 08:49||syzop||Note Added: 0020327|