]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Recheck users for xlines when their real hostname changes.
authorSadie Powell <sadie@witchery.services>
Tue, 6 Oct 2020 09:31:09 +0000 (10:31 +0100)
committerSadie Powell <sadie@witchery.services>
Tue, 6 Oct 2020 09:31:39 +0000 (10:31 +0100)
include/modules.h
src/coremods/core_xline/core_xline.cpp
src/modules.cpp
src/users.cpp

index a5e4440dcf256a9f3c512a0f0784fdc1ea2f8438..a6450547cf090ad18879ded45dd575352c49b856 100644 (file)
@@ -233,23 +233,78 @@ enum Priority { PRIORITY_FIRST, PRIORITY_LAST, PRIORITY_BEFORE, PRIORITY_AFTER }
  */
 enum Implementation
 {
-       I_OnUserConnect, I_OnUserPreQuit, I_OnUserQuit, I_OnUserDisconnect, I_OnUserJoin, I_OnUserPart,
-       I_OnSendSnotice, I_OnUserPreJoin, I_OnUserPreKick, I_OnUserKick, I_OnOper,
-       I_OnUserPreInvite, I_OnUserInvite, I_OnUserPreMessage, I_OnUserPreNick,
-       I_OnUserPostMessage, I_OnUserMessageBlocked, I_OnMode, I_OnShutdown,
-       I_OnDecodeMetaData, I_OnAcceptConnection, I_OnUserInit, I_OnUserPostInit,
-       I_OnChangeHost, I_OnChangeRealName, I_OnAddLine, I_OnDelLine, I_OnExpireLine,
-       I_OnUserPostNick, I_OnPreMode, I_On005Numeric, I_OnKill, I_OnLoadModule,
-       I_OnUnloadModule, I_OnBackgroundTimer, I_OnPreCommand, I_OnCheckReady, I_OnCheckInvite,
-       I_OnRawMode, I_OnCheckKey, I_OnCheckLimit, I_OnCheckBan, I_OnCheckChannelBan, I_OnExtBanCheck,
-       I_OnPreChangeHost, I_OnPreTopicChange, I_OnConnectionFail,
-       I_OnPostTopicChange, I_OnPostConnect, I_OnPostDeoper,
-       I_OnPreChangeRealName, I_OnUserRegister, I_OnChannelPreDelete, I_OnChannelDelete,
-       I_OnPostOper, I_OnPostCommand, I_OnCommandBlocked, I_OnPostJoin,
-       I_OnBuildNeighborList, I_OnGarbageCollect, I_OnSetConnectClass,
-       I_OnUserMessage, I_OnPassCompare, I_OnNumeric,
-       I_OnPreRehash, I_OnModuleRehash, I_OnChangeIdent, I_OnSetUserIP,
-       I_OnServiceAdd, I_OnServiceDel, I_OnUserWrite,
+       I_On005Numeric,
+       I_OnAcceptConnection,
+       I_OnAddLine,
+       I_OnBackgroundTimer,
+       I_OnBuildNeighborList,
+       I_OnChangeHost,
+       I_OnChangeRealHost,
+       I_OnChangeIdent,
+       I_OnChangeRealName,
+       I_OnChannelDelete,
+       I_OnChannelPreDelete,
+       I_OnCheckBan,
+       I_OnCheckChannelBan,
+       I_OnCheckInvite,
+       I_OnCheckKey,
+       I_OnCheckLimit,
+       I_OnCheckReady,
+       I_OnCommandBlocked,
+       I_OnConnectionFail,
+       I_OnDecodeMetaData,
+       I_OnDelLine,
+       I_OnExpireLine,
+       I_OnExtBanCheck,
+       I_OnGarbageCollect,
+       I_OnKill,
+       I_OnLoadModule,
+       I_OnMode,
+       I_OnModuleRehash,
+       I_OnNumeric,
+       I_OnOper,
+       I_OnPassCompare,
+       I_OnPostCommand,
+       I_OnPostConnect,
+       I_OnPostDeoper,
+       I_OnPostJoin,
+       I_OnPostOper,
+       I_OnPostTopicChange,
+       I_OnPreChangeHost,
+       I_OnPreChangeRealName,
+       I_OnPreCommand,
+       I_OnPreMode,
+       I_OnPreRehash,
+       I_OnPreTopicChange,
+       I_OnRawMode,
+       I_OnSendSnotice,
+       I_OnServiceAdd,
+       I_OnServiceDel,
+       I_OnSetConnectClass,
+       I_OnSetUserIP,
+       I_OnShutdown,
+       I_OnUnloadModule,
+       I_OnUserConnect,
+       I_OnUserDisconnect,
+       I_OnUserInit,
+       I_OnUserInvite,
+       I_OnUserJoin,
+       I_OnUserKick,
+       I_OnUserMessage,
+       I_OnUserMessageBlocked,
+       I_OnUserPart,
+       I_OnUserPostInit,
+       I_OnUserPostMessage,
+       I_OnUserPostNick,
+       I_OnUserPreInvite,
+       I_OnUserPreJoin,
+       I_OnUserPreKick,
+       I_OnUserPreMessage,
+       I_OnUserPreNick,
+       I_OnUserPreQuit,
+       I_OnUserQuit,
+       I_OnUserRegister,
+       I_OnUserWrite,
        I_END
 };
 
@@ -598,6 +653,13 @@ class CoreExport Module : public classbase, public usecountbase
         */
        virtual void OnChangeHost(User* user, const std::string &newhost);
 
+       /** Called whenever a user's real hostname is changed.
+        * This event triggers after the host has been set.
+        * @param user The user whos host is being changed
+        * @param newhost The new hostname being set
+        */
+       virtual void OnChangeRealHost(User* user, const std::string& newhost);
+
        /** Called whenever a user's real name is changed.
         * This event triggers after the name has been set.
         * @param user The user who's real name is being changed
index 568b7d2693e2a96bf0c4e167e80fdf4a6722ea17..7a53f85664e882de5be489e099886ec73e22f280 100644 (file)
@@ -77,6 +77,16 @@ class CoreModXLine : public Module
                user->CheckLines(true);
        }
 
+       void OnChangeRealHost(User* user, const std::string& newhost) CXX11_OVERRIDE
+       {
+               LocalUser* luser = IS_LOCAL(user);
+               if (!luser || luser->quitting)
+                       return;
+
+               luser->exempt = (ServerInstance->XLines->MatchesLine("E", user) != NULL);
+               luser->CheckLines(false);
+       }
+
        ModResult OnUserPreNick(LocalUser* user, const std::string& newnick) CXX11_OVERRIDE
        {
                // Check Q-lines (for local nick changes only, remote servers have our Q-lines to enforce themselves)
index 6c7929b1f6d5f87de2d07551ff92152436e1152e..27431e3fb5a7100d844bb8520feccdfa5c2a8259 100644 (file)
@@ -132,6 +132,7 @@ void                Module::OnUserInvite(User*, User*, Channel*, time_t, unsigned int, CUList&
 void           Module::OnPostTopicChange(User*, Channel*, const std::string&) { DetachEvent(I_OnPostTopicChange); }
 void           Module::OnDecodeMetaData(Extensible*, const std::string&, const std::string&) { DetachEvent(I_OnDecodeMetaData); }
 void           Module::OnChangeHost(User*, const std::string&) { DetachEvent(I_OnChangeHost); }
+void           Module::OnChangeRealHost(User*, const std::string&) { DetachEvent(I_OnChangeRealHost); }
 void           Module::OnChangeRealName(User*, const std::string&) { DetachEvent(I_OnChangeRealName); }
 void           Module::OnChangeIdent(User*, const std::string&) { DetachEvent(I_OnChangeIdent); }
 void           Module::OnAddLine(User*, XLine*) { DetachEvent(I_OnAddLine); }
index df21dbeeed346dcfbdd841f011ca01d607823736..8270e2d0ec6907a55af87cd17bf1443241600b36 100644 (file)
@@ -1075,6 +1075,7 @@ void User::ChangeRealHost(const std::string& host, bool resetdisplay)
        if (!changehost)
                return;
 
+       FOREACH_MOD(OnChangeHost, (this, host));
        realhost = host;
        this->InvalidateCache();
 }