From 6d67bc8e79c7331b6ac7b7016f59b4d18ddefb45 Mon Sep 17 00:00:00 2001 From: Travis McArthur Date: Sat, 13 Jun 2015 19:22:02 -0400 Subject: [PATCH 01/10] Add oper permissions for sajoin --- src/modules/m_sajoin.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/modules/m_sajoin.c b/src/modules/m_sajoin.c index 2dd26c91f..46ea9e1c2 100644 --- a/src/modules/m_sajoin.c +++ b/src/modules/m_sajoin.c @@ -85,23 +85,25 @@ DLLFUNC CMD_FUNC(m_sajoin) char jbuf[BUFSIZE]; int did_anything = 0; - if (!IsSAdmin(sptr) && !IsULine(sptr)) + if (parc < 3) + { + sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "SAJOIN"); + return 0; + } + + if (!(acptr = find_person(parv[1], NULL))) + { + sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], parv[1]); + return 0; + } + + /* 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)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; } - if (parc < 3) - { - sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "SAJOIN"); - return 0; - } - - if (!(acptr = find_person(parv[1], NULL))) - { - sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], parv[1]); - return 0; - } if (MyClient(acptr)) { char *name, *p = NULL; @@ -135,6 +137,14 @@ 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,chptr,NULL,NULL)) + { + sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); + continue; + } + if (!parted && chptr && (lp = find_membership_link(acptr->user->channel, chptr))) { sendto_one(sptr, err_str(ERR_USERONCHANNEL), me.name, parv[0], From 95edb5aebb41764568c22742a9dc2b71ac145a79 Mon Sep 17 00:00:00 2001 From: Travis McArthur Date: Sat, 13 Jun 2015 19:22:46 -0400 Subject: [PATCH 02/10] Add oper ACL permissions for samode command --- src/modules/m_samode.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/modules/m_samode.c b/src/modules/m_samode.c index e4acd655c..b59bad929 100644 --- a/src/modules/m_samode.c +++ b/src/modules/m_samode.c @@ -82,24 +82,25 @@ DLLFUNC CMD_FUNC(m_samode) { aChannel *chptr; - if (!IsPrivileged(cptr) || !IsSAdmin(sptr)) + if (parc > 2) + { + chptr = find_channel(parv[1], NullChn); + if (chptr == NullChn) + return 0; + } + else + { + sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), + me.name, parv[0], "SAMODE"); + return 0; + } + + if ((!IsPrivileged(cptr) || !IsSAdmin(sptr)) && !OperClass_evaluateACLPath(sptr->user->operlogin,"samode",sptr,NULL,chptr,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; } - if (parc > 2) - { - chptr = find_channel(parv[1], NullChn); - if (chptr == NullChn) - return 0; - } - else - { - sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), - me.name, parv[0], "SAMODE"); - return 0; - } opermode = 0; (void)do_mode(chptr, cptr, sptr, parc - 2, parv + 2, 0, 1); From 2d622996ad91339d839f443d629040085e66e67c Mon Sep 17 00:00:00 2001 From: Travis McArthur Date: Sat, 13 Jun 2015 19:28:04 -0400 Subject: [PATCH 03/10] Fix typo --- src/modules/m_sajoin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/m_sajoin.c b/src/modules/m_sajoin.c index 46ea9e1c2..6ec41afa1 100644 --- a/src/modules/m_sajoin.c +++ b/src/modules/m_sajoin.c @@ -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,chptr,NULL,NULL)) + if (!IsSAdmin(sptr) && !IsULine(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"sajoin",sptr,acptr,chptr,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); continue; From 8bb239bc88fa241a4b88ee80b44c60d952d07f93 Mon Sep 17 00:00:00 2001 From: Travis McArthur Date: Sat, 13 Jun 2015 19:28:11 -0400 Subject: [PATCH 04/10] Add ACL checks for sapart --- src/modules/m_sapart.c | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/modules/m_sapart.c b/src/modules/m_sapart.c index 545a14e7c..8e0d6873b 100644 --- a/src/modules/m_sapart.c +++ b/src/modules/m_sapart.c @@ -92,24 +92,25 @@ DLLFUNC CMD_FUNC(m_sapart) char commentx[512]; char jbuf[BUFSIZE]; - if (!IsSAdmin(sptr) && !IsULine(sptr)) + if (parc < 3) + { + sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "SAPART"); + return 0; + } + + if (!(acptr = find_person(parv[1], NULL))) + { + sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], parv[1]); + return 0; + } + + /* 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)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; } - if (parc < 3) - { - sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "SAPART"); - return 0; - } - - if (!(acptr = find_person(parv[1], NULL))) - { - sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], parv[1]); - return 0; - } - if (MyClient(acptr)) { /* Now works like m_join */ @@ -124,6 +125,14 @@ DLLFUNC CMD_FUNC(m_sapart) name); continue; } + + /* Validate oper can do this on chan/victim */ + if (!IsSAdmin(sptr) && !IsULine(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"sapart",sptr,acptr,chptr,NULL)) + { + sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); + continue; + } + if (!(lp = find_membership_link(acptr->user->channel, chptr))) { sendto_one(sptr, err_str(ERR_USERNOTINCHANNEL), me.name, parv[0], From 6578b8bfaa5e887360d70c135796f5a8da628946 Mon Sep 17 00:00:00 2001 From: Travis McArthur Date: Sat, 13 Jun 2015 19:33:23 -0400 Subject: [PATCH 05/10] Add ACL Protection to addmotd --- src/modules/m_addmotd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/m_addmotd.c b/src/modules/m_addmotd.c index 6a9d33e5a..d356fdbb3 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))) + if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"add:motd",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; From 9dffcf6885e203561131ffd6ecfc8eeeb668ee5a Mon Sep 17 00:00:00 2001 From: Travis McArthur Date: Sat, 13 Jun 2015 19:34:51 -0400 Subject: [PATCH 06/10] Add ACL support to addomotd --- src/modules/m_addomotd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/m_addomotd.c b/src/modules/m_addomotd.c index 20175d290..d1ede40aa 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))) + if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"add:omotd",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; From 421400f55242ea56c6fb455ca9928c3bb7c5454f Mon Sep 17 00:00:00 2001 From: Travis McArthur Date: Sat, 13 Jun 2015 19:35:46 -0400 Subject: [PATCH 07/10] Add ACL to adminchat --- src/modules/m_adminchat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/m_adminchat.c b/src/modules/m_adminchat.c index 894dfd418..c5e4ec0c5 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)) + if (MyClient(sptr) && !IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"chat:admin",sptr,NULL,NULL,NULL)) #else if (MyClient(sptr)) #endif From 81e7c0546372c572e70e4fd309479c200e9bf9ad Mon Sep 17 00:00:00 2001 From: Travis McArthur Date: Sat, 13 Jun 2015 19:36:30 -0400 Subject: [PATCH 08/10] Add ACL support to wallops --- src/modules/m_wallops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/m_wallops.c b/src/modules/m_wallops.c index b10fe90d3..a2dc18f40 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)) + if (MyClient(sptr) && !OPCanWallOps(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"chat:wallops",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0; From 3a83c0e7474dc1df8913b30e5adfba19f0504239 Mon Sep 17 00:00:00 2001 From: Travis McArthur Date: Sat, 13 Jun 2015 19:37:10 -0400 Subject: [PATCH 09/10] Add ACL support to sdesc --- src/modules/m_sdesc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/m_sdesc.c b/src/modules/m_sdesc.c index 236df7b96..6ac307edb 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)) + if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"add:description",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, sptr->name); return 0; From 8d8d069b6ff24a2a5280e22a499f39c8a0b9d0a4 Mon Sep 17 00:00:00 2001 From: Travis McArthur Date: Sat, 13 Jun 2015 19:38:58 -0400 Subject: [PATCH 10/10] Add ACL support to tsctl - may want to change namespace --- src/modules/m_tsctl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/m_tsctl.c b/src/modules/m_tsctl.c index 46ac56231..e5a81ffa0 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)) + if (!IsAdmin(sptr) && !IsCoAdmin(sptr) && !OperClass_evaluateACLPath(sptr->user->operlogin,"tsctl",sptr,NULL,NULL,NULL)) { sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]); return 0;