View Issue Details
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0005192||unreal||ircd||public||2019-01-20 14:40||2019-02-01 17:58|
|Target Version||4.2.2-rc1||Fixed in Version||4.2.2-rc1|
|Summary||0005192: WHOX: Several undocumented behavior changes|
|Description||Now 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 server.test.net"
3. The behavior flags seem to be missing, even though these are popular with some users, eg +I (show users' IP addresses)
|Tags||No tags attached.|
|3rd party modules|
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,
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.
/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
Flag M: check for user in channels I am a member of
Flag R: show users' real hostnames
Flag I: show users' IP addresses
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)
* - 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
Oh, and all the options that are available don't work if you use the original order like "WHO +s maintest.test.net", you need to use "WHO maintest.test.net 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 "realname".
Fun fun fun........
Done. Needs testing!
commit f9415e1a912441cfe27db4985c2d25972892e70d (HEAD -> unreal42, origin/unreal42, origin/HEAD)
Author: Bram Matthys <firstname.lastname@example.org>
Date: Fri Feb 1 17:46:59 2019 +0100
m_whox: now accept and transform most classic UnrealIRCd WHO requests
such as "WHO +s serv.er.name" to "WHO serv.er.name 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
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...
Author: Bram Matthys <email@example.com>
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.
|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|