]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/m_cgiirc.cpp
Fix segfault in m_chanprotect when OnAccessCheck is called with a null channel
[user/henk/code/inspircd.git] / src / modules / m_cgiirc.cpp
index 8b7a77941d666c935fe02abccd12f309a9bc87bf..4c1c35257de04c10805a4cd5e6ae2e715d0ed6e7 100644 (file)
@@ -56,9 +56,9 @@ class CommandWebirc : public Command
                bool notify;
        public:
                CGIHostlist Hosts;
-               CommandWebirc(InspIRCd* Instance, bool bnotify) : Command(Instance, "WEBIRC", 0, 4, true), notify(bnotify)
+               CommandWebirc(InspIRCd* Instance, Module* Creator, bool bnotify)
+                       : Command(Instance, Creator, "WEBIRC", 0, 4, true), notify(bnotify)
                {
-                       this->source = "m_cgiirc.so";
                        this->syntax = "password client hostname ip";
                }
                CmdResult Handle(const std::vector<std::string> &parameters, User *user)
@@ -138,12 +138,12 @@ class ModuleCgiIRC : public Module
        CommandWebirc cmd;
        bool NotifyOpers;
 public:
-       ModuleCgiIRC(InspIRCd* Me) : Module(Me), cmd(Me, NotifyOpers)
+       ModuleCgiIRC(InspIRCd* Me) : Module(Me), cmd(Me, this, NotifyOpers)
        {
                OnRehash(NULL);
                ServerInstance->AddCommand(&cmd);
 
-               Implementation eventlist[] = { I_OnRehash, I_OnUserRegister, I_OnCleanup, I_OnSyncUserMetaData, I_OnDecodeMetaData, I_OnUserDisconnect, I_OnUserConnect };
+               Implementation eventlist[] = { I_OnRehash, I_OnUserRegister, I_OnCleanup, I_OnSyncUser, I_OnDecodeMetaData, I_OnUserDisconnect, I_OnUserConnect };
                ServerInstance->Modules->Attach(eventlist, this, 7);
        }
 
@@ -224,29 +224,22 @@ public:
                }
        }
 
-       virtual void OnSyncUserMetaData(User* user, Module* proto, void* opaque, const std::string &extname, bool displayable)
+       virtual void OnSyncUser(User* user, Module* proto, void* opaque)
        {
-               if((extname == "cgiirc_realhost") || (extname == "cgiirc_realip"))
-               {
-                       std::string* data;
-
-                       if(user->GetExt(extname, data))
-                       {
-                               proto->ProtoSendMetaData(opaque, TYPE_USER, user, extname, *data);
-                       }
-               }
+               std::string* data;
+               if (user->GetExt("cgiirc_realhost", data))
+                       proto->ProtoSendMetaData(opaque, user, "cgiirc_realhost", *data);
+               if (user->GetExt("cgiirc_realip", data))
+                       proto->ProtoSendMetaData(opaque, user, "cgiirc_realip", *data);
        }
 
-       virtual void OnDecodeMetaData(int target_type, void* target, const std::string &extname, const std::string &extdata)
+       virtual void OnDecodeMetaData(Extensible* target, const std::string &extname, const std::string &extdata)
        {
-               if(target_type == TYPE_USER)
+               User* dest = dynamic_cast<User*>(target);
+               std::string* bleh;
+               if(dest && ((extname == "cgiirc_realhost") || (extname == "cgiirc_realip")) && (!dest->GetExt(extname, bleh)))
                {
-                       User* dest = (User*)target;
-                       std::string* bleh;
-                       if(((extname == "cgiirc_realhost") || (extname == "cgiirc_realip")) && (!dest->GetExt(extname, bleh)))
-                       {
-                               dest->Extend(extname, new std::string(extdata));
-                       }
+                       dest->Extend(extname, new std::string(extdata));
                }
        }
 
@@ -256,7 +249,7 @@ public:
        }
 
 
-       virtual int OnUserRegister(User* user)
+       virtual ModResult OnUserRegister(User* user)
        {
                for(CGIHostlist::iterator iter = cmd.Hosts.begin(); iter != cmd.Hosts.end(); iter++)
                {
@@ -289,10 +282,10 @@ public:
                                {
                                        // We don't need to do anything here
                                }
-                               return 0;
+                               return MOD_RES_PASSTHRU;
                        }
                }
-               return 0;
+               return MOD_RES_PASSTHRU;
        }
 
        virtual void OnUserConnect(User* user)