diff --git a/include/h.h b/include/h.h index 1872d38ff..a0f8c45c2 100644 --- a/include/h.h +++ b/include/h.h @@ -118,7 +118,7 @@ ConfigItem_deny_channel *Find_channel_allowed(aClient *cptr, char *name); ConfigItem_alias *Find_alias(char *name); ConfigItem_help *Find_Help(char *command); -OperPermission OperClass_evaluateACLPath(char* operClass, char* path, aClient *sptr, aClient *victim, aChannel *channel, void* extra); +OperPermission OperClass_evaluateACLPath(char* path, aClient *sptr, aClient *victim, aChannel *channel, void* extra); int AllowClient(aClient *cptr, struct hostent *hp, char *sockhost, char *username); int parse_netmask(const char *text, struct irc_netmask *netmask); diff --git a/src/modules/m_addmotd.c b/src/modules/m_addmotd.c index d356fdbb3..2a0b0f155 100644 --- a/src/modules/m_addmotd.c +++ b/src/modules/m_addmotd.c @@ -86,7 +86,7 @@ DLLFUNC CMD_FUNC(m_addmotd) if (!MyConnect(sptr)) return 0; - if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"add:motd",sptr,NULL,NULL,NULL)) + if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath("add:motd",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; diff --git a/src/modules/m_addomotd.c b/src/modules/m_addomotd.c index d1ede40aa..8445a6979 100644 --- a/src/modules/m_addomotd.c +++ b/src/modules/m_addomotd.c @@ -86,7 +86,7 @@ DLLFUNC CMD_FUNC(m_addomotd) if (!MyConnect(sptr)) return 0; - if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"add:omotd",sptr,NULL,NULL,NULL)) + if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath("add:omotd",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; diff --git a/src/modules/m_adminchat.c b/src/modules/m_adminchat.c index c5e4ec0c5..8d8b62c3a 100644 --- a/src/modules/m_adminchat.c +++ b/src/modules/m_adminchat.c @@ -96,7 +96,7 @@ DLLFUNC int m_admins(aClient *cptr, aClient *sptr, int parc, char *parv[]) return 0; } #ifdef ADMINCHAT - if (MyClient(sptr) && !IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"chat:admin",sptr,NULL,NULL,NULL)) + if (MyClient(sptr) && !IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath("chat:admin",sptr,NULL,NULL,NULL)) #else if (MyClient(sptr)) #endif diff --git a/src/modules/m_sajoin.c b/src/modules/m_sajoin.c index 6ec41afa1..2d9a452a3 100644 --- a/src/modules/m_sajoin.c +++ b/src/modules/m_sajoin.c @@ -98,7 +98,7 @@ DLLFUNC CMD_FUNC(m_sajoin) } /* Is this user disallowed from operating on this victim at all? */ - if (!IsSAdmin(sptr) && !IsULine(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"sajoin",sptr,acptr,NULL,NULL)) + if (!IsSAdmin(sptr) && !IsULine(sptr) && !OperClass_evaluateACLPath("sajoin",sptr,acptr,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; @@ -139,7 +139,7 @@ DLLFUNC CMD_FUNC(m_sajoin) chptr = get_channel(acptr, name, 0); /* If this _specific_ channel is not permitted, skip it */ - if (!IsSAdmin(sptr) && !IsULine(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"sajoin",sptr,acptr,chptr,NULL)) + if (!IsSAdmin(sptr) && !IsULine(sptr) && !OperClass_evaluateACLPath("sajoin",sptr,acptr,chptr,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); continue; diff --git a/src/modules/m_samode.c b/src/modules/m_samode.c index b59bad929..fc2f2004d 100644 --- a/src/modules/m_samode.c +++ b/src/modules/m_samode.c @@ -95,7 +95,7 @@ DLLFUNC CMD_FUNC(m_samode) return 0; } - if ((!IsPrivileged(cptr) || !IsSAdmin(sptr)) && !OperClass_evaluateACLPath(sptr->user->operlogin,"samode",sptr,NULL,chptr,NULL)) + if ((!IsPrivileged(cptr) || !IsSAdmin(sptr)) && !OperClass_evaluateACLPath("samode",sptr,NULL,chptr,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; diff --git a/src/modules/m_sapart.c b/src/modules/m_sapart.c index 8e0d6873b..a5421c87b 100644 --- a/src/modules/m_sapart.c +++ b/src/modules/m_sapart.c @@ -105,7 +105,7 @@ DLLFUNC CMD_FUNC(m_sapart) } /* See if we can operate on this vicim/this command */ - if (!IsSAdmin(sptr) && !IsULine(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"sapart",sptr,acptr,NULL,NULL)) + if (!IsSAdmin(sptr) && !IsULine(sptr) && !OperClass_evaluateACLPath("sapart",sptr,acptr,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; @@ -127,7 +127,7 @@ DLLFUNC CMD_FUNC(m_sapart) } /* Validate oper can do this on chan/victim */ - if (!IsSAdmin(sptr) && !IsULine(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"sapart",sptr,acptr,chptr,NULL)) + if (!IsSAdmin(sptr) && !IsULine(sptr) && !OperClass_evaluateACLPath("sapart",sptr,acptr,chptr,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); continue; diff --git a/src/modules/m_sdesc.c b/src/modules/m_sdesc.c index 6ac307edb..60724bc44 100644 --- a/src/modules/m_sdesc.c +++ b/src/modules/m_sdesc.c @@ -81,7 +81,7 @@ DLLFUNC int MOD_UNLOAD(m_sdesc)(int module_unload) int m_sdesc(aClient *cptr, aClient *sptr, int parc, char *parv[]) { - if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"add:description",sptr,NULL,NULL,NULL)) + if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath("add:description",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, sptr->name); return 0; diff --git a/src/modules/m_tkl.c b/src/modules/m_tkl.c index 509a72c8d..e8de902f4 100644 --- a/src/modules/m_tkl.c +++ b/src/modules/m_tkl.c @@ -193,7 +193,7 @@ DLLFUNC int m_gline(aClient *cptr, aClient *sptr, int parc, char *parv[]) { if (IsServer(sptr)) return 0; - if ((!OPCanTKL(sptr) || !IsOper(sptr)) && !OperClass_evaluateACLPath(sptr->user->operlogin,"gline",sptr,NULL,NULL,NULL)) + if ((!OPCanTKL(sptr) || !IsOper(sptr)) && !OperClass_evaluateACLPath("gline",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, @@ -220,7 +220,7 @@ DLLFUNC int m_gzline(aClient *cptr, aClient *sptr, int parc, char *parv[]) if (IsServer(sptr)) return 0; - if ((!OPCanGZL(sptr) || !IsOper(sptr)) && !OperClass_evaluateACLPath(sptr->user->operlogin,"zline:global",sptr,NULL,NULL,NULL)) + if ((!OPCanGZL(sptr) || !IsOper(sptr)) && !OperClass_evaluateACLPath("zline:global",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, sptr->name); @@ -246,7 +246,7 @@ DLLFUNC int m_shun(aClient *cptr, aClient *sptr, int parc, char *parv[]) if (IsServer(sptr)) return 0; - if ((!OPCanTKL(sptr) || !IsOper(sptr)) && !OperClass_evaluateACLPath(sptr->user->operlogin,"shun",sptr,NULL,NULL,NULL)) + if ((!OPCanTKL(sptr) || !IsOper(sptr)) && !OperClass_evaluateACLPath("shun",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, sptr->name); @@ -273,7 +273,7 @@ char *comment = ((parc > 2) && !BadPtr(parv[2])) ? parv[2] : "no reason"; char *name; int remove = 0; - if (MyClient(sptr) && ((!OPCanTKL(sptr) || !IsOper(sptr))) && !OperClass_evaluateACLPath(sptr->user->operlogin,"shun:temporary",sptr,NULL,NULL,NULL)) + if (MyClient(sptr) && ((!OPCanTKL(sptr) || !IsOper(sptr))) && !OperClass_evaluateACLPath("shun:temporary",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, sptr->name); @@ -344,7 +344,7 @@ DLLFUNC int m_tkline(aClient *cptr, aClient *sptr, int parc, char *parv[]) if (IsServer(sptr)) return 0; - if ((!OPCanKline(sptr) || !IsAnOper(sptr)) && !OperClass_evaluateACLPath(sptr->user->operlogin,"kline:local",sptr,NULL,NULL,NULL)) + if ((!OPCanKline(sptr) || !IsAnOper(sptr)) && !OperClass_evaluateACLPath("kline:local",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, sptr->name); @@ -407,7 +407,7 @@ DLLFUNC int m_tzline(aClient *cptr, aClient *sptr, int parc, char *parv[]) if (IsServer(sptr)) return 0; - if ((!OPCanZline(sptr) || !IsAnOper(sptr)) && !OperClass_evaluateACLPath(sptr->user->operlogin,"zline:local",sptr,NULL,NULL,NULL)) + if ((!OPCanZline(sptr) || !IsAnOper(sptr)) && !OperClass_evaluateACLPath("zline:local",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, sptr->name); @@ -764,7 +764,7 @@ char *err = NULL; if (IsServer(sptr)) return 0; - if ((!OPCanTKL(sptr) || !IsOper(sptr)) && !OperClass_evaluateACLPath(sptr->user->operlogin,"spamfilter",sptr,NULL,NULL,NULL)) + if ((!OPCanTKL(sptr) || !IsOper(sptr)) && !OperClass_evaluateACLPath("spamfilter",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, sptr->name); return 0; diff --git a/src/modules/m_tsctl.c b/src/modules/m_tsctl.c index e5a81ffa0..55b59187f 100644 --- a/src/modules/m_tsctl.c +++ b/src/modules/m_tsctl.c @@ -91,7 +91,7 @@ DLLFUNC int m_tsctl(aClient *cptr, aClient *sptr, int parc, char *parv[]) if (!MyClient(sptr)) goto doit; - if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"tsctl",sptr,NULL,NULL,NULL)) + if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath("tsctl",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; diff --git a/src/modules/m_wallops.c b/src/modules/m_wallops.c index a2dc18f40..3315e13c2 100644 --- a/src/modules/m_wallops.c +++ b/src/modules/m_wallops.c @@ -87,7 +87,7 @@ DLLFUNC CMD_FUNC(m_wallops) me.name, parv[0], "WALLOPS"); return 0; } - if (MyClient(sptr) && !OPCanWallOps(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"chat:wallops",sptr,NULL,NULL,NULL)) + if (MyClient(sptr) && !OPCanWallOps(sptr) && !OperClass_evaluateACLPath("chat:wallops",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; diff --git a/src/modules/m_whois.c b/src/modules/m_whois.c index e33d72319..b49ae34c5 100644 --- a/src/modules/m_whois.c +++ b/src/modules/m_whois.c @@ -195,11 +195,11 @@ DLLFUNC int m_whois(aClient *cptr, aClient *sptr, int parc, char *parv[]) showchannel = 0; if (ShowChannel(sptr, chptr)) showchannel = 1; - if (OPCanSeeSecret(sptr) || OperClass_evaluateACLPath(sptr->user->operlogin,"override:whois",sptr,NULL,chptr,NULL)) + if (OPCanSeeSecret(sptr) || OperClass_evaluateACLPath("override:whois",sptr,NULL,chptr,NULL)) showchannel = 1; - if ((acptr->umodes & UMODE_HIDEWHOIS) && !IsMember(sptr, chptr) && !IsAnOper(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"override:whois:",sptr,NULL,chptr,NULL)) + if ((acptr->umodes & UMODE_HIDEWHOIS) && !IsMember(sptr, chptr) && !IsAnOper(sptr) && !OperClass_evaluateACLPath("override:whois:",sptr,NULL,chptr,NULL)) showchannel = 0; - if (IsServices(acptr) && !IsNetAdmin(sptr) && !IsSAdmin(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"override:whois",sptr,NULL,chptr,NULL)) + if (IsServices(acptr) && !IsNetAdmin(sptr) && !IsSAdmin(sptr) && !OperClass_evaluateACLPath("override:whois",sptr,NULL,chptr,NULL)) showchannel = 0; if (acptr == sptr) showchannel = 1; @@ -222,7 +222,7 @@ DLLFUNC int m_whois(aClient *cptr, aClient *sptr, int parc, char *parv[]) #else if ((IsNetAdmin(sptr) || #endif - OperClass_evaluateACLPath(sptr->user->operlogin,"override:whois",sptr,NULL,chptr,NULL)) && SecretChannel(chptr) && !IsMember(sptr, chptr)) + OperClass_evaluateACLPath("override:whois",sptr,NULL,chptr,NULL)) && SecretChannel(chptr) && !IsMember(sptr, chptr)) *(buf + len++) = '?'; if (acptr->umodes & UMODE_HIDEWHOIS && !IsMember(sptr, chptr) && IsAnOper(sptr)) diff --git a/src/operclass.c b/src/operclass.c index 7664c8643..62ead635e 100644 --- a/src/operclass.c +++ b/src/operclass.c @@ -294,7 +294,7 @@ OperPermission OperClass_evaluateACLPathEx(OperClassACL* acl, OperClassACLPath* return OPER_DENY; } -OperPermission OperClass_evaluateACLPath(char* opername, char* path, aClient *sptr, aClient *victim, aChannel *channel, void* extra) +OperPermission OperClass_evaluateACLPath(char* path, aClient *sptr, aClient *victim, aChannel *channel, void* extra) { ConfigItem_oper *ce_oper; ConfigItem_operclass *ce_operClass; @@ -302,18 +302,19 @@ OperPermission OperClass_evaluateACLPath(char* opername, char* path, aClient *sp OperClassACLPath* operPath; OperClassACL* acl; - ce_oper = Find_oper(opername); + ce_oper = Find_oper(sptr->user->operlogin); if (!ce_oper) { return OPER_DENY; } ce_operClass = Find_operclass(ce_oper->operclass); - if (ce_operClass) + if (!ce_operClass) { - oc = ce_operClass->classStruct; + return OPER_DENY; } + oc = ce_operClass->classStruct; operPath = OperClass_parsePath(path); while (oc && operPath) {