From b578ed2544e38ce7b7459951059651635b8e4255 Mon Sep 17 00:00:00 2001 From: Michael Hazell Date: Thu, 21 Jul 2016 23:27:20 -0400 Subject: charybdis.cpp: Properly support RESVs Properly support RESV and UNRESV in Charybdis, and improve RESV setting for pseudoclients when bursting. --- modules/protocol/charybdis.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/modules/protocol/charybdis.cpp b/modules/protocol/charybdis.cpp index c381ef124..f0d01c8cc 100644 --- a/modules/protocol/charybdis.cpp +++ b/modules/protocol/charybdis.cpp @@ -31,13 +31,29 @@ class ChannelModeLargeBan : public ChannelMode class CharybdisProto : public IRCDProto { + BotInfo *FindIntroduced() + { + BotInfo *bi = Config->GetClient("OperServ"); + + if (bi && bi->introduced) + return bi; + + for (botinfo_map::iterator it = BotListByNick->begin(), it_end = BotListByNick->end(); it != it_end; ++it) + if (it->second->introduced) + return it->second; + + return NULL; + } + public: + CharybdisProto(Module *creator) : IRCDProto(creator, "Charybdis 3.4+") { DefaultPseudoclientModes = "+oiS"; CanCertFP = true; CanSNLine = true; CanSQLine = true; + CanSQLineChannel = true; CanSZLine = true; CanSVSNick = true; CanSVSHold = true; @@ -54,7 +70,6 @@ class CharybdisProto : public IRCDProto void SendSGLineDel(const XLine *x) anope_override { ratbox->SendSGLineDel(x); } void SendAkill(User *u, XLine *x) anope_override { ratbox->SendAkill(u, x); } void SendAkillDel(const XLine *x) anope_override { ratbox->SendAkillDel(x); } - void SendSQLineDel(const XLine *x) anope_override { ratbox->SendSQLineDel(x); } void SendJoin(User *user, Channel *c, const ChannelStatus *status) anope_override { ratbox->SendJoin(user, c, status); } void SendServer(const Server *server) anope_override { ratbox->SendServer(server); } void SendChannel(Channel *c) anope_override { ratbox->SendChannel(c); } @@ -77,7 +92,18 @@ class CharybdisProto : public IRCDProto void SendSQLine(User *, const XLine *x) anope_override { - UplinkSocket::Message(Me) << "RESV * " << x->mask << " :" << x->GetReason(); + /* Calculate the time left before this would expire, capping it at 2 days */ + time_t timeleft = x->expires - Anope::CurTime; + + if (timeleft > 172800 || !x->expires) + timeleft = 172800; + + UplinkSocket::Message(FindIntroduced()) << "ENCAP * RESV " << timeleft << " " << x->mask << " 0 :" << x->GetReason(); + } + + void SendSQLineDel(const XLine *x) anope_override + { + UplinkSocket::Message(Config->GetClient("OperServ")) << "ENCAP * UNRESV " << x->mask; } void SendConnect() anope_override -- cgit From 9f9371531dd166a41a1fc233d7691fcd3f78b73e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 23 Jul 2016 15:22:54 -0400 Subject: Fix making directories from the Windows installer --- CMakeLists.txt | 12 ++++++------ src/tools/CMakeLists.txt | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b514e7f2f..a53e3ef5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -489,16 +489,16 @@ get_target_property(SERVICES_BINARY ${PROGRAM_NAME} LOCATION) get_filename_component(SERVICES_BINARY ${SERVICES_BINARY} NAME) # At install time, create the following additional directories -install(CODE "file(MAKE_DIRECTORY \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${DB_DIR}/backups\")") -install(CODE "file(MAKE_DIRECTORY \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${LOGS_DIR}\")") +install(CODE "file(MAKE_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${DB_DIR}/backups\")") +install(CODE "file(MAKE_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${LOGS_DIR}\")") if(WIN32) - install(CODE "file(MAKE_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}/${DB_DIR}/runtime\")") + install(CODE "file(MAKE_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${DB_DIR}/runtime\")") endif(WIN32) # On non-Windows platforms, if RUNGROUP is set, change the permissions of the below directories, as well as the group of the data directory if(NOT WIN32 AND RUNGROUP) - install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/\${DB_DIR}/backups\")") - install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/\${LOGS_DIR}\")") - install(CODE "execute_process(COMMAND ${CHGRP} -R ${RUNGROUP} \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}\")") + install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\${DB_DIR}/backups\")") + install(CODE "execute_process(COMMAND ${CHMOD} 2775 \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\${LOGS_DIR}\")") + install(CODE "execute_process(COMMAND ${CHGRP} -R ${RUNGROUP} \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}\")") endif(NOT WIN32 AND RUNGROUP) # On Windows platforms, install extra files if(WIN32) diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt index ef2f3b15b..3e00b981d 100644 --- a/src/tools/CMakeLists.txt +++ b/src/tools/CMakeLists.txt @@ -48,5 +48,5 @@ endif(NOT WIN32) # On non-Windows platforms, if RUNGROUP is set, change the permissions of the tools directory if(NOT WIN32 AND RUNGROUP) - install(CODE "execute_process(COMMAND ${CHMOD} 2770 \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin\")") + install(CODE "execute_process(COMMAND ${CHMOD} 2770 \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/bin\")") endif(NOT WIN32 AND RUNGROUP) -- cgit From 647f8cd4e639e230d80046ee5967f88a72bdee4a Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 23 Jul 2016 15:47:33 -0400 Subject: Add/fix various checks on source user existing in the protocol modules --- modules/protocol/bahamut.cpp | 7 ++++++- modules/protocol/charybdis.cpp | 6 +++++- modules/protocol/ngircd.cpp | 7 +++++-- modules/protocol/unreal.cpp | 6 +++++- modules/protocol/unreal4.cpp | 6 +++++- 5 files changed, 26 insertions(+), 6 deletions(-) diff --git a/modules/protocol/bahamut.cpp b/modules/protocol/bahamut.cpp index 16d593fab..453050942 100644 --- a/modules/protocol/bahamut.cpp +++ b/modules/protocol/bahamut.cpp @@ -386,7 +386,12 @@ struct IRCDMessageNick : IRCDMessage User::OnIntroduce(params[0], params[4], params[5], "", params[8], s, params[9], signon, params[3], "", na ? *na->nc : NULL); } else - source.GetUser()->ChangeNick(params[0]); + { + User *u = source.GetUser(); + + if (u) + u->ChangeNick(params[0]); + } } }; diff --git a/modules/protocol/charybdis.cpp b/modules/protocol/charybdis.cpp index f0d01c8cc..c43a290bc 100644 --- a/modules/protocol/charybdis.cpp +++ b/modules/protocol/charybdis.cpp @@ -195,7 +195,11 @@ class CharybdisProto : public IRCDProto struct IRCDMessageEncap : IRCDMessage { - IRCDMessageEncap(Module *creator) : IRCDMessage(creator, "ENCAP", 3) { SetFlag(IRCDMESSAGE_SOFT_LIMIT);} + IRCDMessageEncap(Module *creator) : IRCDMessage(creator, "ENCAP", 3) + { + SetFlag(IRCDMESSAGE_SOFT_LIMIT); + SetFlag(IRCDMESSAGE_REQUIRE_USER); + } void Run(MessageSource &source, const std::vector ¶ms) anope_override { diff --git a/modules/protocol/ngircd.cpp b/modules/protocol/ngircd.cpp index e7ae31fce..bcd4826f2 100644 --- a/modules/protocol/ngircd.cpp +++ b/modules/protocol/ngircd.cpp @@ -280,7 +280,7 @@ struct IRCDMessageChaninfo : IRCDMessage struct IRCDMessageJoin : Message::Join { - IRCDMessageJoin(Module *creator) : Message::Join(creator, "JOIN") { } + IRCDMessageJoin(Module *creator) : Message::Join(creator, "JOIN") { SetFlag(IRCDMESSAGE_REQUIRE_USER); } /* * <@po||ux> DukeP: RFC 2813, 4.2.1: the JOIN command on server-server links @@ -440,8 +440,11 @@ struct IRCDMessageNick : IRCDMessage { if (params.size() == 1) { + User *u = source.GetUser(); + // we have a nickchange - source.GetUser()->ChangeNick(params[0]); + if (u) + u->ChangeNick(params[0]); } else if (params.size() == 7) { diff --git a/modules/protocol/unreal.cpp b/modules/protocol/unreal.cpp index cff2f440b..c6fc4a1c0 100644 --- a/modules/protocol/unreal.cpp +++ b/modules/protocol/unreal.cpp @@ -929,7 +929,11 @@ struct IRCDMessageNick : IRCDMessage User::OnIntroduce(params[0], params[3], params[4], vhost, ip, s, params[10], user_ts, params[7], "", na ? *na->nc : NULL); } else - source.GetUser()->ChangeNick(params[0]); + { + User *u = source.GetUser(); + if (u) + u->ChangeNick(params[0]); + } } }; diff --git a/modules/protocol/unreal4.cpp b/modules/protocol/unreal4.cpp index 6e5f6ec55..b98de5ff2 100644 --- a/modules/protocol/unreal4.cpp +++ b/modules/protocol/unreal4.cpp @@ -966,7 +966,11 @@ struct IRCDMessageNick : IRCDMessage User::OnIntroduce(params[0], params[3], params[4], vhost, ip, s, params[10], user_ts, params[7], "", na ? *na->nc : NULL); } else - source.GetUser()->ChangeNick(params[0]); + { + User *u = source.GetUser(); + if (u) + u->ChangeNick(params[0]); + } } }; -- cgit From 5bd3fde79b8dac1b52936544ffdcaa1febe8b1bb Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 23 Jul 2016 16:17:21 -0400 Subject: cs_set: clear last modes before unserializing them --- modules/commands/cs_set.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/commands/cs_set.cpp b/modules/commands/cs_set.cpp index fb58f9efd..bac744b2c 100644 --- a/modules/commands/cs_set.cpp +++ b/modules/commands/cs_set.cpp @@ -1135,6 +1135,7 @@ class CSSet : public Module ChannelInfo *ci = anope_dynamic_static_cast(s); Anope::string modes; data["last_modes"] >> modes; + ci->last_modes.clear(); for (spacesepstream sep(modes); sep.GetToken(modes);) { size_t c = modes.find(','); -- cgit From 0e0615c6fecce363e0ad007319c777cf9481dd25 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 23 Jul 2016 16:17:33 -0400 Subject: Note Windows installer fixes in changelog --- docs/Changes | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changes b/docs/Changes index 0836d5b4e..472204ae0 100644 --- a/docs/Changes +++ b/docs/Changes @@ -15,6 +15,7 @@ Fix reported expiry time when the time is divisible by 1 year Clearify botserv repeat kicker help and allow setting repeat times to 1 Send vident/vhost with SASL login Add support for SASL reauth +Fix log and database backup directories to be properly created by the installer Anope Version 2.0.3 ------------------- -- cgit From c18eedec18e401a8948f40419d6b957d3fecf2f6 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 23 Jul 2016 16:20:54 -0400 Subject: ns_set: clear last modes before unserializing them --- modules/commands/ns_set.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/commands/ns_set.cpp b/modules/commands/ns_set.cpp index f9351424e..132bd6947 100644 --- a/modules/commands/ns_set.cpp +++ b/modules/commands/ns_set.cpp @@ -1211,6 +1211,7 @@ class NSSet : public Module NickCore *nc = anope_dynamic_static_cast(s); Anope::string modes; data["last_modes"] >> modes; + nc->last_modes.clear(); for (spacesepstream sep(modes); sep.GetToken(modes);) { size_t c = modes.find(','); -- cgit From 01768bc73e7a20721f5b729ff3245a81ceac1b58 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 23 Jul 2016 16:25:37 -0400 Subject: Update Changes.conf --- docs/Changes.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/Changes.conf b/docs/Changes.conf index 49bf6b783..bda95ede8 100644 --- a/docs/Changes.conf +++ b/docs/Changes.conf @@ -1,5 +1,6 @@ Anope Version 2.0.4-git ------------------- +Removed m_sasl_dh-aes and m_sasl_dh-blowfish Anope Version 2.0.3 ------------------- -- cgit From c2e09fdaea40acaa326be473fff46cb5d7c9399f Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 23 Jul 2016 16:26:14 -0400 Subject: Anope 2.0.4 Release --- docs/Changes | 2 +- docs/Changes.conf | 2 +- src/version.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/Changes b/docs/Changes index 472204ae0..c5880a80f 100644 --- a/docs/Changes +++ b/docs/Changes @@ -1,4 +1,4 @@ -Anope Version 2.0.4-git +Anope Version 2.0.4 ------------------- Add notice rpc method to XMLRPC Fix access check in cs_updown to not allow actions on users with equal access diff --git a/docs/Changes.conf b/docs/Changes.conf index bda95ede8..aa6da2c5b 100644 --- a/docs/Changes.conf +++ b/docs/Changes.conf @@ -1,4 +1,4 @@ -Anope Version 2.0.4-git +Anope Version 2.0.4 ------------------- Removed m_sasl_dh-aes and m_sasl_dh-blowfish diff --git a/src/version.sh b/src/version.sh index ef928b914..1019b98db 100644 --- a/src/version.sh +++ b/src/version.sh @@ -3,5 +3,5 @@ VERSION_MAJOR=2 VERSION_MINOR=0 VERSION_PATCH=4 -VERSION_EXTRA="-git" +VERSION_EXTRA="" -- cgit From db4f38bcf5f712dec9f748238cbcdea7f47a95b2 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 23 Jul 2016 17:37:05 -0400 Subject: Bump for 2.0.5-git --- docs/Changes | 3 +++ docs/Changes.conf | 3 +++ src/version.sh | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/Changes b/docs/Changes index c5880a80f..c89b46625 100644 --- a/docs/Changes +++ b/docs/Changes @@ -1,3 +1,6 @@ +Anope Version 2.0.5-git +------------------- + Anope Version 2.0.4 ------------------- Add notice rpc method to XMLRPC diff --git a/docs/Changes.conf b/docs/Changes.conf index aa6da2c5b..17ffae531 100644 --- a/docs/Changes.conf +++ b/docs/Changes.conf @@ -1,3 +1,6 @@ +Anope Version 2.0.5-git +------------------- + Anope Version 2.0.4 ------------------- Removed m_sasl_dh-aes and m_sasl_dh-blowfish diff --git a/src/version.sh b/src/version.sh index 1019b98db..cc83d73e7 100644 --- a/src/version.sh +++ b/src/version.sh @@ -2,6 +2,6 @@ VERSION_MAJOR=2 VERSION_MINOR=0 -VERSION_PATCH=4 -VERSION_EXTRA="" +VERSION_PATCH=5 +VERSION_EXTRA="-git" -- cgit From 937b0e7185dca90af67ef516d513885cb362ad15 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 25 Jul 2016 19:34:59 -0400 Subject: db_old: fix warnings --- modules/database/db_old.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/database/db_old.cpp b/modules/database/db_old.cpp index 00524fdc3..0c65fb95b 100644 --- a/modules/database/db_old.cpp +++ b/modules/database/db_old.cpp @@ -30,7 +30,7 @@ else \ #define getc_db(f) (fgetc((f)->fp)) #define read_db(f, buf, len) (fread((buf), 1, (len), (f)->fp)) -#define read_buffer(buf, f) (read_db((f), (buf), sizeof(buf)) == sizeof(buf)) +#define read_buffer(buf, f) ((read_db((f), (buf), sizeof(buf)) == sizeof(buf)) ? 0 : -1) #define OLD_BI_PRIVATE 0x0001 -- cgit From dad4be050b70efcfe844d6852aef8f351323429e Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 25 Jul 2016 19:35:19 -0400 Subject: cs_xop: remove unused code --- modules/commands/cs_xop.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/modules/commands/cs_xop.cpp b/modules/commands/cs_xop.cpp index 3a6c4d484..e3dd8aa79 100644 --- a/modules/commands/cs_xop.cpp +++ b/modules/commands/cs_xop.cpp @@ -113,10 +113,6 @@ class CommandCSXOP : public Command return; } - XOPChanAccess tmp_access(NULL); - tmp_access.ci = ci; - tmp_access.type = source.command.upper(); - AccessGroup access = source.AccessFor(ci); const ChanAccess *highest = access.Highest(); bool override = false; @@ -246,10 +242,6 @@ class CommandCSXOP : public Command return; } - XOPChanAccess tmp_access(NULL); - tmp_access.ci = ci; - tmp_access.type = source.command.upper(); - AccessGroup access = source.AccessFor(ci); const ChanAccess *highest = access.Highest(); bool override = false; -- cgit From 8fdfa6e094ebddc9698ca6245227857e4e27f06b Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 25 Jul 2016 22:27:30 -0400 Subject: Fix #1684 more, can have non-user sources for encap sasl --- modules/protocol/charybdis.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/modules/protocol/charybdis.cpp b/modules/protocol/charybdis.cpp index c43a290bc..68bbe12b8 100644 --- a/modules/protocol/charybdis.cpp +++ b/modules/protocol/charybdis.cpp @@ -198,25 +198,30 @@ struct IRCDMessageEncap : IRCDMessage IRCDMessageEncap(Module *creator) : IRCDMessage(creator, "ENCAP", 3) { SetFlag(IRCDMESSAGE_SOFT_LIMIT); - SetFlag(IRCDMESSAGE_REQUIRE_USER); } void Run(MessageSource &source, const std::vector ¶ms) anope_override { - User *u = source.GetUser(); - // In a burst, states that the source user is logged in as the account. if (params[1] == "LOGIN" || params[1] == "SU") { + User *u = source.GetUser(); NickCore *nc = NickCore::Find(params[2]); - if (!nc) + + if (!u || !nc) return; + u->Login(nc); } // Received: :42XAAAAAE ENCAP * CERTFP :3f122a9cc7811dbad3566bf2cec3009007c0868f - if (params[1] == "CERTFP") + else if (params[1] == "CERTFP") { + User *u = source.GetUser(); + if (!u) + return; + u->fingerprint = params[2]; + FOREACH_MOD(OnFingerprint, (u)); } /* @@ -230,7 +235,7 @@ struct IRCDMessageEncap : IRCDMessage * * Charybdis only accepts messages from SASL agents; these must have umode +S */ - if (params[1] == "SASL" && SASL::sasl && params.size() >= 6) + else if (params[1] == "SASL" && SASL::sasl && params.size() >= 6) { SASL::Message m; m.source = params[2]; -- cgit From 9c0b8436653bdde2a2af4c8d51283ddb427a7628 Mon Sep 17 00:00:00 2001 From: bonnedav Date: Mon, 8 Aug 2016 02:41:42 -0600 Subject: Remove unused commands from oper config. --- data/example.conf | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/data/example.conf b/data/example.conf index 763eed4c7..24502270b 100644 --- a/data/example.conf +++ b/data/example.conf @@ -784,12 +784,7 @@ log * chanserv/drop chanserv/getkey chanserv/invite * chanserv/list chanserv/suspend chanserv/topic * - * chanserv/saset/bantype chanserv/saset/description chanserv/saset/email chanserv/saset/keepmodes - * chanserv/saset/founder chanserv/saset/keeptopic chanserv/saset/restricted - * chanserv/saset/peace chanserv/saset/persist chanserv/saset/private - * chanserv/saset/secure chanserv/saset/securefounder chanserv/saset/secureops - * chanserv/saset/signkick chanserv/saset/successor chanserv/saset/topiclock - * chanserv/saset/url chanserv/saset/noexpire chanserv/saset/autoop + * chanserv/saset/noexpire * * memoserv/sendall memoserv/staff * -- cgit From 13c5eec00a2e6483168243e88bb6fe038795078f Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 5 Sep 2016 10:41:08 -0400 Subject: m_ssl_openssl: allow certificate chain files to be used --- modules/extra/m_ssl_openssl.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/extra/m_ssl_openssl.cpp b/modules/extra/m_ssl_openssl.cpp index 00df168de..bdc3a5624 100644 --- a/modules/extra/m_ssl_openssl.cpp +++ b/modules/extra/m_ssl_openssl.cpp @@ -147,7 +147,7 @@ class SSLModule : public Module if (Anope::IsFile(this->certfile.c_str())) { - if (!SSL_CTX_use_certificate_file(client_ctx, this->certfile.c_str(), SSL_FILETYPE_PEM) || !SSL_CTX_use_certificate_file(server_ctx, this->certfile.c_str(), SSL_FILETYPE_PEM)) + if (!SSL_CTX_use_certificate_chain_file(client_ctx, this->certfile.c_str()) || !SSL_CTX_use_certificate_chain_file(server_ctx, this->certfile.c_str())) throw ConfigException("Error loading certificate"); else Log(LOG_DEBUG) << "m_ssl_openssl: Successfully loaded certificate " << this->certfile; -- cgit From d488efdcfee6b43660007ce320b17be8cafe5ae1 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 6 Sep 2016 14:46:19 -0400 Subject: ms_cancel: cleanup, consider accounts by equiality instead of sender name to account name --- modules/commands/ms_cancel.cpp | 56 ++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/modules/commands/ms_cancel.cpp b/modules/commands/ms_cancel.cpp index 9e6f0ce63..07b7f3050 100644 --- a/modules/commands/ms_cancel.cpp +++ b/modules/commands/ms_cancel.cpp @@ -34,27 +34,47 @@ class CommandMSCancel : public Command MemoInfo *mi = MemoInfo::GetMemoInfo(nname, ischan); if (mi == NULL) - source.Reply(ischan ? CHAN_X_NOT_REGISTERED : _(NICK_X_NOT_REGISTERED), nname.c_str()); + { + source.Reply(ischan ? CHAN_X_NOT_REGISTERED : NICK_X_NOT_REGISTERED, nname.c_str()); + return; + } + + ChannelInfo *ci = NULL; + NickAlias *na = NULL; + if (ischan) + { + ci = ChannelInfo::Find(nname); + + if (ci == NULL) + return; // can't happen + } else { - ChannelInfo *ci = NULL; - NickAlias *na = NULL; - if (ischan) - ci = ChannelInfo::Find(nname); - else - na = NickAlias::Find(nname); - for (int i = mi->memos->size() - 1; i >= 0; --i) - if (mi->GetMemo(i)->unread && source.nc->display.equals_ci(mi->GetMemo(i)->sender)) - { - FOREACH_MOD(OnMemoDel, (ischan ? ci->name : na->nc->display, mi, mi->GetMemo(i))); - mi->Del(i); - source.Reply(_("Last memo to \002%s\002 has been cancelled."), nname.c_str()); - return; - } - - source.Reply(_("No memo was cancelable.")); + na = NickAlias::Find(nname); + + if (na == NULL) + return; // can't happen } - return; + + for (int i = mi->memos->size() - 1; i >= 0; --i) + { + Memo *m = mi->GetMemo(i); + + if (!m->unread) + continue; + + NickAlias *sender = NickAlias::Find(m->sender); + + if (sender && sender->nc == source.GetAccount()) + { + FOREACH_MOD(OnMemoDel, (ischan ? ci->name : na->nc->display, mi, m)); + mi->Del(i); + source.Reply(_("Last memo to \002%s\002 has been cancelled."), (ischan ? ci->name : na->nc->display).c_str()); + return; + } + } + + source.Reply(_("No memo was cancelable.")); } bool OnHelp(CommandSource &source, const Anope::string &subcommand) anope_override -- cgit From b50fbec705dffd85a28946b99ac510b978934a05 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 13 Sep 2016 12:36:48 -0400 Subject: cs_seen: allow unregistered users to use --- modules/commands/cs_seen.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/commands/cs_seen.cpp b/modules/commands/cs_seen.cpp index 80bc8e548..0eb5ae5cb 100644 --- a/modules/commands/cs_seen.cpp +++ b/modules/commands/cs_seen.cpp @@ -260,6 +260,7 @@ class CommandSeen : public Command { this->SetDesc(_("Tells you about the last time a user was seen")); this->SetSyntax(_("\037nick\037")); + this->AllowUnregistered(true); } void Execute(CommandSource &source, const std::vector ¶ms) anope_override -- cgit