View Issue Details

IDProjectCategoryView StatusLast Update
0005144unrealircdpublic2018-09-15 08:49
ReporterdigitalcircuitAssigned Tosyzop 
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
Product Version4.0.18 
Target VersionFixed in Version4.2.0 
Summary0005144: away-notify fails to send :AWAY when users join channel while away
DescriptionUnrealIRCd 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.

https://ircv3.net/specs/extensions/away-notify-3.1.html

> 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.)

(emphasis added)

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 Reproduce1. 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

Expected:
Client A receives an ":AWAY :Test" message for client B, letting it know of client B's away message and away status.

Actual:
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 InformationThis 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
Tagsbug, ircv3
3rd party modules

Activities

syzop

2018-09-15 08:33

administrator   ~0020326

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 :).

syzop

2018-09-15 08:49

administrator   ~0020327

Fixed, thanks for the report. This will be in 4.0.19 stable.

https://github.com/unrealircd/unrealircd/commit/3f7ec605dd0733ede281462a6e3697ebe1b8d4c2

commit 3f7ec605dd0733ede281462a6e3697ebe1b8d4c2 (HEAD -> unreal40, origin/unreal40, origin/HEAD)
Author: Bram Matthys <syzop@vulnscan.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

Issue History

Date Modified Username Field Change
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