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

Compare commits

...

16 Commits

Author SHA1 Message Date
Sadie Powell 3acf74483c Release 2.0.16. 2024-07-19 12:49:56 +01:00
Sadie Powell a3ec8329f4 Document the previous commit. 2024-07-19 12:48:44 +01:00
Sadie Powell 31bc597c81 Send the vhost/vident before the account name on InspIRCd.
This fixes IRCd-side account cloaks causing CHGHOST spam.
2024-07-19 01:11:32 +01:00
Sadie Powell 2de0dddb1c Fix joining channels with keys on InspIRCd v3. 2024-07-14 16:39:37 +01:00
Sadie Powell 41ea346551 Update the change log. 2024-07-11 01:13:59 +01:00
Sadie Powell 439ad3e736 Make it clear that inspircd3 also works with InspIRCd 4. 2024-07-11 01:13:59 +01:00
Sadie Powell 8105607257 Fix the default config for channel suspensions. 2024-06-23 13:51:53 +01:00
Sadie Powell ccc088d946 Log a user out fully when their nick gets suspended.
Closes #409.
2024-06-04 22:41:32 +01:00
Sadie Powell 8bb83f6b1a Explicitly specify ROW_FORMAT=DYNAMIC when creating tables.
Resolves the issues some people were having with extremely wide rows.
2024-05-16 17:29:25 +01:00
Sadie Powell da99a53dfa Don't specify a width for DT_INT columns.
This isn't actually used by MySQL for the column width.
2024-05-16 17:28:15 +01:00
Sadie Powell a9e9ac32a0 Store boolean extension items as DT_INT. 2024-05-16 17:28:15 +01:00
Sadie Powell 05e6df23a2 Mark boolean columns as DT_INT in bs_kick. 2024-05-16 16:50:41 +01:00
Sadie Powell 3f9fc23270 Remove some unnecessary advice. 2024-05-16 16:44:38 +01:00
Sadie Powell afe87bf693 Ensure we are connected to MySQL before trying to escape data. 2024-05-11 11:36:29 +01:00
Sadie Powell 0c5bf51378 Skip serializing data without a type in db_flatfile. 2024-04-29 08:16:45 +01:00
Sadie Powell d41764bfd6 Fix sending emails to nicks ending with a backslash. 2024-03-15 18:52:12 +00:00
13 changed files with 63 additions and 35 deletions
+2 -3
View File
@@ -109,10 +109,9 @@ module
/* /*
* The length of time before a channel registration expires. * The length of time before a channel registration expires.
* *
* This directive is optional, but recommended. * This directive is optional. If not set, the default is never.
* If not set, the default is 14 days.
*/ */
expire = 14d #expire = 90d
/* /*
* The maximum number of entries on a channel's access list. * The maximum number of entries on a channel's access list.
+1 -6
View File
@@ -259,7 +259,7 @@ serverinfo
* - hybrid * - hybrid
* - inspircd12 * - inspircd12
* - inspircd20 * - inspircd20
* - inspircd3 * - inspircd3 (for 3.x and 4.x)
* - ngircd * - ngircd
* - plexus * - plexus
* - ratbox * - ratbox
@@ -1153,11 +1153,6 @@ module
* This is only useful with very large databases, with hundreds * This is only useful with very large databases, with hundreds
* of thousands of objects, that have a noticeable delay from * of thousands of objects, that have a noticeable delay from
* writing databases. * writing databases.
*
* If your database is large enough cause a noticeable delay when
* saving you should consider a more powerful alternative such
* as db_sql or db_redis, which incrementally update their
* databases asynchronously in real time.
*/ */
fork = no fork = no
} }
+1 -1
View File
@@ -256,7 +256,7 @@ serverinfo
* - hybrid * - hybrid
* - inspircd12 * - inspircd12
* - inspircd20 * - inspircd20
* - inspircd3 * - inspircd3 (for 3.x and 4.x)
* - ngircd * - ngircd
* - plexus * - plexus
* - ratbox * - ratbox
+24 -3
View File
@@ -1,6 +1,27 @@
Anope Version 2.0.16-git Anope Version 2.0.16
------------------------ --------------------
No significant changes. Added a workaround for users matching expired sqlines.
Fixed a copy/paste error in webcpanel.
Fixed a crash in db_flatfile caused by trying to serialize data without a type.
Fixed duplicate messages when synconset/syncongroup is set.
Fixed expiring channel suspensions.
Fixed expiring forbids.
Fixed expiring nick suspensions.
Fixed feature detection on InspIRCd.
Fixed InspIRCd account cloaks causing CHGHOST spam when a user also has a services vhost.
Fixed joining users to channels with a key set on InspIRCd.
Fixed logging users out fully when their nick gets suspended.
Fixed marking boolean columns in SQL as TEXT instead of INT.
Fixed matching extbans on InspIRCd and implement missing matchers.
Fixed operserv/sqline expiry on UnrealIRCd
Fixed respecting --noexpire in cs_suspend and ns_suspend.
Fixed sending emails to nicks ending with a backslash.
Fixed sending SVSTOPIC when topiclock is loaded on InspIRCd.
Fixed some SQL tables taking up too much space on disk.
Fixed the default config for channel suspensions.
Fixed the TIME message on InspIRCd.
Fixed trying to escape SQL data when not connected to MySQL.
Fixed {ldap,sql}_authentication creating zombie accounts on expiry.
Anope Version 2.0.15 Anope Version 2.0.15
-------------------- --------------------
+2 -2
View File
@@ -1,5 +1,5 @@
Anope Version 2.0.16-git Anope Version 2.0.16
------------------------ --------------------
No significant changes. No significant changes.
Anope Version 2.0.15 Anope Version 2.0.15
+1
View File
@@ -190,6 +190,7 @@ class SerializableExtensibleItem<bool> : public PrimitiveExtensibleItem<bool>
void ExtensibleSerialize(const Extensible *e, const Serializable *s, Serialize::Data &data) const anope_override void ExtensibleSerialize(const Extensible *e, const Serializable *s, Serialize::Data &data) const anope_override
{ {
data.SetType(this->name, Serialize::Data::DT_INT);
data[this->name] << true; data[this->name] << true;
} }
+10 -11
View File
@@ -51,17 +51,16 @@ struct KickerDataImpl : KickerData
if (kd == NULL) if (kd == NULL)
return; return;
data["kickerdata:amsgs"] << kd->amsgs; data.SetType("kickerdata:amsgs", Serialize::Data::DT_INT); data["kickerdata:amsgs"] << kd->amsgs;
data["kickerdata:badwords"] << kd->badwords; data.SetType("kickerdata:badwords", Serialize::Data::DT_INT); data["kickerdata:badwords"] << kd->badwords;
data["kickerdata:bolds"] << kd->bolds; data.SetType("kickerdata:bolds", Serialize::Data::DT_INT); data["kickerdata:bolds"] << kd->bolds;
data["kickerdata:caps"] << kd->caps; data.SetType("kickerdata:caps", Serialize::Data::DT_INT); data["kickerdata:caps"] << kd->caps;
data["kickerdata:colors"] << kd->colors; data.SetType("kickerdata:colors", Serialize::Data::DT_INT); data["kickerdata:colors"] << kd->colors;
data["kickerdata:flood"] << kd->flood; data.SetType("kickerdata:flood", Serialize::Data::DT_INT); data["kickerdata:flood"] << kd->flood;
data["kickerdata:italics"] << kd->italics; data.SetType("kickerdata:italics", Serialize::Data::DT_INT); data["kickerdata:italics"] << kd->italics;
data["kickerdata:repeat"] << kd->repeat; data.SetType("kickerdata:repeat", Serialize::Data::DT_INT); data["kickerdata:repeat"] << kd->repeat;
data["kickerdata:reverses"] << kd->reverses; data.SetType("kickerdata:reverses", Serialize::Data::DT_INT); data["kickerdata:reverses"] << kd->reverses;
data["kickerdata:underlines"] << kd->underlines; data.SetType("kickerdata:underlines", Serialize::Data::DT_INT); data["kickerdata:underlines"] << kd->underlines;
data.SetType("capsmin", Serialize::Data::DT_INT); data["capsmin"] << kd->capsmin; data.SetType("capsmin", Serialize::Data::DT_INT); data["capsmin"] << kd->capsmin;
data.SetType("capspercent", Serialize::Data::DT_INT); data["capspercent"] << kd->capspercent; data.SetType("capspercent", Serialize::Data::DT_INT); data["capspercent"] << kd->capspercent;
data.SetType("floodlines", Serialize::Data::DT_INT); data["floodlines"] << kd->floodlines; data.SetType("floodlines", Serialize::Data::DT_INT); data["floodlines"] << kd->floodlines;
+2
View File
@@ -127,6 +127,8 @@ class CommandNSSuspend : public Command
User *u2 = User::Find(na2->nick, true); User *u2 = User::Find(na2->nick, true);
if (u2) if (u2)
{ {
IRCD->SendLogout(u2);
u2->RemoveMode(source.service, "REGISTERED");
u2->Logout(); u2->Logout();
if (nickserv) if (nickserv)
nickserv->Collide(u2, na2); nickserv->Collide(u2, na2);
+2
View File
@@ -324,6 +324,8 @@ class DBFlatFile : public Module, public Pipe
{ {
Serializable *base = *it; Serializable *base = *it;
Serialize::Type *s_type = base->GetSerializableType(); Serialize::Type *s_type = base->GetSerializableType();
if (!s_type)
continue;
data.fs = databases[s_type->GetOwner()]; data.fs = databases[s_type->GetOwner()];
if (!data.fs || !data.fs->is_open()) if (!data.fs || !data.fs->is_open())
+10 -5
View File
@@ -339,9 +339,14 @@ Result MySQLService::RunQuery(const Query &query)
{ {
this->Lock.Lock(); this->Lock.Lock();
Anope::string real_query = this->BuildQuery(query); if (!this->CheckConnection())
{
this->Lock.Unlock();
return MySQLResult(query, query.query, mysql_error(this->sql));
}
if (this->CheckConnection() && !mysql_real_query(this->sql, real_query.c_str(), real_query.length())) Anope::string real_query = this->BuildQuery(query);
if (!mysql_real_query(this->sql, real_query.c_str(), real_query.length()))
{ {
MYSQL_RES *res = mysql_store_result(this->sql); MYSQL_RES *res = mysql_store_result(this->sql);
unsigned int id = mysql_insert_id(this->sql); unsigned int id = mysql_insert_id(this->sql);
@@ -395,11 +400,11 @@ std::vector<Query> MySQLService::CreateTable(const Anope::string &table, const D
query_text += ", `" + it->first + "` "; query_text += ", `" + it->first + "` ";
if (data.GetType(it->first) == Serialize::Data::DT_INT) if (data.GetType(it->first) == Serialize::Data::DT_INT)
query_text += "int(11)"; query_text += "int";
else else
query_text += "text"; query_text += "text";
} }
query_text += ", PRIMARY KEY (`id`), KEY `timestamp_idx` (`timestamp`))"; query_text += ", PRIMARY KEY (`id`), KEY `timestamp_idx` (`timestamp`)) ROW_FORMAT=DYNAMIC";
queries.push_back(query_text); queries.push_back(query_text);
} }
else else
@@ -412,7 +417,7 @@ std::vector<Query> MySQLService::CreateTable(const Anope::string &table, const D
Anope::string query_text = "ALTER TABLE `" + table + "` ADD `" + it->first + "` "; Anope::string query_text = "ALTER TABLE `" + table + "` ADD `" + it->first + "` ";
if (data.GetType(it->first) == Serialize::Data::DT_INT) if (data.GetType(it->first) == Serialize::Data::DT_INT)
query_text += "int(11)"; query_text += "int";
else else
query_text += "text"; query_text += "text";
+6 -2
View File
@@ -394,9 +394,12 @@ class InspIRCd3Proto : public IRCDProto
SendAddLine("Z", x->GetHost(), timeleft, x->by, x->GetReason()); SendAddLine("Z", x->GetHost(), timeleft, x->by, x->GetReason());
} }
void SendSVSJoin(const MessageSource &source, User *u, const Anope::string &chan, const Anope::string &other) anope_override void SendSVSJoin(const MessageSource &source, User *u, const Anope::string &chan, const Anope::string &key) anope_override
{ {
UplinkSocket::Message(source) << "SVSJOIN " << u->GetUID() << " " << chan; if (key.empty())
UplinkSocket::Message(source) << "SVSJOIN " << u->GetUID() << " " << chan;
else
UplinkSocket::Message(source) << "SVSJOIN " << u->GetUID() << " " << chan << " :" << key;
} }
void SendSVSPart(const MessageSource &source, User *u, const Anope::string &chan, const Anope::string &param) anope_override void SendSVSPart(const MessageSource &source, User *u, const Anope::string &chan, const Anope::string &param) anope_override
@@ -442,6 +445,7 @@ class InspIRCd3Proto : public IRCDProto
if (na->nc->HasExt("UNCONFIRMED")) if (na->nc->HasExt("UNCONFIRMED"))
return; return;
IRCD->SendVhost(u, na->GetVhostIdent(), na->GetVhostHost());
UplinkSocket::Message(Me) << "METADATA " << u->GetUID() << " accountid :" << na->nc->GetId(); UplinkSocket::Message(Me) << "METADATA " << u->GetUID() << " accountid :" << na->nc->GetId();
UplinkSocket::Message(Me) << "METADATA " << u->GetUID() << " accountname :" << na->nc->display; UplinkSocket::Message(Me) << "METADATA " << u->GetUID() << " accountname :" << na->nc->display;
} }
+1 -1
View File
@@ -48,7 +48,7 @@ void Mail::Message::Run()
if (this->dont_quote_addresses) if (this->dont_quote_addresses)
fprintf(pipe, "To: %s <%s>\r\n", mail_to.c_str(), addr.c_str()); fprintf(pipe, "To: %s <%s>\r\n", mail_to.c_str(), addr.c_str());
else else
fprintf(pipe, "To: \"%s\" <%s>\r\n", mail_to.c_str(), addr.c_str()); fprintf(pipe, "To: \"%s\" <%s>\r\n", mail_to.replace_all_cs("\\", "\\\\").c_str(), addr.c_str());
fprintf(pipe, "Subject: %s\r\n", subject.c_str()); fprintf(pipe, "Subject: %s\r\n", subject.c_str());
fprintf(pipe, "Content-Type: %s\r\n", content_type.c_str()); fprintf(pipe, "Content-Type: %s\r\n", content_type.c_str());
fprintf(pipe, "Content-Transfer-Encoding: 8bit\r\n"); fprintf(pipe, "Content-Transfer-Encoding: 8bit\r\n");
+1 -1
View File
@@ -3,4 +3,4 @@
VERSION_MAJOR=2 VERSION_MAJOR=2
VERSION_MINOR=0 VERSION_MINOR=0
VERSION_PATCH=16 VERSION_PATCH=16
VERSION_EXTRA="-git" VERSION_EXTRA=""