diff options
| author | 2022-12-10 14:30:09 +0000 | |
|---|---|---|
| committer | 2022-12-10 14:49:02 +0000 | |
| commit | b65974d0736682de511ad9920e6336b3f9692455 (patch) | |
| tree | c61dffcbf12eb50761ea69df8bedd0b031d95f85 /src | |
| parent | Allow 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.cpp | 6 | ||||
| -rw-r--r-- | src/coremods/core_oper/core_oper.cpp | 9 | ||||
| -rw-r--r-- | src/modules/m_sslinfo.cpp | 6 |
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. } } |
