View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0004772 | unreal | ircd | public | 2016-10-23 03:29 | 2016-10-30 12:02 |
Reporter | gms | Assigned To | syzop | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Product Version | 4.0.7 | ||||
Fixed in Version | 4.0.8-rc1 | ||||
Summary | 0004772: Server->(server/services) Modes specified in PREFIX=(here)xxxxx missing from here CHANMODES=(here),XXX,XXX,XXX | ||||
Description | While parsing modes i noticed channel modes qaohv missing from CHANMODES on link PROTOCTL. While not devastating its not possible to determine if the missing modes are supported by any particular server during server->server handshake. | ||||
Steps To Reproduce | While observing protocol handshake Client/Server. Client gets PREFIX in 005 message but since sending 005 to server during link is not part of the protocol those modes need to be specified in CHANMODES over the PROTOCTL message. | ||||
Additional Information | /* Workaround: simply assume certain modes are supported on every ircd and add to section A of CHANMODES=A,B,C,D ban allready set in this output */ supported[0] += 'qaohv'; /* Workaround: end */ var set = false, type = -1; console.log('MODE CHANGE Supported:', supported, 'Changing:', modes, 'Parameters:', args, 'Original Params:', params); modes.split('').forEach(function(mode) { if ('+' == mode) set = true; else if ('-' == mode) set = false; else { for (var i = 0, c = supported.length; i<c; i++) if (supported[i].indexOf(mode) >= 0) type = i; switch(type) { case 0: case 1: if (!channel._modes[mode]) channel._modes[mode] = []; var parm = args.shift(); if (set) channel._modes[mode].push(parm); else channel._modes[mode].splice(channel._modes[mode].indexOf(parm),1); break; case 2: if (set) channel._modes[mode] = args.shift(); else channel._modes[mode] = false; break; case 3: channel._modes[mode] = set; break; default: console.log('Unkown Mode:', mode); } } }); console.log('MODE RESULTS:', channel._modes); /* /mode #services +oskbl WebServ pass somenick@host 10 MODE CHANGE Supported: [ 'beIqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohv', 'kLf', 'l', 'psmntirzMQNRTOVKDdGPZSCc' ] Changing: +slok Parameters: [ '10', 'WebServ', 'pass' ] Original Params: [ '#services', '+slok' , '10', 'WebServ', 'pass' ] MODE RESULTS: { s: true, l: '10', k: [ 'pass' ], b: [ '*!somenick@host' ], o: [ 'WebServ' ] } rawMODE [ '#services', '+slok', '10', 'WebServ', 'pass' ] */ | ||||
Tags | No tags attached. | ||||
3rd party modules | |||||
|
MODE CHANGE Supported: [ 'beIqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohvqaohv', This is a result of appending modes during the MODE change event for the purpose of copy/paste this bug report supported[0] += 'qaohv'; actually occurs in PROTOCTL event only and correctly sets the supported modes. sorry i missed this during reporting. |
|
CHANMODES= purpose is indeed exactly for what you are trying to do: so you know when a channel mode requires a parameter or not, this so you can skip (also called 'eat') the parameter. This way you don't need to hardcode this stuff for every channel mode, which are modular after all and may be different on different networks. |
|
I solved the issue by sending PREFIX= in PROTOCTL. This so it matches the client-side where PREFIX modes are also ommitted from channel modes, and also so you can easily diferentiate between list modes (beI) and nick modes (vhoaq). So.. you still need to do some string concatenation in your code but this way you have all the information you need, or at least starting 4.0.8.. I don't have a time machine so can't fix previous releases :) [unreal40 d504fbe] Send PREFIX= in PROTOCTL to servers (0004772). https://github.com/unrealircd/unrealircd/commit/d504fbe04cd4b4e7f12d3f1f350edc4574bff4ec |
Date Modified | Username | Field | Change |
---|---|---|---|
2016-10-23 03:29 | gms | New Issue | |
2016-10-23 03:43 | gms | Note Added: 0019484 | |
2016-10-30 11:59 | syzop | Note Added: 0019486 | |
2016-10-30 11:59 | syzop | Status | new => resolved |
2016-10-30 11:59 | syzop | Resolution | open => fixed |
2016-10-30 11:59 | syzop | Assigned To | => syzop |
2016-10-30 12:01 | syzop | Note Added: 0019487 | |
2016-10-30 12:02 | syzop | Fixed in Version | => 4.0.8-rc1 |