1
0
mirror of https://github.com/anope/anope.git synced 2026-07-03 15:13:14 +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:
Adam
2010-08-17 19:27:37 -04:00
parent 2575008baa
commit e65d8b2f3d
195 changed files with 3133 additions and 3249 deletions
+62 -62
View File
@@ -24,8 +24,8 @@ class CommandNSConfirm : public Command
if (!na)
{
Alog() << Config.s_NickServ << ": makenick(" << u->nick << ") failed";
notice_lang(Config.s_NickServ, u, NICK_REGISTRATION_FAILED);
Alog() << Config->s_NickServ << ": makenick(" << u->nick << ") failed";
notice_lang(Config->s_NickServ, u, NICK_REGISTRATION_FAILED);
return MOD_CONT;
}
@@ -33,7 +33,7 @@ class CommandNSConfirm : public Command
na->nc->pass = nr->password;
na->nc->memos.memomax = Config.MSMaxMemos;
na->nc->memos.memomax = Config->MSMaxMemos;
if (force)
{
@@ -45,37 +45,37 @@ class CommandNSConfirm : public Command
Anope::string last_usermask = u->GetIdent() + "@" + u->GetDisplayedHost();
na->last_usermask = last_usermask;
na->last_realname = u->realname;
if (Config.NSAddAccessOnReg)
if (Config->NSAddAccessOnReg)
na->nc->AddAccess(create_mask(u));
}
na->time_registered = na->last_seen = time(NULL);
na->nc->language = Config.NSDefLanguage;
na->nc->language = Config->NSDefLanguage;
if (!nr->email.empty())
na->nc->email = nr->email;
if (!force)
{
u->Login(na->nc);
Alog() << Config.s_NickServ << ": '" << u->nick << "' registered by " << u->GetIdent() << "@" << u->host << " (e-mail: " << (!nr->email.empty() ? nr->email : "none") << ")";
if (Config.NSAddAccessOnReg)
notice_lang(Config.s_NickServ, u, NICK_REGISTERED, u->nick.c_str(), na->nc->GetAccess(0).c_str());
Alog() << Config->s_NickServ << ": '" << u->nick << "' registered by " << u->GetIdent() << "@" << u->host << " (e-mail: " << (!nr->email.empty() ? nr->email : "none") << ")";
if (Config->NSAddAccessOnReg)
notice_lang(Config->s_NickServ, u, NICK_REGISTERED, u->nick.c_str(), na->nc->GetAccess(0).c_str());
else
notice_lang(Config.s_NickServ, u, NICK_REGISTERED_NO_MASK, u->nick.c_str());
notice_lang(Config->s_NickServ, u, NICK_REGISTERED_NO_MASK, u->nick.c_str());
delete nr;
ircdproto->SendAccountLogin(u, u->Account());
ircdproto->SetAutoIdentificationToken(u);
if (enc_decrypt(na->nc->pass, tmp_pass) == 1)
notice_lang(Config.s_NickServ, u, NICK_PASSWORD_IS, tmp_pass.c_str());
notice_lang(Config->s_NickServ, u, NICK_PASSWORD_IS, tmp_pass.c_str());
u->lastnickreg = time(NULL);
}
else
{
Alog() << Config.s_NickServ << ": '" << nr->nick << "' confirmed by " << u->GetMask() << " (email: " << (!nr->email.empty() ? nr->email : "none") << " )";
notice_lang(Config.s_NickServ, u, NICK_FORCE_REG, nr->nick.c_str());
Alog() << Config->s_NickServ << ": '" << nr->nick << "' confirmed by " << u->GetMask() << " (email: " << (!nr->email.empty() ? nr->email : "none") << " )";
notice_lang(Config->s_NickServ, u, NICK_FORCE_REG, nr->nick.c_str());
User *user = finduser(nr->nick);
/* Delrequest must be called before validate_user */
delete nr;
@@ -94,7 +94,7 @@ class CommandNSConfirm : public Command
NickRequest *nr = findrequestnick(u->nick);
if (Config.NSEmailReg)
if (Config->NSEmailReg)
{
if (passcode.empty())
{
@@ -115,21 +115,21 @@ class CommandNSConfirm : public Command
return MOD_CONT;
}
}
notice_lang(Config.s_NickServ, u, NICK_CONFIRM_NOT_FOUND, Config.s_NickServ.c_str());
notice_lang(Config->s_NickServ, u, NICK_CONFIRM_NOT_FOUND, Config->s_NickServ.c_str());
return MOD_CONT;
}
if (!nr->passcode.equals_cs(passcode))
{
notice_lang(Config.s_NickServ, u, NICK_CONFIRM_INVALID);
notice_lang(Config->s_NickServ, u, NICK_CONFIRM_INVALID);
return MOD_CONT;
}
}
if (!nr)
{
notice_lang(Config.s_NickServ, u, NICK_REGISTRATION_FAILED);
notice_lang(Config->s_NickServ, u, NICK_REGISTRATION_FAILED);
return MOD_CONT;
}
@@ -150,20 +150,20 @@ class CommandNSConfirm : public Command
bool OnHelp(User *u, const Anope::string &subcommand)
{
notice_help(Config.s_NickServ, u, NICK_HELP_CONFIRM);
notice_help(Config->s_NickServ, u, NICK_HELP_CONFIRM);
if (u->Account() && u->Account()->HasPriv("nickserv/confirm"))
notice_help(Config.s_NickServ, u, NICK_HELP_CONFIRM_OPER);
notice_help(Config->s_NickServ, u, NICK_HELP_CONFIRM_OPER);
return true;
}
void OnSyntaxError(User *u, const Anope::string &subcommand)
{
notice_lang(Config.s_NickServ, u, NICK_CONFIRM_INVALID);
notice_lang(Config->s_NickServ, u, NICK_CONFIRM_INVALID);
}
void OnServHelp(User *u)
{
notice_lang(Config.s_NickServ, u, NICK_HELP_CMD_CONFIRM);
notice_lang(Config->s_NickServ, u, NICK_HELP_CMD_CONFIRM);
}
};
@@ -179,7 +179,7 @@ class CommandNSRegister : public CommandNSConfirm
{
NickRequest *nr = NULL, *anr = NULL;
NickAlias *na;
size_t prefixlen = Config.NSGuestNickPrefix.length();
size_t prefixlen = Config->NSGuestNickPrefix.length();
size_t nicklen = u->nick.length();
Anope::string pass = params[0];
Anope::string email = params.size() > 1 ? params[1] : "";
@@ -196,19 +196,19 @@ class CommandNSRegister : public CommandNSConfirm
if (readonly)
{
notice_lang(Config.s_NickServ, u, NICK_REGISTRATION_DISABLED);
notice_lang(Config->s_NickServ, u, NICK_REGISTRATION_DISABLED);
return MOD_CONT;
}
if (!is_oper(u) && Config.NickRegDelay && time(NULL) - u->my_signon < Config.NickRegDelay)
if (!is_oper(u) && Config->NickRegDelay && time(NULL) - u->my_signon < Config->NickRegDelay)
{
notice_lang(Config.s_NickServ, u, NICK_REG_DELAY, Config.NickRegDelay);
notice_lang(Config->s_NickServ, u, NICK_REG_DELAY, Config->NickRegDelay);
return MOD_CONT;
}
if ((anr = findrequestnick(u->nick)))
{
notice_lang(Config.s_NickServ, u, NICK_REQUESTED);
notice_lang(Config->s_NickServ, u, NICK_REQUESTED);
return MOD_CONT;
}
@@ -217,51 +217,51 @@ class CommandNSRegister : public CommandNSConfirm
/* Guest nick can now have a series of between 1 and 7 digits.
* --lara
*/
if (nicklen <= prefixlen + 7 && nicklen >= prefixlen + 1 && !u->nick.find_ci(Config.NSGuestNickPrefix) && !u->nick.substr(prefixlen).find_first_not_of("1234567890"))
if (nicklen <= prefixlen + 7 && nicklen >= prefixlen + 1 && !u->nick.find_ci(Config->NSGuestNickPrefix) && !u->nick.substr(prefixlen).find_first_not_of("1234567890"))
{
notice_lang(Config.s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick.c_str());
notice_lang(Config->s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick.c_str());
return MOD_CONT;
}
if (!ircdproto->IsNickValid(u->nick))
{
notice_lang(Config.s_NickServ, u, NICK_X_FORBIDDEN, u->nick.c_str());
notice_lang(Config->s_NickServ, u, NICK_X_FORBIDDEN, u->nick.c_str());
return MOD_CONT;
}
if (Config.RestrictOperNicks)
for (it = Config.Opers.begin(), it_end = Config.Opers.end(); it != it_end; ++it)
if (Config->RestrictOperNicks)
for (it = Config->Opers.begin(), it_end = Config->Opers.end(); it != it_end; ++it)
{
Anope::string nick = it->first;
if (u->nick.find_ci(nick) != Anope::string::npos && !is_oper(u))
{
notice_lang(Config.s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick.c_str());
notice_lang(Config->s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick.c_str());
return MOD_CONT;
}
}
if (Config.NSForceEmail && email.empty())
if (Config->NSForceEmail && email.empty())
this->OnSyntaxError(u, "");
else if (time(NULL) < u->lastnickreg + Config.NSRegDelay)
notice_lang(Config.s_NickServ, u, NICK_REG_PLEASE_WAIT, (u->lastnickreg + Config.NSRegDelay) - time(NULL));
else if (time(NULL) < u->lastnickreg + Config->NSRegDelay)
notice_lang(Config->s_NickServ, u, NICK_REG_PLEASE_WAIT, (u->lastnickreg + Config->NSRegDelay) - time(NULL));
else if ((na = findnick(u->nick)))
{
/* i.e. there's already such a nick regged */
if (na->HasFlag(NS_FORBIDDEN))
{
Alog() << Config.s_NickServ << ": " << u->GetIdent() << "@" << u->host << " tried to register FORBIDden nick " << u->nick;
notice_lang(Config.s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick.c_str());
Alog() << Config->s_NickServ << ": " << u->GetIdent() << "@" << u->host << " tried to register FORBIDden nick " << u->nick;
notice_lang(Config->s_NickServ, u, NICK_CANNOT_BE_REGISTERED, u->nick.c_str());
}
else
notice_lang(Config.s_NickServ, u, NICK_ALREADY_REGISTERED, u->nick.c_str());
notice_lang(Config->s_NickServ, u, NICK_ALREADY_REGISTERED, u->nick.c_str());
}
else if (pass.equals_ci(u->nick) || (Config.StrictPasswords && pass.length() < 5))
notice_lang(Config.s_NickServ, u, MORE_OBSCURE_PASSWORD);
else if (pass.length() > Config.PassLen)
notice_lang(Config.s_NickServ, u, PASSWORD_TOO_LONG);
else if (pass.equals_ci(u->nick) || (Config->StrictPasswords && pass.length() < 5))
notice_lang(Config->s_NickServ, u, MORE_OBSCURE_PASSWORD);
else if (pass.length() > Config->PassLen)
notice_lang(Config->s_NickServ, u, PASSWORD_TOO_LONG);
else if (!email.empty() && !MailValidate(email))
notice_lang(Config.s_NickServ, u, MAIL_X_INVALID, email.c_str());
notice_lang(Config->s_NickServ, u, MAIL_X_INVALID, email.c_str());
else
{
for (idx = 0; idx < 9; ++idx)
@@ -273,17 +273,17 @@ class CommandNSRegister : public CommandNSConfirm
nr->email = email;
nr->requested = time(NULL);
FOREACH_MOD(I_OnMakeNickRequest, OnMakeNickRequest(nr));
if (Config.NSEmailReg)
if (Config->NSEmailReg)
{
if (SendRegmail(u, nr))
{
notice_lang(Config.s_NickServ, u, NICK_ENTER_REG_CODE, email.c_str(), Config.s_NickServ.c_str());
Alog() << Config.s_NickServ << ": sent registration verification code to " << nr->email;
notice_lang(Config->s_NickServ, u, NICK_ENTER_REG_CODE, email.c_str(), Config->s_NickServ.c_str());
Alog() << Config->s_NickServ << ": sent registration verification code to " << nr->email;
}
else
{
Alog() << Config.s_NickServ << ": Unable to send registration verification mail";
notice_lang(Config.s_NickServ, u, NICK_REG_UNABLE);
Alog() << Config->s_NickServ << ": Unable to send registration verification mail";
notice_lang(Config->s_NickServ, u, NICK_REG_UNABLE);
delete nr;
return MOD_CONT;
}
@@ -300,21 +300,21 @@ class CommandNSRegister : public CommandNSConfirm
bool OnHelp(User *u, const Anope::string &subcommand)
{
notice_help(Config.s_NickServ, u, NICK_HELP_REGISTER);
notice_help(Config->s_NickServ, u, NICK_HELP_REGISTER);
return true;
}
void OnSyntaxError(User *u, const Anope::string &subcommand)
{
if (Config.NSForceEmail)
syntax_error(Config.s_NickServ, u, "REGISTER", NICK_REGISTER_SYNTAX_EMAIL);
if (Config->NSForceEmail)
syntax_error(Config->s_NickServ, u, "REGISTER", NICK_REGISTER_SYNTAX_EMAIL);
else
syntax_error(Config.s_NickServ, u, "REGISTER", NICK_REGISTER_SYNTAX);
syntax_error(Config->s_NickServ, u, "REGISTER", NICK_REGISTER_SYNTAX);
}
void OnServHelp(User *u)
{
notice_lang(Config.s_NickServ, u, NICK_HELP_CMD_REGISTER);
notice_lang(Config->s_NickServ, u, NICK_HELP_CMD_REGISTER);
}
};
@@ -329,24 +329,24 @@ class CommandNSResend : public Command
CommandReturn Execute(User *u, const std::vector<Anope::string> &params)
{
NickRequest *nr = NULL;
if (Config.NSEmailReg)
if (Config->NSEmailReg)
{
if ((nr = findrequestnick(u->nick)))
{
if (time(NULL) < nr->lastmail + Config.NSResendDelay)
if (time(NULL) < nr->lastmail + Config->NSResendDelay)
{
notice_lang(Config.s_NickServ, u, MAIL_LATER);
notice_lang(Config->s_NickServ, u, MAIL_LATER);
return MOD_CONT;
}
if (!SendRegmail(u, nr))
{
nr->lastmail = time(NULL);
notice_lang(Config.s_NickServ, u, NICK_REG_RESENT, nr->email.c_str());
Alog() << Config.s_NickServ << ": re-sent registration verification code for " << nr->nick << " to " << nr->email;
notice_lang(Config->s_NickServ, u, NICK_REG_RESENT, nr->email.c_str());
Alog() << Config->s_NickServ << ": re-sent registration verification code for " << nr->nick << " to " << nr->email;
}
else
{
Alog() << Config.s_NickServ << ": Unable to re-send registration verification mail for " << nr->nick;
Alog() << Config->s_NickServ << ": Unable to re-send registration verification mail for " << nr->nick;
return MOD_CONT;
}
}
@@ -356,13 +356,13 @@ class CommandNSResend : public Command
bool OnHelp(User *u, const Anope::string &subcommand)
{
notice_help(Config.s_NickServ, u, NICK_HELP_RESEND);
notice_help(Config->s_NickServ, u, NICK_HELP_RESEND);
return true;
}
void OnServHelp(User *u)
{
notice_lang(Config.s_NickServ, u, NICK_HELP_CMD_RESEND);
notice_lang(Config->s_NickServ, u, NICK_HELP_CMD_RESEND);
}
};
@@ -389,9 +389,9 @@ static bool SendRegmail(User *u, NickRequest *nr)
char subject[BUFSIZE], message[BUFSIZE];
snprintf(subject, sizeof(subject), getstring(NICK_REG_MAIL_SUBJECT), nr->nick.c_str());
snprintf(message, sizeof(message), getstring(NICK_REG_MAIL), nr->nick.c_str(), Config.NetworkName.c_str(), Config.s_NickServ.c_str(), nr->passcode.c_str(), Config.NetworkName.c_str());
snprintf(message, sizeof(message), getstring(NICK_REG_MAIL), nr->nick.c_str(), Config->NetworkName.c_str(), Config->s_NickServ.c_str(), nr->passcode.c_str(), Config->NetworkName.c_str());
return Mail(u, nr, Config.s_NickServ, subject, message);
return Mail(u, nr, Config->s_NickServ, subject, message);
}
MODULE_INIT(NSRegister)