summaryrefslogtreecommitdiff
path: root/src/users.cpp
diff options
context:
space:
mode:
authorSadie Powell <sadie@witchery.services>2024-02-26 21:50:15 +0000
committerSadie Powell <sadie@witchery.services>2024-02-26 21:55:59 +0000
commit79f215606dae66367277012b394009542e4f51a4 (patch)
tree74c83676c3c1cc2906e06b65adf850136729da8e /src/users.cpp
parent2fd4b45f8106e23a8c4bb7857a1ee60dc5146887 (diff)
Allow using more than one fingerprint in an oper block.
Closes #362.
Diffstat (limited to 'src/users.cpp')
-rw-r--r--src/users.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/users.cpp b/src/users.cpp
index 7761cb5c7..075f6c157 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -471,9 +471,20 @@ bool User::IsServicesOper()
return false;
else if (this->nc->o->require_oper && !this->HasMode("OPER"))
return false;
- else if (!this->nc->o->certfp.empty() && this->fingerprint != this->nc->o->certfp)
- // Certfp mismatch
- return false;
+ else if (!this->nc->o->certfp.empty())
+ {
+ bool match = false;
+ for (const auto &certfp : this->nc->o->certfp)
+ {
+ if (this->fingerprint == certfp)
+ {
+ match = true;
+ break;
+ }
+ }
+ if (!match)
+ return false;
+ }
else if (!this->nc->o->hosts.empty())
{
bool match = false;