View Issue Details
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0003513||unreal||ircd||public||2007-08-11 22:41||2007-09-02 21:22|
|Platform||x86||OS||Linux Gentoo||OS Version||2.6.17|
|Target Version||Fixed in Version||4.0-devel|
|Summary||0003513: Extend chanrec::IsBanned (so we can have extbans)|
|Description||The chanrec::IsBanned provides only simplistic implementation of ban checking, eg, if a n!u@h mask matches in the channel. In order to implement extended bans of any form, IsBanned will need at least two things:|
- Able to identify the type of action taken that is causing a ban check (eg: JOIN, NICK, PRIVMSG).
- Able to call it module code before doing a normal check of a ban entry. Includes allowing the module to say "don't do a normal mask check".
The first issue, I've considered:
- Unreal 3's style: use named constants BANCHK_JOIN, etc. Advantage: no string compares. Disadvantage: modules have to fight over unique values, or we have to make a provider for it. Probably the best option, performance-wise.
- Something closer to how insp does assorted things, namely: use text strings. Advantage: no fighting over uniqueness, if they just use their cmd name. Disadvantage: string compares, with all the slowdowns that can involve . Especially if some extbans want to check against several different command names (eg a ~q would need to trap PRIVMSG and NOTICE - double whammy, though we can avoid it with using non-command names like 'MESSAGE').
- Other ideads?
For the second issue:
Either built-in check for extended ban syntax ('~', something, ':'), or a hook that is triggered for every ban checked (that way module can provide the extban system, and other modules can do things to a specific ban check that don't strictly relate to extended bans). The latter is probably preferred.
|Tags||No tags attached.|
|3rd party modules|
||I should probably add: the existing IsBanned can stay as-is so we have compatibility, and we make an extended version of it (probably IsBanned(userrec* user, std::string/const char* checktype) or IsBanned(userrec* user, int checktype), or whatever.|
||Implemented in SVN 222|
|2007-08-11 22:41||aquanight||New Issue|
|2007-08-11 22:41||aquanight||QA||=> Not touched yet by developer|
|2007-08-11 22:41||aquanight||U4: Need for upstream patch||=> No need for upstream InspIRCd patch|
|2007-08-11 22:41||aquanight||U4: Upstream notification of bug||=> Not decided|
|2007-08-11 22:41||aquanight||U4: Contributor working on this||=> None|
|2007-08-11 22:42||aquanight||Relationship added||child of 0003417|
|2007-08-11 22:44||aquanight||Note Added: 0014719|
||Status||new => confirmed|
|2007-09-02 21:22||aquanight||QA||Not touched yet by developer => Fixed by developer, needs QA testing|
|2007-09-02 21:22||aquanight||Note Added: 0014750|
|2007-09-02 21:22||aquanight||Assigned To||=> aquanight|
|2007-09-02 21:22||aquanight||Status||confirmed => resolved|
|2007-09-02 21:22||aquanight||Resolution||open => fixed|
|2007-09-02 21:22||aquanight||Fixed in Version||=> 4.0-devel|