aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Sadie Powell2022-12-10 14:30:09 +0000
committerGravatar Sadie Powell2022-12-10 14:49:02 +0000
commitb65974d0736682de511ad9920e6336b3f9692455 (patch)
treec61dffcbf12eb50761ea69df8bedd0b031d95f85 /src
parentAllow restricting an oper account based on services account. (diff)
Move <oper:host> check into OnPreOperLogin.
Diffstat (limited to 'src')
-rw-r--r--src/coremods/core_oper/cmd_oper.cpp6
-rw-r--r--src/coremods/core_oper/core_oper.cpp9
-rw-r--r--src/modules/m_sslinfo.cpp6
3 files changed, 12 insertions, 9 deletions
diff --git a/src/coremods/core_oper/cmd_oper.cpp b/src/coremods/core_oper/cmd_oper.cpp
index 344da7c29..fa9399127 100644
--- a/src/coremods/core_oper/cmd_oper.cpp
+++ b/src/coremods/core_oper/cmd_oper.cpp
@@ -38,7 +38,6 @@ CmdResult CommandOper::HandleLocal(LocalUser* user, const Params& parameters)
{
bool match_user = false;
bool match_pass = false;
- bool match_hosts = false;
auto i = ServerInstance->Config->OperAccounts.find(parameters[0]);
if (i != ServerInstance->Config->OperAccounts.end())
@@ -47,9 +46,8 @@ CmdResult CommandOper::HandleLocal(LocalUser* user, const Params& parameters)
std::shared_ptr<ConfigTag> tag = ifo->GetConfig();
match_user = true;
match_pass = ServerInstance->PassCompare(user, tag->getString("password"), parameters[1], tag->getString("hash"));
- match_hosts = InspIRCd::MatchMask(tag->getString("host"), user->MakeHost(), user->MakeHostIP());
- if (match_pass && match_hosts)
+ if (match_pass)
{
user->OperLogin(ifo);
return CmdResult::SUCCESS;
@@ -61,8 +59,6 @@ CmdResult CommandOper::HandleLocal(LocalUser* user, const Params& parameters)
fields.append("username ");
if (!match_pass)
fields.append("password ");
- if (!match_hosts)
- fields.append("hosts ");
fields.erase(fields.length() - 1, 1);
// Tell them they failed (generically) and lag them up to help prevent brute-force attacks
diff --git a/src/coremods/core_oper/core_oper.cpp b/src/coremods/core_oper/core_oper.cpp
index 29bfd627b..a43eb1034 100644
--- a/src/coremods/core_oper/core_oper.cpp
+++ b/src/coremods/core_oper/core_oper.cpp
@@ -63,6 +63,15 @@ public:
cmdkill.hideservicekills = security->getBool("hideservicekills", security->getBool("hideulinekills"));
}
+ ModResult OnPreOperLogin(LocalUser* user, const std::shared_ptr<OperAccount>& oper) override
+ {
+ const std::string hosts = oper->GetConfig()->getString("host");
+ if (InspIRCd::MatchMask(hosts, user->MakeHost(), user->MakeHostIP()))
+ return MOD_RES_PASSTHRU; // Host matches.
+
+ return MOD_RES_DENY; // Host does not match.
+ }
+
void OnPostOperLogin(User* user) override
{
LocalUser* luser = IS_LOCAL(user);
diff --git a/src/modules/m_sslinfo.cpp b/src/modules/m_sslinfo.cpp
index 061285c42..2f3d4d0c8 100644
--- a/src/modules/m_sslinfo.cpp
+++ b/src/modules/m_sslinfo.cpp
@@ -368,10 +368,8 @@ public:
if (!oper->getBool("autologin"))
continue; // No autologin for this block.
- if (!InspIRCd::MatchMask(oper->getString("host"), localuser->MakeHost(), localuser->MakeHostIP()))
- continue; // Host doesn't match.
-
- user->OperLogin(info);
+ if (!user->OperLogin(info))
+ continue; // Some other field does not match.
}
}