View Issue Details

IDProjectCategoryView StatusLast Update
0003513unrealircdpublic2007-09-02 21:22
Reporteraquanight Assigned Toaquanight  
PrioritynormalSeverityminorReproducibilityN/A
Status resolvedResolutionfixed 
Platformx86OSLinux GentooOS Version2.6.17
Product Version4.0-devel 
Fixed in Version4.0-devel 
Summary0003513: Extend chanrec::IsBanned (so we can have extbans)
DescriptionThe 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.
3rd party modules

Relationships

child of 0003417 closed TODO list for Unreal4.0 

Activities

aquanight

2007-08-11 22:44

reporter   ~0014719

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.

aquanight

2007-09-02 21:22

reporter   ~0014750

Implemented in SVN 222

Issue History

Date Modified Username Field Change
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
2007-08-14 07:01 stskeeps 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