mirror of
https://github.com/anope/anope.git
synced 2026-07-05 04:33:12 +02:00
Rewrote the config reader to better handle invalid configs.
This prevents Anope from exploding when /os reload has errors.
This commit is contained in:
+41
-41
@@ -65,7 +65,7 @@ class AkickListCallback : public NumberList
|
||||
~AkickListCallback()
|
||||
{
|
||||
if (!SentHeader)
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_NO_MATCH, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_NO_MATCH, ci->name.c_str());
|
||||
}
|
||||
|
||||
virtual void HandleNumber(unsigned Number)
|
||||
@@ -76,7 +76,7 @@ class AkickListCallback : public NumberList
|
||||
if (!SentHeader)
|
||||
{
|
||||
SentHeader = true;
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_LIST_HEADER, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_LIST_HEADER, ci->name.c_str());
|
||||
}
|
||||
|
||||
DoList(u, ci, Number - 1, ci->GetAkick(Number - 1));
|
||||
@@ -84,7 +84,7 @@ class AkickListCallback : public NumberList
|
||||
|
||||
static void DoList(User *u, ChannelInfo *ci, unsigned index, AutoKick *akick)
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_LIST_FORMAT, index + 1, akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() :akick->mask.c_str(), !akick->reason.empty() ? akick->reason.c_str() : getstring(u, NO_REASON));
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_LIST_FORMAT, index + 1, akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() :akick->mask.c_str(), !akick->reason.empty() ? akick->reason.c_str() : getstring(u, NO_REASON));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -103,7 +103,7 @@ class AkickViewCallback : public AkickListCallback
|
||||
if (!SentHeader)
|
||||
{
|
||||
SentHeader = true;
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_LIST_HEADER, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_LIST_HEADER, ci->name.c_str());
|
||||
}
|
||||
|
||||
DoList(u, ci, Number - 1, ci->GetAkick(Number - 1));
|
||||
@@ -122,14 +122,14 @@ class AkickViewCallback : public AkickListCallback
|
||||
else
|
||||
snprintf(timebuf, sizeof(timebuf), "%s", getstring(u, UNKNOWN));
|
||||
|
||||
notice_lang(Config.s_ChanServ, u, akick->HasFlag(AK_STUCK) ? CHAN_AKICK_VIEW_FORMAT_STUCK : CHAN_AKICK_VIEW_FORMAT, index + 1, akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() : akick->mask.c_str(), !akick->creator.empty() ? akick->creator.c_str() : getstring(u, UNKNOWN), timebuf, !akick->reason.empty() ? akick->reason.c_str() : getstring(u, NO_REASON));
|
||||
notice_lang(Config->s_ChanServ, u, akick->HasFlag(AK_STUCK) ? CHAN_AKICK_VIEW_FORMAT_STUCK : CHAN_AKICK_VIEW_FORMAT, index + 1, akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() : akick->mask.c_str(), !akick->creator.empty() ? akick->creator.c_str() : getstring(u, UNKNOWN), timebuf, !akick->reason.empty() ? akick->reason.c_str() : getstring(u, NO_REASON));
|
||||
|
||||
if (akick->last_used)
|
||||
{
|
||||
char last_used[64];
|
||||
tm = *localtime(&akick->last_used);
|
||||
strftime_lang(last_used, sizeof(last_used), u, STRFTIME_SHORT_DATE_FORMAT, &tm);
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_LAST_USED, last_used);
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_LAST_USED, last_used);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -147,11 +147,11 @@ class AkickDelCallback : public NumberList
|
||||
~AkickDelCallback()
|
||||
{
|
||||
if (!Deleted)
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_NO_MATCH, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_NO_MATCH, ci->name.c_str());
|
||||
else if (Deleted == 1)
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_DELETED_ONE, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_DELETED_ONE, ci->name.c_str());
|
||||
else
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_DELETED_SEVERAL, Deleted, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_DELETED_SEVERAL, Deleted, ci->name.c_str());
|
||||
}
|
||||
|
||||
void HandleNumber(unsigned Number)
|
||||
@@ -185,7 +185,7 @@ class CommandCSAKick : public Command
|
||||
{
|
||||
if (na->HasFlag(NS_FORBIDDEN))
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, NICK_X_FORBIDDEN, mask.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, NICK_X_FORBIDDEN, mask.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -195,7 +195,7 @@ class CommandCSAKick : public Command
|
||||
/* Check excepts BEFORE we get this far */
|
||||
if (ModeManager::FindChannelModeByName(CMODE_EXCEPT) && is_excepted_mask(ci, mask))
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_EXCEPTED, mask.c_str(), ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_EXCEPTED, mask.c_str(), ci->name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -205,7 +205,7 @@ class CommandCSAKick : public Command
|
||||
{
|
||||
if (nc == ci->founder || get_access_level(ci, nc) >= get_access(u, ci))
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, ACCESS_DENIED);
|
||||
notice_lang(Config->s_ChanServ, u, ACCESS_DENIED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -219,7 +219,7 @@ class CommandCSAKick : public Command
|
||||
|
||||
if ((check_access(u2, ci, CA_FOUNDER) || get_access(u2, ci) >= get_access(u, ci)) && match_usermask(mask, u2))
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, ACCESS_DENIED);
|
||||
notice_lang(Config->s_ChanServ, u, ACCESS_DENIED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -238,7 +238,7 @@ class CommandCSAKick : public Command
|
||||
Anope::string buf = na2->nick + "!" + na2->last_usermask;
|
||||
if (Anope::Match(buf, mask))
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, ACCESS_DENIED);
|
||||
notice_lang(Config->s_ChanServ, u, ACCESS_DENIED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -250,14 +250,14 @@ class CommandCSAKick : public Command
|
||||
akick = ci->GetAkick(j);
|
||||
if (akick->HasFlag(AK_ISNICK) ? akick->nc == nc : mask.equals_ci(akick->mask))
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_ALREADY_EXISTS, akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() : akick->mask.c_str(), ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_ALREADY_EXISTS, akick->HasFlag(AK_ISNICK) ? akick->nc->display.c_str() : akick->mask.c_str(), ci->name.c_str());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (ci->GetAkickCount() >= Config.CSAutokickMax)
|
||||
if (ci->GetAkickCount() >= Config->CSAutokickMax)
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_REACHED_LIMIT, Config.CSAutokickMax);
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_REACHED_LIMIT, Config->CSAutokickMax);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -268,7 +268,7 @@ class CommandCSAKick : public Command
|
||||
|
||||
FOREACH_MOD(I_OnAkickAdd, OnAkickAdd(u, ci, akick));
|
||||
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_ADDED, mask.c_str(), ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_ADDED, mask.c_str(), ci->name.c_str());
|
||||
|
||||
this->DoEnforce(u, ci);
|
||||
}
|
||||
@@ -283,7 +283,7 @@ class CommandCSAKick : public Command
|
||||
|
||||
if (!ci->GetAkickCount())
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_LIST_EMPTY, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_LIST_EMPTY, ci->name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -302,12 +302,12 @@ class CommandCSAKick : public Command
|
||||
|
||||
if (i == end)
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_NOT_FOUND, mask.c_str(), ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_NOT_FOUND, mask.c_str(), ci->name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
akick->SetFlag(AK_STUCK);
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_STUCK, akick->mask.c_str(), ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_STUCK, akick->mask.c_str(), ci->name.c_str());
|
||||
|
||||
if (ci->c)
|
||||
stick_mask(ci, akick);
|
||||
@@ -323,7 +323,7 @@ class CommandCSAKick : public Command
|
||||
|
||||
if (!ci->GetAkickCount())
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_LIST_EMPTY, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_LIST_EMPTY, ci->name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -342,12 +342,12 @@ class CommandCSAKick : public Command
|
||||
|
||||
if (i == end)
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_NOT_FOUND, mask.c_str(), ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_NOT_FOUND, mask.c_str(), ci->name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
akick->UnsetFlag(AK_STUCK);
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_UNSTUCK, akick->mask.c_str(), ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_UNSTUCK, akick->mask.c_str(), ci->name.c_str());
|
||||
}
|
||||
|
||||
void DoDel(User *u, ChannelInfo *ci, const std::vector<Anope::string> ¶ms)
|
||||
@@ -358,7 +358,7 @@ class CommandCSAKick : public Command
|
||||
|
||||
if (!ci->GetAkickCount())
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_LIST_EMPTY, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_LIST_EMPTY, ci->name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -383,13 +383,13 @@ class CommandCSAKick : public Command
|
||||
|
||||
if (i == ci->GetAkickCount())
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_NOT_FOUND, mask.c_str(), ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_NOT_FOUND, mask.c_str(), ci->name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
ci->EraseAkick(i);
|
||||
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_DELETED, mask.c_str(), ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_DELETED, mask.c_str(), ci->name.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -399,7 +399,7 @@ class CommandCSAKick : public Command
|
||||
|
||||
if (!ci->GetAkickCount())
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_LIST_EMPTY, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_LIST_EMPTY, ci->name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -427,14 +427,14 @@ class CommandCSAKick : public Command
|
||||
if (!SentHeader)
|
||||
{
|
||||
SentHeader = true;
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_LIST_HEADER, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_LIST_HEADER, ci->name.c_str());
|
||||
}
|
||||
|
||||
AkickListCallback::DoList(u, ci, i, akick);
|
||||
}
|
||||
|
||||
if (!SentHeader)
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_NO_MATCH, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_NO_MATCH, ci->name.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -444,7 +444,7 @@ class CommandCSAKick : public Command
|
||||
|
||||
if (!ci->GetAkickCount())
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_LIST_EMPTY, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_LIST_EMPTY, ci->name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -472,14 +472,14 @@ class CommandCSAKick : public Command
|
||||
if (!SentHeader)
|
||||
{
|
||||
SentHeader = true;
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_LIST_HEADER, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_LIST_HEADER, ci->name.c_str());
|
||||
}
|
||||
|
||||
AkickViewCallback::DoList(u, ci, i, akick);
|
||||
}
|
||||
|
||||
if (!SentHeader)
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_NO_MATCH, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_NO_MATCH, ci->name.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -490,7 +490,7 @@ class CommandCSAKick : public Command
|
||||
|
||||
if (!c)
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_X_NOT_IN_USE, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_X_NOT_IN_USE, ci->name.c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -502,13 +502,13 @@ class CommandCSAKick : public Command
|
||||
++count;
|
||||
}
|
||||
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_ENFORCE_DONE, ci->name.c_str(), count);
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_ENFORCE_DONE, ci->name.c_str(), count);
|
||||
}
|
||||
|
||||
void DoClear(User *u, ChannelInfo *ci)
|
||||
{
|
||||
ci->ClearAkick();
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_CLEAR, ci->name.c_str());
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_CLEAR, ci->name.c_str());
|
||||
}
|
||||
|
||||
public:
|
||||
@@ -527,9 +527,9 @@ class CommandCSAKick : public Command
|
||||
if (mask.empty() && (cmd.equals_ci("ADD") || cmd.equals_ci("STICK") || cmd.equals_ci("UNSTICK") || cmd.equals_ci("DEL")))
|
||||
this->OnSyntaxError(u, cmd);
|
||||
else if (!check_access(u, ci, CA_AKICK) && !u->Account()->HasPriv("chanserv/access/modify"))
|
||||
notice_lang(Config.s_ChanServ, u, ACCESS_DENIED);
|
||||
notice_lang(Config->s_ChanServ, u, ACCESS_DENIED);
|
||||
else if (!cmd.equals_ci("LIST") && !cmd.equals_ci("VIEW") && !cmd.equals_ci("ENFORCE") && readonly)
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_AKICK_DISABLED);
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_AKICK_DISABLED);
|
||||
else if (cmd.equals_ci("ADD"))
|
||||
this->DoAdd(u, ci, params);
|
||||
else if (cmd.equals_ci("STICK"))
|
||||
@@ -554,18 +554,18 @@ class CommandCSAKick : public Command
|
||||
|
||||
bool OnHelp(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
notice_help(Config.s_ChanServ, u, CHAN_HELP_AKICK);
|
||||
notice_help(Config->s_ChanServ, u, CHAN_HELP_AKICK);
|
||||
return true;
|
||||
}
|
||||
|
||||
void OnSyntaxError(User *u, const Anope::string &subcommand)
|
||||
{
|
||||
syntax_error(Config.s_ChanServ, u, "AKICK", CHAN_AKICK_SYNTAX);
|
||||
syntax_error(Config->s_ChanServ, u, "AKICK", CHAN_AKICK_SYNTAX);
|
||||
}
|
||||
|
||||
void OnServHelp(User *u)
|
||||
{
|
||||
notice_lang(Config.s_ChanServ, u, CHAN_HELP_CMD_AKICK);
|
||||
notice_lang(Config->s_ChanServ, u, CHAN_HELP_CMD_AKICK);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user