View Issue Details

IDProjectCategoryView StatusLast Update
0003123unrealircdpublic2006-11-24 15:15
ReporterBock Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionno change required 
Product Version3.2.5 
Summary0003123: not correct ircops flags for opers that confuse about oper_override and etc.
Descriptionnoticing about fake oper_override caused by:

in struct.h:

#define OFLAG_ISGLOBAL (OFLAG_GROUTE|OFLAG_GKILL|OFLAG_GNOTICE|OFLAG_TKL|OFLAG_GZL|OFLAG_OVERRIDE)

Grep by src I found in modules/m_oper.c:

    oper_oflags[4].oflag = OFLAG_ISGLOBAL;
    oper_oflags[4].umode = &UMODE_OPER;
    oper_oflags[4].host = &oper_host;
    oper_oflags[4].announce = "is now an operator (O)";


For my opinion, it's not correct, #define OFLAG_ISGLOBAL must be deleted from struct.h and in m_oper.c must be:

    oper_oflags[4].oflag = OFLAG_LOCAL;
    oper_oflags[4].umode = &UMODE_OPER;
    oper_oflags[4].host = &oper_host;
    oper_oflags[4].announce = "is now an operator (O)";

It must to resolve some bugreports about oper_override ( for example http://bugs.unrealircd.org/view.php?id=3121)
3rd party modules

Activities

avb

2006-11-22 03:49

reporter   ~0012692

Last edited: 2006-11-22 03:51

OFLAG_ISGLOBAL define is used to send notice about opering-up of user that has global oper flag, but not Tech/Net/Server admin, imho.

Bock

2006-11-22 04:36

reporter   ~0012693

Last edited: 2006-11-22 05:00

Heh... But why exist #define OFLAG_GLOBAL (OFLAG_LOCAL|OFLAG_GROUTE|OFLAG_GKILL|OFLAG_GNOTICE)
?
Simple why OFLAG_ISGLOBAL define OFLAG_OVERRIDE without testing? OFLAG_OVERRIDE must be setupable only from config by #define OPCanOverride(x) ((x)->oflag & OFLAG_OVERRIDE)
Imho. :]

EDIT:
by docs global oper can: can_globalroute, can_globalkill, can_globalnotice. In source:
#define OFLAG_GLOBAL (OFLAG_LOCAL|OFLAG_GROUTE|OFLAG_GKILL|OFLAG_GNOTICE)

But I don't find in docs to what type of oper concerns OFLAG_ISGLOBAL with OVERRIDE flag :P

avb

2006-11-22 05:26

reporter   ~0012694

Last edited: 2006-11-22 05:43

i think, OFLAG_GLOBAL define is used for setting corresponding access rights for IRCOp,

for example if you configure ircop only with "global" access level, according to define (#define OFLAG_GLOBAL (OFLAG_LOCAL|OFLAG_GROUTE|OFLAG_GKILL|OFLAG_GNOTICE)) he/she will get access rights to local routing, global routing, global kill and global notices,

and OFLAG_ISGLOBAL is only used for printing notice "xxx is now an operator (O)" for opers that have can_globalroute or an_globalkill or can_globalnotice or can_gkline or can_gzline or can_override. In other cases, if user is netadmin or techadmin, etc - another notice will be printed out.

I mean - the purpose of define OFLAG_ISGLOBAL - is only choosing what notice will be printed out on oper up. - if you will have oper with can_override, but not netadmin, or etc, - "xxx is now an operator (O)" will be printed out, instead of "xxx is now a network administrator (N)" or others

in other words, ircd consider that ircop with can_override oper flag - is global oper if he/she is not net/tech/co/server admin, when choosing what notice to print-out

fix me if i wrong.

Bock

2006-11-22 05:46

reporter   ~0012695

Noone better knows about it when developers. :] Just wait answer syzop or somebody else of developers.

If you wanna know why I ask this question, just look at code: in struct.h:
#define OFLAG_LOCAL (OFLAG_REHASH|OFLAG_HELPOP|OFLAG_GLOBOP|OFLAG_WALLOP|OFLAG_LOCOP|OFLAG_LROUTE|OFLAG_LKILL|OFLAG_KLINE|OFLAG_UNKLINE|OFLAG_LNOTICE)
#define OFLAG_GLOBAL (OFLAG_LOCAL|OFLAG_GROUTE|OFLAG_GKILL|OFLAG_GNOTICE)
#define OFLAG_ISGLOBAL (OFLAG_GROUTE|OFLAG_GKILL|OFLAG_GNOTICE|OFLAG_TKL|OFLAG_GZL|OFLAG_OVERRIDE)
#define OFLAG_NADMIN (OFLAG_NETADMIN | OFLAG_SADMIN | OFLAG_ADMIN | OFLAG_GLOBAL | OFLAG_UMODEQ | OFLAG_DCCDENY)
#define OFLAG_ADMIN_ (OFLAG_ADMIN | OFLAG_GLOBAL | OFLAG_DCCDENY)
#define OFLAG_COADMIN_ (OFLAG_COADMIN | OFLAG_GLOBAL | OFLAG_DCCDENY)
#define OFLAG_SADMIN_ (OFLAG_SADMIN | OFLAG_GLOBAL | OFLAG_UMODEQ | OFLAG_DCCDENY)

and m_oper.c:
static void init_operflags()
{
...
where not using OFLAG_SADMIN_, OFLAG_COADMIN_ and other, it using OFLAG_SADMIN, OFLAG_COADMIN and other, and more logicaly using OFLAG_LOCAL in init_operflags() intsead of OFLAG_ISGLOBAL.

avb

2006-11-22 06:38

reporter   ~0012696

Last edited: 2006-11-22 06:39

there are many debatable questions about how to do one or another thing better, okay, let's wait ;)

Bock

2006-11-22 06:58

reporter   ~0012697

my wrong, if user stands local ircop, it's not globalised, but if he has some flags more then local - he became Global ircop :]

Must be close too.

aquanight

2006-11-22 16:07

reporter   ~0012704

OFLAG_ISGLOBAL is used for determining if an oper needs to be a global oper or not. The flags listed are flags that simply don't work for, say, a local oper.

It's not saying "If you're global, you have these." but "If you have any of these, you're global, at least."

So, for example, if you try to do flags {local; can_override; };, you still get global usermodes etc because can_override needs you to be global to work.

See also 0002349 .

syzop

2006-11-24 15:15

administrator   ~0012717

Bock said I could close this ;P

Issue History

Date Modified Username Field Change
2006-11-21 05:02 Bock New Issue
2006-11-22 03:49 avb Note Added: 0012692
2006-11-22 03:50 avb Note Edited: 0012692
2006-11-22 03:51 avb Note Edited: 0012692
2006-11-22 04:36 Bock Note Added: 0012693
2006-11-22 04:36 Bock Note Edited: 0012693
2006-11-22 05:00 Bock Note Edited: 0012693
2006-11-22 05:26 avb Note Added: 0012694
2006-11-22 05:28 avb Note Edited: 0012694
2006-11-22 05:39 avb Note Edited: 0012694
2006-11-22 05:42 avb Note Edited: 0012694
2006-11-22 05:43 avb Note Edited: 0012694
2006-11-22 05:46 Bock Note Added: 0012695
2006-11-22 06:38 avb Note Added: 0012696
2006-11-22 06:39 avb Note Edited: 0012696
2006-11-22 06:58 Bock Note Added: 0012697
2006-11-22 16:07 aquanight Note Added: 0012704
2006-11-24 15:15 syzop Status new => closed
2006-11-24 15:15 syzop Note Added: 0012717
2006-11-24 15:15 syzop Resolution open => no change required