1
0
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:
Adam
2011-05-23 14:47:14 -04:00
parent 121ae0b189
commit a45d1555d3
3 changed files with 31 additions and 3 deletions
+7 -1
View File
@@ -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,
+20
View File
@@ -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
View File
@@ -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;