#include "inspircd.h"
#include "modules/ssl.h"
+#include "modules/whois.h"
+
+enum
+{
+ // From oftc-hybrid.
+ RPL_WHOISCERTFP = 276,
+
+ // From UnrealIRCd.
+ RPL_WHOISSECURE = 671
+};
class SSLCertExt : public ExtensionItem {
public:
ssl_cert* cert = cmd.CertExt.get(whois.GetTarget());
if (cert)
{
- whois.SendLine(671, "is using a secure connection");
+ whois.SendLine(RPL_WHOISSECURE, "is using a secure connection");
bool operonlyfp = ServerInstance->Config->ConfValue("sslinfo")->getBool("operonly");
if ((!operonlyfp || whois.IsSelfWhois() || whois.GetSource()->IsOper()) && !cert->fingerprint.empty())
- whois.SendLine(276, InspIRCd::Format("has client certificate fingerprint %s", cert->fingerprint.c_str()));
+ whois.SendLine(RPL_WHOISCERTFP, InspIRCd::Format("has client certificate fingerprint %s", cert->fingerprint.c_str()));
}
}
if (ifo->oper_block->getBool("sslonly") && !cert)
{
- user->WriteNumeric(491, "This oper login requires an SSL connection.");
+ user->WriteNumeric(ERR_NOOPERHOST, "This oper login requires an SSL connection.");
user->CommandFloodPenalty += 10000;
return MOD_RES_DENY;
}
std::string fingerprint;
if (ifo->oper_block->readString("fingerprint", fingerprint) && (!cert || cert->GetFingerprint() != fingerprint))
{
- user->WriteNumeric(491, "This oper login requires a matching SSL certificate fingerprint.");
+ user->WriteNumeric(ERR_NOOPERHOST, "This oper login requires a matching SSL certificate fingerprint.");
user->CommandFloodPenalty += 10000;
return MOD_RES_DENY;
}
if (myclass->config->getString("requiressl") == "trusted")
{
ok = (cert && cert->IsCAVerified());
+ ServerInstance->Logs->Log("CONNECTCLASS", LOG_DEBUG, "Class requires a trusted SSL cert. Client %s one.", (ok ? "has" : "does not have"));
}
else if (myclass->config->getBool("requiressl"))
{
ok = (cert != NULL);
+ ServerInstance->Logs->Log("CONNECTCLASS", LOG_DEBUG, "Class requires any SSL cert. Client %s one.", (ok ? "has" : "does not have"));
}
if (!ok)