View Issue Details

IDProjectCategoryView StatusLast Update
0005192unrealircdpublic2019-02-01 17:58
Reportersyzop Assigned Tosyzop  
Status resolvedResolutionfixed 
Product Version4.2.1 
Target Version4.2.2-rc1Fixed in Version4.2.2-rc1 
Summary0005192: WHOX: Several undocumented behavior changes
DescriptionNow that the whox module is loaded in modules.optional.conf several users reported behavior changes that are not documented. This can be fixed by updating the documentation, but it would be much more preferable to update the implementation so it has the same functionality/behavior as current who.

1. "WHO *" and "WHO #channel" no longer work for IRCOps to override::see, it requires "WHO !*" and "WHO !#channel"
2. Flags are only interpreted if they are the second parameter, eg: "WHO * +s"
3. The behavior flags seem to be missing, even though these are popular with some users, eg +I (show users' IP addresses)
TagsNo tags attached.
3rd party modules



2019-01-20 14:45

administrator   ~0020456

Last edited: 2019-01-20 16:16

1) should be updated to reflect current UnrealIRCd behavior, but we can make it an option (not the default) to require the explicit '!' for those people who like it (privacy improvement due to explicit overriding).
2) The flags could be interpreted for the 1st argument also, since a nick cannot start with - nor a + there can be no confusion. Actually it's not just nicks, so need to research this before doing so.
3) These are popular flags with some ircops, so we should definitely look into this. I'm sure it can be done via a particular WHOX line, but we want it to be as simple as WHO +I...

I think most of these issues are just due to copying of code from another IRCd and not sufficiently modifying it to match UnrealIRCd behavior. Fortunately, this shouldn't be hard to do.


2019-01-20 15:45

administrator   ~0020457

Other observations:
/WHO [+|-][acghimnsuMRI] [args]
Flags are specified like channel modes, the flags cgmnsu all have arguments
Flags are set to a positive check by +, a negative check by -
^^ negative checks don't work anymore
The flags available:
Flag a: user is away
^^ no longer available
Flag c <channel>: user is on <channel>, no wildcards accepted
^^ no longer available, although in most cases #chan as parameter 1 would give a similar effect
Flag g <gcos/realname>: user has string <gcos> in his/her GCOS,
wildcards accepted, oper only
^^ this one is now called 'r' rather than 'g'
Flag h <host>: user has string <host> in his/her hostname, wildcards are accepted
Flag i <ip>: user has string <ip> in his/her IP address
Flag m <usermodes>: user has <usermodes> set, only o/C/A/a/N for nonopers
Flag n <nick>: user has string <nick> in his/her nickname, wildcards accepted
Flag s <server>: user is on server <server>, wildcards not accepted
Flag u <user>: user has string <user> in his/her username, wildcards accepted
^^ these all exist

Behavior flags:
Flag M: check for user in channels I am a member of
Flag R: show users' real hostnames
^^ missing
Flag I: show users' IP addresses
^^ missing

Status flags:
The who command shows several flags in the returned result to indicate
different information about the user. These flags are explained below:
G - User is /away (gone)
H - User is not /away (here)
r - User is using a registered nickname
B - User is a bot (+B)
^^ missing
* - User is an IRC Operator
~ - User is a Channel Owner (+q)
& - User is a Channel Admin (+a)
@ - User is a Channel Operator (+o)
% - User is a Halfop (+h)
+ - User is Voiced (+v)
! - User is +H and you are an IRC Operator
? - User is only visible because you are an IRC Operator
^^ no longer works that way, due to the !mask operonly stuff


2019-01-20 15:56

administrator   ~0020458

Oh, and all the options that are available don't work if you use the original order like "WHO +s", you need to use "WHO s".

Also, some ircds support an optional 3rd parameter which overrides the 1st:
WHO <mask1> [<options> [<mask2>]]
<mask2> is optional, if mask2 is present it's used for matching and mask1 is
ignored, otherwise mask1 is used for matching, since mask2 is the last
parameter it *can* contain a space and this can help when trying to match a

Fun fun fun........


2019-02-01 17:58

administrator   ~0020477

Done. Needs testing!

commit f9415e1a912441cfe27db4985c2d25972892e70d (HEAD -> unreal42, origin/unreal42, origin/HEAD)
Author: Bram Matthys <>
Date: Fri Feb 1 17:46:59 2019 +0100

    m_whox: now accept and transform most classic UnrealIRCd WHO requests
    such as "WHO +s" to "WHO s".
    It also does advanced transformation such as "WHO -m z" to "WHO -z m"
    **copy paste from comment in code**
    Flag a: user is away << no longer exists
    Flag c <channel>: user is on <channel> << no longer exists
    Flag g <gcos/realname>: user has string <gcos> in his/her GCOS << now called 'r'
    Flag h <host>: user has string <host> in his/her hostname << no change
    Flag i <ip>: user has string <ip> in his/her IP address << no change
    Flag m <usermodes>: user has <usermodes> set << behavior change
    Flag n <nick>: user has string <nick> in his/her nickname << no change
    Flag s <server>: user is on server <server> << no change
    Flag u <user>: user has string <user> in his/her username << no change
    Behavior flags:
    Flag M: check for user in channels I am a member of << no longer exists
    Flag R: show users' real hostnames << no change (re-added)
    Flag I: show users' IP addresses << no change (re-added)
    **end of paste**
    Of course we cannot convert 100% from classic UnrealIRCd WHO to WHOX-style
    because things like "WHO +m r" could mean either "search for +m in realname" (WHOX)
    or "search for +r in modes" (classic). In cases like this we assume WHOX, so to not
    break any WHOX compatibility.
    Added matchers: 'R' (show real host) and 'I' (show IP)
    This code will need more testing, both by classic WHO and by WHOX users...

commit eecd29bdc8201829fe41c52b12aa631581c49aa9
Author: Bram Matthys <>
Date: Fri Feb 1 15:21:53 2019 +0100

    WHOX: adaptions for UnrealIRCd part 1:
    * No longer require a ! prefix for ircops to see users
    * "WHO *" is no longer different than the rest
      (previously in m_whox would only list users on 1st channel)
    Neither is part of the WHOX specs.

Issue History

Date Modified Username Field Change
2019-01-20 14:40 syzop New Issue
2019-01-20 14:40 syzop Status new => acknowledged
2019-01-20 14:45 syzop Note Added: 0020456
2019-01-20 15:45 syzop Note Added: 0020457
2019-01-20 15:56 syzop Note Added: 0020458
2019-01-20 16:16 syzop Note Edited: 0020456
2019-01-20 16:17 syzop Description Updated
2019-02-01 17:58 syzop Assigned To => syzop
2019-02-01 17:58 syzop Status acknowledged => resolved
2019-02-01 17:58 syzop Resolution open => fixed
2019-02-01 17:58 syzop Fixed in Version => 4.2.2-rc1
2019-02-01 17:58 syzop Note Added: 0020477