1
0
mirror of https://github.com/anope/anope.git synced 2026-06-15 11:54:46 +02:00

Compare commits

...

28 Commits

Author SHA1 Message Date
Sadie Powell 73714420d1 Release 2.0.17. 2024-12-08 12:15:26 +00:00
Sadie Powell ea96f2ad40 Update the change log. 2024-12-08 12:13:28 +00:00
Sadie Powell 7083c424c2 Only process sockets after loading the db when using db_sql{_live}.
This avoids slow startups for the 95% of users who are using the
db_flatfile database backend.
2024-11-19 00:39:00 +00:00
Sadie Powell de16238e01 Process all socket events before connecting to the uplink.
This ensures that the SQL import actually succeeds before we do
something that might terminate the process.
2024-11-16 12:49:45 +00:00
Sadie Powell a668c8b520 Clarify how to import databases from flatfile to SQL.
Closes #456.
2024-11-15 15:57:41 +00:00
Sadie Powell 96ccfe4cbe Fix using User::Account where User::IsIdentified should be used.
The former causes a dereference which cause a database update. This
is not good for performance with db_sql_live on bigger networks.
2024-11-11 16:46:56 +00:00
Sadie Powell ee160842b3 Fix serialising boolean extension items. 2024-11-11 15:24:40 +00:00
Sadie Powell 98c840eb02 Expand the size of some chanstats columns.
Closes #444.
2024-11-07 12:31:47 +00:00
Sadie Powell 7d5ca5c90b Switch the city version of geoipupdate to a non-corrupt database.
Closes #439.
2024-10-27 16:13:51 +00:00
Sadie Powell f40719787f Fix a change that was missing from the previous commit. 2024-10-18 11:45:19 +01:00
Sadie Powell e5602f956d Fix marking channels as persistent on InspIRCd and UnrealIRCd. 2024-10-18 11:26:03 +01:00
Sadie Powell e704fa6266 Update the IRC server to point to Teranova. 2024-10-13 17:15:26 +01:00
Sadie Powell bafcba023c Switch geoipupdate.sh to use a mirror as the original data is gone. 2024-10-12 12:01:00 +01:00
Sadie Powell 6d34054b78 Change the mode lock before removing/adding the PERM mode.
This fixes being unable to unset mlock on the first attempt.
2024-10-11 15:45:02 +01:00
Sadie Powell cc37e6d69a Remove config option for options:warningtimeout.
This hasn't done anything since the early 1.9 releases I'm not sure
why it hasn't been removed already.
2024-09-17 12:27:13 +01:00
TehPeGaSuS 4b48fc98d3 Fix the documentation of mail:usemail.
`nickserv:registration` only has as options: none, admin, mail.

I assume that `mail` is the word that should replace `yes`
2024-09-01 09:41:32 +01:00
Sadie Powell 6da4a148fa Fix translating mail:memo_message. 2024-08-24 12:27:05 +01:00
Sadie Powell 63ad540e55 Add a note to LANGUAGE about rebuilding from scratch. 2024-07-20 19:25:58 +01:00
Sadie Powell a1165eea94 Fix the type of the InspIRCd IJOIN chants when converting. 2024-07-20 19:25:58 +01:00
Sadie Powell bfca74f6b3 Bump for 2.0.17-git. 2024-07-19 13:24:41 +01:00
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
42 changed files with 128 additions and 82 deletions
+1 -1
View File
@@ -14,6 +14,6 @@ Version | Supported
## Reporting a Vulnerability
Please do not report security vulnerabilities on GitHub. Instead, email the details to team@anope.org or get the attention of a developer in our development IRC channel at irc.anope.org #anope-devel and PM them the details.
Please do not report security vulnerabilities on GitHub. Instead, email the details to team@anope.org or get the attention of a developer in our development IRC channel at irc.teranova.net #anope-devel and PM them the details.
We will triage your issue as soon as possible and try to release a fixed version within a week of receiving your report.
+2 -2
View File
@@ -4,7 +4,7 @@ Anope is an open source set of IRC Services. It is highly modular, with a vast n
* [Website](https://anope.org)
* [GitHub](https://github.com/anope)
* IRC \#anope on irc.anope.org
* IRC \#anope on irc.teranova.net
## Installation
@@ -33,7 +33,7 @@ Copy conf/example.conf to conf/services.conf
$ cp conf/example.conf conf/services.conf
```
Edit services.conf, configuring the uplink, serverinfo, and protocol module configurations. Example link blocks for popular IRCds are included in the the example.conf documentation. The [Anope wiki](https://wiki.anope.org) is also a good source of information. Our support channel is located at #anope on [irc.anope.org](irc://irc.anope.org/#anope).
Edit services.conf, configuring the uplink, serverinfo, and protocol module configurations. Example link blocks for popular IRCds are included in the the example.conf documentation. The [Anope wiki](https://wiki.anope.org) is also a good source of information. Our support channel is located at #anope on [irc.teranova.net](ircs://irc.teranova.net/anope).
Note that the example configuration file includes other example configuration files. If you want to modify the other example configuration files, copy them (e.g. `modules.example.conf` to `modules.conf`) and modify the `include` directive in `services.conf` to include the new file.
+2 -3
View File
@@ -109,10 +109,9 @@ module
/*
* The length of time before a channel registration expires.
*
* This directive is optional, but recommended.
* If not set, the default is 14 days.
* This directive is optional. If not set, the default is never.
*/
expire = 14d
#expire = 90d
/*
* The maximum number of entries on a channel's access list.
+6 -11
View File
@@ -259,7 +259,7 @@ serverinfo
* - hybrid
* - inspircd12
* - inspircd20
* - inspircd3
* - inspircd3 (for 3.x and 4.x)
* - ngircd
* - plexus
* - ratbox
@@ -458,12 +458,6 @@ options
*/
readtimeout = 5s
/*
* Sets the interval between sending warning messages for program errors via
* WALLOPS/GLOBOPS.
*/
warningtimeout = 4h
/*
* Sets the (maximum) frequency at which the timeout list is checked. This,
* combined with readtimeout above, determines how accurately timed events,
@@ -953,7 +947,7 @@ mail
* If set, this option enables the mail commands in Services. You may choose
* to disable it if you have no Sendmail-compatible mailer installed. Whilst
* this directive (and entire block) is optional, it is required if
* nickserv:registration is set to yes.
* nickserv:registration is set to mail.
*/
usemail = yes
@@ -1190,9 +1184,10 @@ module
/* Whether or not to import data from another database module in to SQL on startup.
* If you enable this, be sure that the database services is configured to use is
* empty and that another database module to import from is loaded before db_sql.
* After you enable this and do a database import you should disable it for
* subsequent restarts.
* empty and that another database module to import from is loaded BEFORE db_sql.
* After you enable this and do a database import you MUST disable it for
* subsequent restarts. If you want to keep writing a flatfile database after the
* SQL import is done you should load db_flatfile AFTER this module.
*
* Note that you can not import databases using db_sql_live. If you want to import
* databases and use db_sql_live you should import them using db_sql, then shut down
+1 -7
View File
@@ -256,7 +256,7 @@ serverinfo
* - hybrid
* - inspircd12
* - inspircd20
* - inspircd3
* - inspircd3 (for 3.x and 4.x)
* - ngircd
* - plexus
* - ratbox
@@ -371,12 +371,6 @@ options
*/
readtimeout = 5s
/*
* Sets the interval between sending warning messages for program errors via
* WALLOPS/GLOBOPS.
*/
warningtimeout = 4h
/*
* If set, Services will only show /stats o to IRC Operators. This directive
* is optional.
+35 -1
View File
@@ -1,6 +1,40 @@
Anope Version 2.0.17
--------------------
Fixed importing large flatfile databases into SQL.
Fixed marking channels as permanent.
Fixed serialising unset boolean extension items.
Fixed the documentation about how to import SQL databases.
Fixed the documentation of options:usemail.
Fixed the location of the geoipupdate CSV files.
Fixed translating memo emails.
Fixed unnecessary SQL updates caused by dereferencing user accounts.
Increased the size of the chanstats letter and word count columns.
Updated the location of the Anope IRC channels.
Anope Version 2.0.16-git
------------------------
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
--------------------
+6 -2
View File
@@ -1,5 +1,9 @@
Anope Version 2.0.16-git
------------------------
Anope Version 2.0.17
--------------------
No significant changes.
Anope Version 2.0.16
--------------------
No significant changes.
Anope Version 2.0.15
+1 -1
View File
@@ -90,4 +90,4 @@ Anope DefCon
6) Support
You might get DefCon support by posting on our online forum, or maybe on
our #anope channel at /server irc.anope.org.
our #anope channel at /server irc.teranova.net.
+1 -1
View File
@@ -60,7 +60,7 @@ Note: You should also read the README and FAQ files!
most likely not work!
If you need help, you should visit https://forum.anope.org/ or #anope on
irc.anope.org. Provide *complete* error output, along with other relevant
irc.teranova.net. Provide *complete* error output, along with other relevant
information eg. OS, compiler and C++ library versions.
See the README file for more information.
+1 -1
View File
@@ -64,7 +64,7 @@ Note : Vous devrez également lire les fichiers README et FAQ !
recommandée, et Anope ne fonctionnera probablement pas !
Si vous avez besoin d'aide, vous pouvez aller sur le site
https://forum.anope.org/ ou le canal #anope sur irc.anope.org.
https://forum.anope.org/ ou le canal #anope sur irc.teranova.net.
Fournissez *l'essemble* des erreurs qui apparaîssent, en plus de
toutes informations utiles, comme les versions de votre OS, du
compilateur utilisé et de la librairie C++. Lisez le fichier README
+2
View File
@@ -19,6 +19,8 @@ Anope Multi Language Support
Then execute:
dpkg-reconfigure locales
If you have already built Anope you will need to delete the build directory and rebuild from scratch.
Building Anope on Windows with gettext support is explained in docs/WIN32.txt
2) Adding a new language
+1 -1
View File
@@ -111,7 +111,7 @@ Anope Modules
Use modules at your own risk, and make sure you get them from a
reputable source. You might get module support by contacting the module
author, posting on our online forum, or maybe on our #anope channel
at /server irc.anope.org.
at /server irc.teranova.net.
7) Information for Developers
+1 -1
View File
@@ -245,7 +245,7 @@ Table of Contents
If you read the documentation carefully, and didn't find the answer to
your question, feel free to post on the website forums or join our irc
channel (irc.anope.org #anope). Once you join our Support channel be as
channel (irc.teranova.net #anope). Once you join our Support channel be as
precise as possible when asking a question, because we have no extraordinary
powers and can't guess things if they aren't provided.
+1 -1
View File
@@ -191,7 +191,7 @@ class SerializableExtensibleItem<bool> : public PrimitiveExtensibleItem<bool>
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] << this->HasExt(e);
}
void ExtensibleUnserialize(Extensible *e, Serializable *s, Serialize::Data &data) anope_override
+6 -4
View File
@@ -510,12 +510,13 @@ class CommandCSSetPersist : public Command
/* Set the perm mode */
if (cm)
{
if (ci->c && !ci->c->HasMode("PERM"))
ci->c->SetMode(NULL, cm);
/* Add it to the channels mlock */
ModeLocks *ml = ci->Require<ModeLocks>("modelocks");
if (ml)
ml->SetMLock(cm, true, "", source.GetNick());
if (ci->c && !ci->c->HasMode("PERM"))
ci->c->SetMode(NULL, cm);
}
/* No botserv bot, no channel mode, give them ChanServ.
* Yes, this works fine with no BotServ.
@@ -553,12 +554,13 @@ class CommandCSSetPersist : public Command
/* Unset perm mode */
if (cm)
{
if (ci->c && ci->c->HasMode("PERM"))
ci->c->RemoveMode(NULL, cm);
/* Remove from mlock */
ModeLocks *ml = ci->GetExt<ModeLocks>("modelocks");
if (ml)
ml->RemoveMLock(cm, true);
if (ci->c && ci->c->HasMode("PERM"))
ci->c->RemoveMode(NULL, cm);
}
/* No channel mode, no BotServ, but using ChanServ as the botserv bot
* which was assigned when persist was set on
+1 -1
View File
@@ -188,7 +188,7 @@ class Greet : public Module
* to has synced, or we'll get greet-floods when the net
* recovers from a netsplit. -GD
*/
if (!c->ci || !c->ci->bi || !user->server->IsSynced() || !user->Account())
if (!c->ci || !c->ci->bi || !user->server->IsSynced() || !user->IsIdentified())
return;
Anope::string *greet = ns_greet.Get(user->Account());
+1 -1
View File
@@ -82,7 +82,7 @@ class CommandNSIdentify : public Command
return;
}
if (u->Account() && na && u->Account() == na->nc)
if (u->IsIdentified() && na && u->Account() == na->nc)
{
source.Reply(_("You are already identified."));
return;
+3 -3
View File
@@ -1286,7 +1286,7 @@ class NSSet : public Module
if (chan->ci)
{
/* Only give modes if autoop is set */
give_modes &= !user->Account() || autoop.HasExt(user->Account());
give_modes &= !user->IsIdentified() || autoop.HasExt(user->Account());
}
}
@@ -1321,13 +1321,13 @@ class NSSet : public Module
void OnUserModeSet(const MessageSource &setter, User *u, const Anope::string &mname) anope_override
{
if (u->Account() && setter.GetUser() == u)
if (u->IsIdentified() && setter.GetUser() == u)
u->Account()->last_modes = u->GetModeList();
}
void OnUserModeUnset(const MessageSource &setter, User *u, const Anope::string &mname) anope_override
{
if (u->Account() && setter.GetUser() == u)
if (u->IsIdentified() && setter.GetUser() == u)
u->Account()->last_modes = u->GetModeList();
}
+1 -1
View File
@@ -36,7 +36,7 @@ class CommandNSStatus : public Command
else if (u2->IsIdentified() && na && na->nc == u2->Account()) /* Nick is identified */
source.Reply("STATUS %s %d %s", nickbuf.c_str(), 3, u2->Account()->display.c_str());
else if (u2->IsRecognized()) /* Nick is recognised, but NOT identified */
source.Reply("STATUS %s %d %s", nickbuf.c_str(), 2, u2->Account() ? u2->Account()->display.c_str() : "");
source.Reply("STATUS %s %d %s", nickbuf.c_str(), 2, u2->IsIdentified() ? u2->Account()->display.c_str() : "");
else if (!na) /* Nick is online, but NOT a registered */
source.Reply("STATUS %s %d %s", nickbuf.c_str(), 0, "");
else
+2
View File
@@ -127,6 +127,8 @@ class CommandNSSuspend : public Command
User *u2 = User::Find(na2->nick, true);
if (u2)
{
IRCD->SendLogout(u2);
u2->RemoveMode(source.service, "REGISTERED");
u2->Logout();
if (nickserv)
nickserv->Collide(u2, na2);
+8
View File
@@ -159,6 +159,14 @@ class DBSQL : public Module, public Pipe
this->import = block->Get<bool>("import");
}
void OnPostInit() anope_override
{
// If we are importing from flatfile we need to force a socket engine
// flush to ensure it actually gets written to the database before we
// connect to the uplink.
SocketEngine::Process();
}
void OnShutdown() anope_override
{
this->shutting_down = true;
+1 -1
View File
@@ -143,7 +143,7 @@ class OnIdentifyInterface : public LDAPInterface
{
User *u = User::Find(uid);
if (!u || !u->Account() || r.empty())
if (!u || !u->IsIdentified() || r.empty())
return;
try
+1 -1
View File
@@ -23,7 +23,7 @@ class IdentifyInterface : public LDAPInterface
void OnResult(const LDAPResult &r) anope_override
{
if (!u || !u->Account())
if (!u || !u->IsIdentified())
return;
NickCore *nc = u->Account();
+1 -1
View File
@@ -46,7 +46,7 @@ class SQLOperResult : public SQL::Interface
{
SQLOperResultDeleter d(this);
if (!user || !user->Account())
if (!user || !user->IsIdentified())
return;
if (r.Rows() == 0)
+2 -2
View File
@@ -108,7 +108,7 @@ void IRC2SQL::OnUserConnect(User *u, bool &exempt)
query.SetValue("ident", u->GetIdent());
query.SetValue("vident", u->GetVIdent());
query.SetValue("secure", u->HasMode("SSL") || u->HasExt("ssl") ? "Y" : "N");
query.SetValue("account", u->Account() ? u->Account()->display : "");
query.SetValue("account", u->IsIdentified() ? u->Account()->display : "");
query.SetValue("fingerprint", u->fingerprint);
query.SetValue("signon", u->signon);
query.SetValue("server", u->server->GetName());
@@ -176,7 +176,7 @@ void IRC2SQL::OnUserLogin(User *u)
{
query = "UPDATE `" + prefix + "user` SET account=@account@ WHERE nick=@nick@";
query.SetValue("nick", u->nick);
query.SetValue("account", u->Account() ? u->Account()->display : "");
query.SetValue("account", u->IsIdentified() ? u->Account()->display : "");
this->RunQuery(query);
}
+5 -5
View File
@@ -207,7 +207,7 @@ class MChanstats : public Module
const Anope::string GetDisplay(User *u)
{
if (u && u->Account() && ns_stats.HasExt(u->Account()))
if (u && u->IsIdentified() && ns_stats.HasExt(u->Account()))
return u->Account()->display;
else
return "";
@@ -277,8 +277,8 @@ class MChanstats : public Module
"`chan` varchar(64) NOT NULL DEFAULT '',"
"`nick` varchar(64) NOT NULL DEFAULT '',"
"`type` ENUM('total', 'monthly', 'weekly', 'daily') NOT NULL,"
"`letters` int(10) unsigned NOT NULL DEFAULT '0',"
"`words` int(10) unsigned NOT NULL DEFAULT '0',"
"`letters` bigint unsigned NOT NULL DEFAULT '0',"
"`words` bigint unsigned NOT NULL DEFAULT '0',"
"`line` int(10) unsigned NOT NULL DEFAULT '0',"
"`actions` int(10) unsigned NOT NULL DEFAULT '0',"
"`smileys_happy` int(10) unsigned NOT NULL DEFAULT '0',"
@@ -527,7 +527,7 @@ class MChanstats : public Module
void OnTopicUpdated(User *source, Channel *c, const Anope::string &user, const Anope::string &topic) anope_override
{
if (!source || !source->Account() || !c->ci || !cs_stats.HasExt(c->ci))
if (!source || !source->IsIdentified() || !c->ci || !cs_stats.HasExt(c->ci))
return;
query = "CALL " + prefix + "chanstats_proc_update(@channel@, @nick@, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);";
query.SetValue("channel", c->name);
@@ -550,7 +550,7 @@ class MChanstats : public Module
private:
void OnModeChange(Channel *c, User *u)
{
if (!u || !u->Account() || !c->ci || !cs_stats.HasExt(c->ci))
if (!u || !u->IsIdentified() || !c->ci || !cs_stats.HasExt(c->ci))
return;
query = "CALL " + prefix + "chanstats_proc_update(@channel@, @nick@, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0);";
+1 -1
View File
@@ -167,7 +167,7 @@ class Fantasy : public Module
}
// Command requires registered users only
if (!cmd->AllowUnregistered() && !u->Account())
if (!cmd->AllowUnregistered() && !u->IsIdentified())
return;
if (params.size() < cmd->min_params)
+1 -1
View File
@@ -68,7 +68,7 @@ class DNSBLResolver : public Request
if (!blacklist.replies.empty() && !reply)
return;
if (reply && reply->allow_account && user->Account())
if (reply && reply->allow_account && user->IsIdentified())
return;
Anope::string reason = this->blacklist.reason, addr = user->ip.addr();
+1 -1
View File
@@ -226,7 +226,7 @@ class MyXMLRPCEvent : public XMLRPCEvent
request.reply("ip", u->ip.addr());
request.reply("timestamp", stringify(u->timestamp));
request.reply("signon", stringify(u->signon));
if (u->Account())
if (u->IsIdentified())
{
request.reply("account", iface->Sanitize(u->Account()->display));
if (u->Account()->o)
+1 -1
View File
@@ -253,7 +253,7 @@ namespace InspIRCdExtban
{
const Anope::string &mask = e->GetMask();
Anope::string real_mask = mask.substr(2);
return !u->Account() && Entry("BAN", real_mask).Matches(u);
return !u->IsIdentified() && Entry("BAN", real_mask).Matches(u);
}
};
}
+8 -4
View File
@@ -394,9 +394,12 @@ class InspIRCd3Proto : public IRCDProto
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
@@ -442,6 +445,7 @@ class InspIRCd3Proto : public IRCDProto
if (na->nc->HasExt("UNCONFIRMED"))
return;
IRCD->SendVhost(u, na->GetVhostIdent(), na->GetVhostHost());
UplinkSocket::Message(Me) << "METADATA " << u->GetUID() << " accountid :" << na->nc->GetId();
UplinkSocket::Message(Me) << "METADATA " << u->GetUID() << " accountname :" << na->nc->display;
}
@@ -695,7 +699,7 @@ namespace InspIRCdExtban
{
const Anope::string &mask = e->GetMask();
Anope::string real_mask = mask.substr(2);
return !u->Account() && Entry("BAN", real_mask).Matches(u);
return !u->IsIdentified() && Entry("BAN", real_mask).Matches(u);
}
};
@@ -1682,7 +1686,7 @@ struct IRCDMessageIJoin : IRCDMessage
time_t chants = Anope::CurTime;
if (params.size() >= 4)
{
chants = params[2].is_pos_number_only() ? convertTo<unsigned>(params[2]) : 0;
chants = params[2].is_pos_number_only() ? convertTo<time_t>(params[2]) : 0;
for (unsigned i = 0; i < params[3].length(); ++i)
user.first.AddMode(params[3][i]);
}
+1 -1
View File
@@ -537,7 +537,7 @@ namespace UnrealExtban
const Anope::string &mask = e->GetMask();
Anope::string real_mask = mask.substr(3);
return u->Account() && Anope::Match(u->Account()->display, real_mask);
return u->IsIdentified() && Anope::Match(u->Account()->display, real_mask);
}
};
}
+2 -2
View File
@@ -559,10 +559,10 @@ namespace UnrealExtban
const Anope::string &mask = e->GetMask();
Anope::string real_mask = mask.substr(3);
if (real_mask == "0" && !u->Account()) /* ~a:0 is special and matches all unauthenticated users */
if (real_mask == "0" && !u->IsIdentified()) /* ~a:0 is special and matches all unauthenticated users */
return true;
return u->Account() && Anope::Match(u->Account()->display, real_mask);
return u->IsIdentified() && Anope::Match(u->Account()->display, real_mask);
}
};
+4 -1
View File
@@ -378,8 +378,11 @@ class ChanServCore : public Module, public ChanServService
return EVENT_CONTINUE;
}
void OnPostInit() anope_override
void OnUplinkSync(Server* s) anope_override
{
// We need to do this when the uplink is synced as we may not know if
// the mode exists before then on some IRCds (e.g. InspIRCd).
if (!persist)
return;
+2 -2
View File
@@ -18,7 +18,7 @@ class MemoServCore : public Module, public MemoServService
bool SendMemoMail(NickCore *nc, MemoInfo *mi, Memo *m)
{
Anope::string subject = Language::Translate(nc, Config->GetBlock("mail")->Get<const Anope::string>("memo_subject").c_str()),
message = Language::Translate(Config->GetBlock("mail")->Get<const Anope::string>("memo_message").c_str());
message = Language::Translate(nc, Config->GetBlock("mail")->Get<const Anope::string>("memo_message").c_str());
subject = subject.replace_all_cs("%n", nc->display);
subject = subject.replace_all_cs("%s", m->sender);
@@ -100,7 +100,7 @@ class MemoServCore : public Module, public MemoServService
if (ci->AccessFor(cu->user).HasPriv("MEMO"))
{
if (cu->user->Account() && cu->user->Account()->HasExt("MEMO_RECEIVE"))
if (cu->user->IsIdentified() && cu->user->Account()->HasExt("MEMO_RECEIVE"))
cu->user->SendMessage(MemoServ, MEMO_NEW_X_MEMO_ARRIVED, ci->name.c_str(), Config->StrictPrivmsg.c_str(), MemoServ->nick.c_str(), ci->name.c_str(), mi->memos->size());
}
}
+1 -1
View File
@@ -399,7 +399,7 @@ class NickServCore : public Module, public NickServService
const NickAlias *na = NickAlias::Find(u->nick);
const Anope::string &unregistered_notice = Config->GetModule(this)->Get<const Anope::string>("unregistered_notice");
if (!Config->GetModule("nickserv")->Get<bool>("nonicknameownership") && !unregistered_notice.empty() && !na && !u->Account())
if (!Config->GetModule("nickserv")->Get<bool>("nonicknameownership") && !unregistered_notice.empty() && !na && !u->IsIdentified())
u->SendMessage(NickServ, unregistered_notice.replace_all_cs("%n", u->nick));
else if (na && !u->IsIdentified(true))
this->Validate(u);
-1
View File
@@ -174,7 +174,6 @@ Conf::Conf() : Block("")
ValidateNotEmpty("serverinfo", "motd", serverinfo->Get<const Anope::string>("motd"));
ValidateNotZero("options", "readtimeout", options->Get<time_t>("readtimeout"));
ValidateNotZero("options", "warningtimeout", options->Get<time_t>("warningtimeout"));
ValidateNotZero("networkinfo", "nicklen", networkinfo->Get<unsigned>("nicklen"));
ValidateNotZero("networkinfo", "userlen", networkinfo->Get<unsigned>("userlen"));
+2 -2
View File
@@ -329,7 +329,7 @@ void Anope::Init(int ac, char **av)
Log(LOG_TERMINAL) << "-v, --version";
Log(LOG_TERMINAL) << "";
Log(LOG_TERMINAL) << "Further support is available from https://www.anope.org/";
Log(LOG_TERMINAL) << "Or visit us on IRC at irc.anope.org #anope";
Log(LOG_TERMINAL) << "Or visit us on IRC at irc.teranova.net #anope";
throw CoreException();
}
@@ -482,7 +482,7 @@ void Anope::Init(int ac, char **av)
Log(LOG_TERMINAL) << "*** Support resources: Read through the services.conf self-contained";
Log(LOG_TERMINAL) << "*** documentation. Read the documentation files found in the 'docs'";
Log(LOG_TERMINAL) << "*** folder. Visit our portal located at https://www.anope.org/. Join";
Log(LOG_TERMINAL) << "*** our support channel on /server irc.anope.org channel #anope.";
Log(LOG_TERMINAL) << "*** our support channel on /server irc.teranova.net channel #anope.";
throw CoreException("Configuration file failed to validate");
}
+1 -1
View File
@@ -62,7 +62,7 @@ const char *Language::Translate(const char *string)
const char *Language::Translate(User *u, const char *string)
{
if (u && u->Account())
if (u && u->IsIdentified())
return Translate(u->Account(), string);
else
return Translate("", string);
+1 -1
View File
@@ -114,7 +114,7 @@ void MemoInfo::Del(unsigned index)
bool MemoInfo::HasIgnore(User *u)
{
for (unsigned i = 0; i < this->ignores.size(); ++i)
if (u->nick.equals_ci(this->ignores[i]) || (u->Account() && u->Account()->display.equals_ci(this->ignores[i])) || Anope::Match(u->GetMask(), Anope::string(this->ignores[i])))
if (u->nick.equals_ci(this->ignores[i]) || (u->IsIdentified() && u->Account()->display.equals_ci(this->ignores[i])) || Anope::Match(u->GetMask(), Anope::string(this->ignores[i])))
return true;
return false;
}
+7 -7
View File
@@ -24,8 +24,8 @@ die="yes"
###########################
# The GeoIP data is created by MaxMind, available from www.maxmind.com.
geoip_country_source="https://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip"
geoip_city_source="https://geolite.maxmind.com/download/geoip/database/GeoLiteCity_CSV/GeoLiteCity-latest.zip"
geoip_country_source="https://mirrors-cdn.liferay.com/geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip"
geoip_city_source="https://mirrors-cdn.liferay.com/geolite.maxmind.com/download/geoip/database/GeoLiteCity-latest.tar.xz"
geoip_region_source="https://www.maxmind.com/download/geoip/misc/region_codes.csv"
###########################
@@ -65,17 +65,17 @@ elif test $geoip_database = "city"; then
download "$geoip_city_source" "City Database:"
download "$geoip_region_source" "Region Database:"
echo "Unpacking..."
unzip -jo GeoLiteCity-latest.zip
rm GeoLiteCity-latest.zip
tar -xf GeoLiteCity-latest.tar.xz --strip-components 1
rm GeoLiteCity-latest.tar.xz
echo "Converting to utf-8..."
iconv -f ISO-8859-1 -t UTF-8 GeoLiteCity-Blocks.csv -o $prefix"geoip_city_blocks.csv"
iconv -f ISO-8859-1 -t UTF-8 GeoLiteCity-Location.csv -o $prefix"geoip_city_location.csv"
iconv -f ISO-8859-1 -t UTF-8 region.csv -o $prefix"geoip_city_region.csv"
rm GeoLiteCity-Blocks.csv GeoLiteCity-Location.csv region.csv
iconv -f ISO-8859-1 -t UTF-8 region_codes.csv -o $prefix"geoip_city_region.csv"
rm GeoLiteCity-Blocks.csv GeoLiteCity-Location.csv region_codes.csv
echo "Importing..."
mysqlimport --columns=start,end,locID --ignore-lines=2 $PARAMS $prefix"geoip_city_blocks.csv"
mysqlimport --columns=locID,country,region,city,@x,latitude,longitude,@x,areaCode --ignore-lines=2 $PARAMS $prefix"geoip_city_location.csv"
mysqlimport --columns=country,region,regionname $PARAMS $prefix"geoip_city_region.csv"
rm $prefix"geoip_city_blocks.csv" $prefix"geoip_city_location.csv" $prefix"geoip_city_region.csv" $prefix"geoip_country6.csv"
rm $prefix"geoip_city_blocks.csv" $prefix"geoip_city_location.csv" $prefix"geoip_city_region.csv"
echo "Done..."
fi
+2 -2
View File
@@ -2,5 +2,5 @@
VERSION_MAJOR=2
VERSION_MINOR=0
VERSION_PATCH=16
VERSION_EXTRA="-git"
VERSION_PATCH=17
VERSION_EXTRA=""