From c3cff63dca560d0edacc05de37b4495c930d2187 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Thu, 16 May 2024 12:29:32 +0100 Subject: Make passwords for oper accounts optional. This allows restricting an oper account based on other data such as TLS fingerprint or services account but without logging them in automatically like autologin. --- src/users.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/users.cpp') diff --git a/src/users.cpp b/src/users.cpp index 8a67ddf13..e8a2b7a42 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -1294,8 +1294,9 @@ void OperType::MergeTag(const std::shared_ptr& tag) OperAccount::OperAccount(const std::string& n, const std::shared_ptr& o, const std::shared_ptr& t) : OperType(n, nullptr) - , password(t->getString("password")) - , passwordhash(t->getString("hash", "plaintext", 1)) + , nopassword(t->getBool("nopassword")) + , password(nopassword ? "" : t->getString("password")) + , passwordhash(nopassword ? "" : t->getString("hash", "plaintext", 1)) , type(o ? o->GetName() : n) { autologin = t->getEnum("autologin", AutoLogin::NEVER, { @@ -1336,5 +1337,8 @@ bool OperAccount::CanAutoLogin(LocalUser* user) const bool OperAccount::CheckPassword(const std::string& pw) const { - return InspIRCd::CheckPassword(password, passwordhash, pw); + if (nopassword) + return true; // + + return !password.empty() && InspIRCd::CheckPassword(password, passwordhash, pw); } -- cgit v1.3.1-10-gc9f91