mirror of
https://github.com/anope/anope.git
synced 2026-07-05 20:03:13 +02:00
Added an IsServicesOper event
This commit is contained in:
+7
-1
@@ -626,6 +626,12 @@ class CoreExport Module : public Extensible
|
||||
*/
|
||||
virtual void OnDelXLine(User *u, XLine *x, XLineType Type) { }
|
||||
|
||||
/** Called when a user is checked for whether they are a services oper
|
||||
* @param u The user
|
||||
* @return EVENT_ALLOW to allow, anything else to deny
|
||||
*/
|
||||
virtual EventReturn IsServicesOper(User *u) { return EVENT_CONTINUE; }
|
||||
|
||||
/** Called when a server quits
|
||||
* @param server The server
|
||||
*/
|
||||
@@ -1060,7 +1066,7 @@ enum Implementation
|
||||
|
||||
/* OperServ */
|
||||
I_OnDefconLevel, I_OnAddAkill, I_OnDelAkill, I_OnExceptionAdd, I_OnExceptionDel,
|
||||
I_OnAddXLine, I_OnDelXLine,
|
||||
I_OnAddXLine, I_OnDelXLine, I_IsServicesOper,
|
||||
|
||||
/* Database */
|
||||
I_OnPostLoadDatabases, I_OnSaveDatabase, I_OnLoadDatabase,
|
||||
|
||||
@@ -78,6 +78,26 @@ class OSLogin : public Module
|
||||
throw ModuleException("OperServ is not loaded!");
|
||||
|
||||
this->AddCommand(operserv->Bot(), &commandoslogin);
|
||||
|
||||
ModuleManager::Attach(I_IsServicesOper, this);
|
||||
}
|
||||
|
||||
~OSLogin()
|
||||
{
|
||||
for (Anope::insensitive_map<User *>::const_iterator it = UserListByNick.begin(); it != UserListByNick.end(); ++it)
|
||||
it->second->Shrink("os_login_password_correct");
|
||||
}
|
||||
|
||||
EventReturn IsServicesOper(User *u)
|
||||
{
|
||||
if (!u->Account()->o->password.empty())
|
||||
{
|
||||
if (u->GetExt("os_login_password_correct"))
|
||||
return EVENT_ALLOW;
|
||||
return EVENT_STOP;
|
||||
}
|
||||
|
||||
return EVENT_CONTINUE;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+4
-2
@@ -443,8 +443,10 @@ bool User::IsServicesOper()
|
||||
else if (!this->nc->o->certfp.empty() && this->fingerprint != this->nc->o->certfp)
|
||||
// Certfp mismatch
|
||||
return false;
|
||||
else if (!this->nc->o->password.empty() && !this->GetExt("os_login_password_correct"))
|
||||
// Not identified
|
||||
|
||||
EventReturn MOD_RESULT;
|
||||
FOREACH_RESULT(I_IsServicesOper, IsServicesOper(this));
|
||||
if (MOD_RESULT == EVENT_STOP)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user