X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/6af128685da930eb799948f6be8eb17e0521ae50..8ee12f0c437eec8aa42af7b350c7e2a3ccafedbc:/modules/m_challenge.c?ds=sidebyside diff --git a/modules/m_challenge.c b/modules/m_challenge.c index f2753249..e0b9dbe0 100644 --- a/modules/m_challenge.c +++ b/modules/m_challenge.c @@ -44,7 +44,7 @@ #include "s_conf.h" #include "msg.h" #include "parse.h" -#include "irc_string.h" +#include "match.h" #include "logger.h" #include "s_user.h" #include "cache.h" @@ -223,13 +223,29 @@ m_challenge(struct Client *client_p, struct Client *source_p, int parc, const ch return 0; } + if(IsOperConfNeedSSL(oper_p) && !IsSSLClient(source_p)) + { + sendto_one(source_p, form_str(ERR_NOOPERHOST), me.name, source_p->name); + ilog(L_FOPER, "FAILED CHALLENGE (%s) by (%s!%s@%s) (%s) -- requires SSL/TLS", + parv[1], source_p->name, source_p->username, source_p->host, + source_p->sockhost); + + if(ConfigFileEntry.failed_oper_notice) + { + sendto_realops_snomask(SNO_GENERAL, L_ALL, + "Failed CHALLENGE attempt - missing SSL/TLS by %s (%s@%s)", + source_p->name, source_p->username, source_p->host); + } + return 0; + } + if(!generate_challenge(&challenge, &(source_p->localClient->challenge), oper_p->rsa_pubkey)) { char *chal = challenge; source_p->localClient->chal_time = rb_current_time(); for(;;) { - cnt = strlcpy(chal_line, chal, CHALLENGE_WIDTH); + cnt = rb_strlcpy(chal_line, chal, CHALLENGE_WIDTH); sendto_one(source_p, form_str(RPL_RSACHALLENGE2), me.name, source_p->name, chal_line); if(cnt > CHALLENGE_WIDTH) chal += CHALLENGE_WIDTH - 1;