1
0
mirror of https://github.com/anope/anope.git synced 2026-07-02 18:13:12 +02:00

Misc fixes to hs_offer.

- Cache the network name to avoid looking it up repeatedly.
- Fix {regdate} and {regepoch} being inverted.
- Fix building the add reason and make it optional as intended.
- Use a dummy templating function when adding to allow more reliable
  checks for whether the offered vhost is acceptable.
This commit is contained in:
Sadie Powell
2025-11-18 00:38:05 +00:00
parent 73175a0187
commit ca27e1e60f
2 changed files with 30 additions and 17 deletions
+3 -3
View File
@@ -16,8 +16,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Anope\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-11-17 23:13+0000\n"
"PO-Revision-Date: 2025-11-17 23:13+0000\n"
"POT-Creation-Date: 2025-11-18 01:12+0000\n"
"PO-Revision-Date: 2025-11-18 01:12+0000\n"
"Last-Translator: Sadie Powell <sadie@witchery.services>\n"
"Language-Team: English\n"
"Language: en_US\n"
@@ -1288,7 +1288,7 @@ msgstr ""
msgid "ADD [+expiry] mask:reason"
msgstr ""
msgid "ADD [+expiry] vhost reason"
msgid "ADD [+expiry] vhost [reason]"
msgstr ""
msgid "ADD {NICK|CHAN|EMAIL|REGISTER} [+expiry] entry reason"
+27 -14
View File
@@ -19,6 +19,7 @@
namespace
{
Anope::string network_name;
time_t take_delay = 0;
Anope::string GetVHostMask(const Anope::string &ident, const Anope::string &host)
@@ -47,12 +48,14 @@ namespace
return Anope::string(buf);
};
// NOTE: when updating this also update dummy_template.
return Anope::Template(ih, {
{ "account", na ? na->nc->display : "" },
{ "nick", na ? na->nick : "" },
{ "network", Config->GetBlock("networkinfo").Get<const Anope::string>("networkname") },
{ "regdate", na ? Anope::ToString(na->registered) : "" },
{ "regepoch", na ? regdate(na) : "" },
{ "account", na ? na->nc->display : "" },
{ "nick", na ? na->nick : "" },
{ "network", network_name },
{ "regdate", na ? regdate(na) : "" },
{ "regepoch", na ? Anope::ToString(na->registered) : "" },
});
}
}
@@ -334,7 +337,7 @@ private:
const size_t vhost_idx = expiry_idx ? 2 : 1;
const size_t reason_idx = expiry_idx ? 3 : 2;
if (params.size() <= reason_idx)
if (params.size() <= vhost_idx)
{
this->OnSyntaxError(source, "ADD");
return;
@@ -371,6 +374,17 @@ private:
return;
}
auto dummy_template = [](const Anope::string &v)
{
return Anope::Template(v, {
{ "account", "a" },
{ "nick", "a" },
{ "network", network_name },
{ "regdate", "1111-11-11" },
{ "regepoch", "1111111111" },
});
};
if (!ident.empty())
{
if (!IRCD->CanSetVIdent)
@@ -379,7 +393,7 @@ private:
return;
}
const auto sub_ident = Template(ident, "");
const auto sub_ident = dummy_template(ident);
if (sub_ident.length() > IRCD->MaxUser)
{
source.Reply(HOST_SET_VIDENT_TOO_LONG, IRCD->MaxUser);
@@ -392,7 +406,7 @@ private:
}
}
const auto sub_host = Template(host, "");
const auto sub_host = dummy_template(host);
if (sub_host.length() > IRCD->MaxHost)
{
source.Reply(HOST_SET_VHOST_TOO_LONG, IRCD->MaxHost);
@@ -412,9 +426,8 @@ private:
}
Anope::string reason;
for (auto idx = reason_idx; idx <= params.size(); ++idx)
reason += " " + params[idx];
reason.erase(reason.begin());
for (auto idx = reason_idx; idx < params.size(); ++idx)
reason.append(reason.empty() ? "" : " ").append(params[idx]);
auto *ho = new HostOffer(ident, host, source.GetNick(), reason, Anope::CurTime, expiry);
HostOffersList.Add(ho);
@@ -556,7 +569,7 @@ public:
: Command(creator, "hostserv/offer", 1, 4)
{
this->SetDesc(_("Manipulate the host offer list"));
this->SetSyntax(_("ADD [+\037expiry\037] \037vhost\037 \037reason\037"));
this->SetSyntax(_("ADD [+\037expiry\037] \037vhost\037 [\037reason\037]"));
this->SetSyntax(_("CLEAR"));
this->SetSyntax(_("DEL {\037vhost\037 | \037entry-num\037 | \037list\037}"));
this->SetSyntax(_("LIST [\037vhost-mask\037 | \037entry-num\037 | \037list\037]"));
@@ -913,8 +926,8 @@ public:
void OnReload(Configuration::Conf &conf) override
{
auto &modconf = conf.GetModule(this);
take_delay = modconf.Get<time_t>("takedelay");
network_name = Config->GetBlock("networkinfo").Get<const Anope::string>("networkname");
take_delay = conf.GetModule(this).Get<time_t>("takedelay");
}
};