Refactor the sslqueries mode handler.

This fixes a rare desync where a server with the sslmodes module
but without the sslinfo module could desync when a remote user on
a server with both enables the sslqueries mode.
This commit is contained in:
Sadie Powell 2021-06-01 01:33:10 +01:00
parent 83bb6951fe
commit 2688cfbad5

View File

@ -34,6 +34,8 @@ enum
{
// From UnrealIRCd.
ERR_SECUREONLYCHAN = 489,
// InspIRCd-specific.
ERR_ALLMUSTSSL = 490
};
@ -120,27 +122,14 @@ class SSLModeUser : public ModeHandler
ModeAction OnModeChange(User* user, User* dest, Channel* channel, std::string& parameter, bool adding) CXX11_OVERRIDE
{
if (adding)
{
if (!dest->IsModeSet(this))
{
if (!API || !API->GetCertificate(user))
return MODEACTION_DENY;
if (adding == dest->IsModeSet(this))
return MODEACTION_DENY;
dest->SetMode(this, true);
return MODEACTION_ALLOW;
}
}
else
{
if (dest->IsModeSet(this))
{
dest->SetMode(this, false);
return MODEACTION_ALLOW;
}
}
if (adding && IS_LOCAL(user) && (!API || !API->GetCertificate(user)))
return MODEACTION_DENY;
return MODEACTION_DENY;
dest->SetMode(this, adding);
return MODEACTION_ALLOW;
}
};