diff options
| author | Adam <Adam@drink-coca-cola.info> | 2010-05-17 23:48:18 -0400 |
|---|---|---|
| committer | Adam <Adam@anope.org> | 2010-06-18 21:03:43 -0400 |
| commit | cab6fcc82d2d184339bfe5ed0eba22482a404ad8 (patch) | |
| tree | 29df26a375cbaa29d0c6023ad3478b28a826c307 /src/core | |
| parent | 17ab4104005cc5098d9152e6c90d54977222dd06 (diff) | |
Added a founder access level used to determin who is a channel founder. This is completely independant of the owner levels
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/bs_info.c | 2 | ||||
| -rw-r--r-- | src/core/cs_access.c | 28 | ||||
| -rw-r--r-- | src/core/cs_akick.c | 2 | ||||
| -rw-r--r-- | src/core/cs_drop.c | 4 | ||||
| -rw-r--r-- | src/core/cs_modes.c | 4 | ||||
| -rw-r--r-- | src/core/cs_set.c | 6 | ||||
| -rw-r--r-- | src/core/cs_xop.c | 6 |
7 files changed, 28 insertions, 24 deletions
diff --git a/src/core/bs_info.c b/src/core/bs_info.c index 3f873aafd..f7d6fb46d 100644 --- a/src/core/bs_info.c +++ b/src/core/bs_info.c @@ -78,7 +78,7 @@ class CommandBSInfo : public Command } else if ((ci = cs_findchan(query))) { - if (!IsFounder(u, ci) && !u->Account()->HasPriv("botserv/administration")) + if (!check_access(u, ci, CA_FOUNDER) && !u->Account()->HasPriv("botserv/administration")) { notice_lang(Config.s_BotServ, u, ACCESS_DENIED); return MOD_CONT; diff --git a/src/core/cs_access.c b/src/core/cs_access.c index f49fca990..6ef238b71 100644 --- a/src/core/cs_access.c +++ b/src/core/cs_access.c @@ -416,7 +416,7 @@ class CommandCSAccess : public Command return MOD_CONT; } - if (!IsFounder(u, ci) && !u->Account()->HasPriv("chanserv/access/modify")) + if (!check_access(u, ci, CA_FOUNDER) && !u->Account()->HasPriv("chanserv/access/modify")) { notice_lang(Config.s_ChanServ, u, ACCESS_DENIED); return MOD_CONT; @@ -474,7 +474,7 @@ class CommandCSLevels : public Command this->OnSyntaxError(u, cmd); else if (ci->HasFlag(CI_XOP)) notice_lang(Config.s_ChanServ, u, CHAN_LEVELS_XOP); - else if (!IsFounder(u, ci) && !u->Account()->HasPriv("chanserv/access/modify")) + else if (!check_access(u, ci, CA_FOUNDER) && !u->Account()->HasPriv("chanserv/access/modify")) notice_lang(Config.s_ChanServ, u, ACCESS_DENIED); else if (cmd == "SET") { level = strtol(s, &error, 10); @@ -514,16 +514,20 @@ class CommandCSLevels : public Command notice_lang(Config.s_ChanServ, u, CHAN_LEVELS_UNKNOWN, what, Config.s_ChanServ); } else if (cmd == "DIS" || cmd == "DISABLE") { - for (i = 0; levelinfo[i].what >= 0; i++) { - if (stricmp(levelinfo[i].name, what) == 0) { - ci->levels[levelinfo[i].what] = ACCESS_INVALID; - FOREACH_MOD(I_OnLevelChange, OnLevelChange(u, ci, i, levelinfo[i].what)); - - Alog() << Config.s_ChanServ << ": " << u->GetMask() << " disabled level " << levelinfo[i].name - << " on channel " << ci->name; - notice_lang(Config.s_ChanServ, u, CHAN_LEVELS_DISABLED, - levelinfo[i].name, chan); - return MOD_CONT; + /* Don't allow disabling of the founder level. It would be hard to change it back if you dont have access to use this command */ + if (stricmp(what, "FOUNDER")) + { + for (i = 0; levelinfo[i].what >= 0; i++) { + if (stricmp(levelinfo[i].name, what) == 0) { + ci->levels[levelinfo[i].what] = ACCESS_INVALID; + FOREACH_MOD(I_OnLevelChange, OnLevelChange(u, ci, i, levelinfo[i].what)); + + Alog() << Config.s_ChanServ << ": " << u->GetMask() << " disabled level " << levelinfo[i].name + << " on channel " << ci->name; + notice_lang(Config.s_ChanServ, u, CHAN_LEVELS_DISABLED, + levelinfo[i].name, chan); + return MOD_CONT; + } } } diff --git a/src/core/cs_akick.c b/src/core/cs_akick.c index 42b79c362..3d56e4846 100644 --- a/src/core/cs_akick.c +++ b/src/core/cs_akick.c @@ -224,7 +224,7 @@ class CommandCSAKick : public Command { User *u2 = it->second; - if (IsFounder(u2, ci) || (get_access(u2, ci) >= get_access(u, ci))) + if (check_access(u2, ci, CA_FOUNDER) || (get_access(u2, ci) >= get_access(u, ci))) { if (match_usermask(mask.c_str(), u2)) { diff --git a/src/core/cs_drop.c b/src/core/cs_drop.c index f7c7a8571..baae58026 100644 --- a/src/core/cs_drop.c +++ b/src/core/cs_drop.c @@ -48,7 +48,7 @@ class CommandCSDrop : public Command return MOD_CONT; } - if ((ci->HasFlag(CI_SECUREFOUNDER) ? !IsRealFounder(u, ci) : !IsFounder(u, ci)) && !u->Account()->HasCommand("chanserv/drop")) + if ((ci->HasFlag(CI_SECUREFOUNDER) ? !IsFounder(u, ci) : !check_access(u, ci, CA_FOUNDER)) && !u->Account()->HasCommand("chanserv/drop")) { notice_lang(Config.s_ChanServ, u, ACCESS_DENIED); return MOD_CONT; @@ -78,7 +78,7 @@ class CommandCSDrop : public Command * drop the channel before issuing the wallops. */ if (Config.WallDrop) { - if ((level < ACCESS_FOUNDER) || (!IsRealFounder(u, ci) && ci->HasFlag(CI_SECUREFOUNDER))) + if ((level < ACCESS_FOUNDER) || (!IsFounder(u, ci) && ci->HasFlag(CI_SECUREFOUNDER))) ircdproto->SendGlobops(ChanServ, "\2%s\2 used DROP on channel \2%s\2", u->nick.c_str(), chan); } diff --git a/src/core/cs_modes.c b/src/core/cs_modes.c index 3480ca1b6..312bc55dc 100644 --- a/src/core/cs_modes.c +++ b/src/core/cs_modes.c @@ -381,7 +381,7 @@ class CSModes : public Module this->AddCommand(ChanServ, new CommandCSDeVoice()); if (Me && Me->IsSynced()) - OnUplinkSync(); + OnUplinkSync(NULL); Implementation i[] = { I_OnUplinkSync, I_OnServerDisconnect, I_OnChanServHelp @@ -389,7 +389,7 @@ class CSModes : public Module ModuleManager::Attach(i, this, 3); } - void OnUplinkSync() + void OnUplinkSync(Server *) { if (ModeManager::FindChannelModeByName(CMODE_OWNER)) { diff --git a/src/core/cs_set.c b/src/core/cs_set.c index 75850f453..07171bdc1 100644 --- a/src/core/cs_set.c +++ b/src/core/cs_set.c @@ -645,14 +645,14 @@ class CommandCSSet : public Command notice_lang(Config.s_ChanServ, u, ACCESS_DENIED); else if (cmd == "FOUNDER") { - if (!is_servadmin && (ci->HasFlag(CI_SECUREFOUNDER) ? !IsRealFounder(u, ci) : !IsFounder(u, ci))) + if (!is_servadmin && (ci->HasFlag(CI_SECUREFOUNDER) ? !IsFounder(u, ci) : !check_access(u, ci, CA_FOUNDER))) notice_lang(Config.s_ChanServ, u, ACCESS_DENIED); else DoSetFounder(u, ci, param); } else if (cmd == "SUCCESSOR") { - if (!is_servadmin && (ci->HasFlag(CI_SECUREFOUNDER) ? !IsRealFounder(u, ci) : !IsFounder(u, ci))) + if (!is_servadmin && (ci->HasFlag(CI_SECUREFOUNDER) ? !IsFounder(u, ci) : !check_access(u, ci, CA_FOUNDER))) notice_lang(Config.s_ChanServ, u, ACCESS_DENIED); else DoSetSuccessor(u, ci, param); @@ -681,7 +681,7 @@ class CommandCSSet : public Command DoSetSecureOps(u, ci, param); else if (cmd == "SECUREFOUNDER") { - if (!is_servadmin && (ci->HasFlag(CI_SECUREFOUNDER) ? !IsRealFounder(u, ci) : !IsFounder(u, ci))) + if (!is_servadmin && (ci->HasFlag(CI_SECUREFOUNDER) ? !IsFounder(u, ci) : !check_access(u, ci, CA_FOUNDER))) notice_lang(Config.s_ChanServ, u, ACCESS_DENIED); else DoSetSecureFounder(u, ci, param); diff --git a/src/core/cs_xop.c b/src/core/cs_xop.c index eb4a76c47..c25bf02e2 100644 --- a/src/core/cs_xop.c +++ b/src/core/cs_xop.c @@ -421,7 +421,7 @@ class XOPBase : public Command return MOD_CONT; } - if (!IsFounder(u, ci) && !u->Account()->HasPriv("chanserv/access/modify")) + if (!check_access(u, ci, CA_FOUNDER) && !u->Account()->HasPriv("chanserv/access/modify")) { notice_lang(Config.s_ChanServ, u, ACCESS_DENIED); return MOD_CONT; @@ -612,7 +612,7 @@ class CSXOP : public Module this->AddCommand(ChanServ, new CommandCSVOP()); if (Me && Me->IsSynced()) - OnUplinkSync(); + OnUplinkSync(NULL); Implementation i[] = { I_OnUplinkSync, I_OnServerDisconnect, I_OnChanServHelp @@ -620,7 +620,7 @@ class CSXOP : public Module ModuleManager::Attach(i, this, 3); } - void OnUplinkSync() + void OnUplinkSync(Server *) { if (ModeManager::FindChannelModeByName(CMODE_OWNER)) this->AddCommand(ChanServ, new CommandCSQOP()); |
