]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/modules/extra/m_sqllog.cpp
Updated copyrights in headers etc using perl inplace edit
[user/henk/code/inspircd.git] / src / modules / extra / m_sqllog.cpp
index 54fd4179890519af374203ba6fe65207115586f8..8e7deac8b8b71c0c6d6ea9df30d97d05974e22ef 100644 (file)
@@ -2,7 +2,7 @@
  *       | Inspire Internet Relay Chat Daemon |
  *       +------------------------------------+
  *
- *  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
+ *  InspIRCd is copyright (C) 2002-2004 ChatSpike-Dev.
  *                       E-mail:
  *                <brain@chatspike.net>
  *               <Craig@chatspike.net>
@@ -14,6 +14,8 @@
  * ---------------------------------------------------
  */
 
+using namespace std;
+
 #include <stdio.h>
 #include <string>
 #include <stdlib.h>
@@ -41,7 +43,7 @@
 #define LT_FLOOD       7
 #define LT_LOADMODULE  8
 
-/* $ModDesc: Allow/Deny connections based upon an arbitary SQL table */
+/* $ModDesc: Logs network-wide data to an SQL database */
 
 Server *Srv;
 
@@ -63,13 +65,21 @@ class ModuleSQLLog : public Module
                return (SQLModule);
        }
 
-       ModuleSQLLog()
+       ModuleSQLLog(Server* Me)
+               : Module::Module(Me)
        {
-               Srv = new Server;
+               Srv = Me;
                ReadConfig();
        }
 
-       virtual void OnRehash()
+       void Implements(char* List)
+       {
+               List[I_OnRehash] = List[I_OnOper] = List[I_OnGlobalOper] = List[I_OnKill] = 1;
+               List[I_OnPreCommand] = List[I_OnUserConnect] = List[I_OnGlobalConnect] = 1;
+               List[I_OnUserQuit] = List[I_OnLoadModule] = 1;
+       }
+
+       virtual void OnRehash(std::string parameter)
        {
                ReadConfig();
        }
@@ -77,7 +87,7 @@ class ModuleSQLLog : public Module
        long InsertNick(std::string nick)
        {
                long nid = -1;
-                SQLRequest* query = new SQLRequest(SQL_RESULT,dbid,"SELECT id,nick FROM ircd_log_actors WHERE actor='"+nick+"'");
+                SQLRequest* query = new SQLRequest(SQL_RESULT,dbid,"SELECT id,actor FROM ircd_log_actors WHERE actor='"+nick+"'");
                 Request queryrequest((char*)query, this, SQLModule);
                 SQLResult* result = (SQLResult*)queryrequest.Send();
                 if (result->GetType() == SQL_OK)
@@ -87,7 +97,7 @@ class ModuleSQLLog : public Module
                         SQLResult* rowresult = (SQLResult*)rowquery.Send();
                         if (rowresult->GetType() == SQL_ROW)
                         {
-                                nid = atoi(rowresult->GetField("id"));
+                                nid = atoi(rowresult->GetField("id").c_str());
                                 delete rowresult;
                         }
                         delete rowrequest;
@@ -100,26 +110,26 @@ class ModuleSQLLog : public Module
                 delete query;
                if (nid < 1)
                {
-                       SQLRequest* query = new SQLRequest(SQL_COUNT,dbid,"INSERT INTO ircd_log_actors VALUES('','"+nick+"')");
-                       Request queryrequest((char*)query, this, SQLModule);
-                       SQLResult* result = (SQLResult*)queryrequest.Send();
-                       if (result->GetType() == SQL_ERROR)
+                       SQLRequest* query2 = new SQLRequest(SQL_COUNT,dbid,"INSERT INTO ircd_log_actors VALUES('','"+nick+"')");
+                       Request queryrequest2((char*)query2, this, SQLModule);
+                       SQLResult* result2 = (SQLResult*)queryrequest2.Send();
+                       if (result2->GetType() == SQL_ERROR)
                        {
-                               Srv->Log(DEFAULT,"SQL log error: " + result->GetError());
+                               Srv->Log(DEFAULT,"SQL log error: " + result2->GetError());
                        }
-                       if (result)
+                       if (result2)
                                delete result;
-                       if (query)
-                               delete query;
+                       if (query2)
+                               delete query2;
                        nid = InsertNick(nick);
                }
                return nid;
        }
 
-       void InsertEntry(long category,long nickid,long hostid,long sourceid,unsigned long date);
+       void InsertEntry(unsigned long category,unsigned long nickid,unsigned long hostid,unsigned long sourceid,unsigned long date)
        {
                char querybuffer[MAXBUF];
-               snprintf(querybuffer,MAXBUF,"INSERT INTO ircd_log VALUES('',%d,%d,%d,%d,%lu)",category,nickid,hostid,sourceid,date);
+               snprintf(querybuffer,MAXBUF,"INSERT INTO ircd_log VALUES('',%lu,%lu,%lu,%lu,%lu)",(unsigned long)category,(unsigned long)nickid,(unsigned long)hostid,(unsigned long)sourceid,(unsigned long)date);
                SQLRequest* query = new SQLRequest(SQL_COUNT,dbid,querybuffer);
                Request queryrequest((char*)query, this, SQLModule);
                SQLResult* result = (SQLResult*)queryrequest.Send();
@@ -147,7 +157,7 @@ class ModuleSQLLog : public Module
                         SQLResult* rowresult = (SQLResult*)rowquery.Send();
                         if (rowresult->GetType() == SQL_ROW)
                         {
-                                hid = atoi(rowresult->GetField("id"));
+                                hid = atoi(rowresult->GetField("id").c_str());
                                 delete rowresult;
                         }
                         delete rowrequest;
@@ -160,17 +170,17 @@ class ModuleSQLLog : public Module
                 delete query;
                 if (hid < 1)
                 {
-                        SQLRequest* query = new SQLRequest(SQL_COUNT,dbid,"INSERT INTO ircd_log_hosts VALUES('','"+host+"')");
-                        Request queryrequest((char*)query, this, SQLModule);
-                        SQLResult* result = (SQLResult*)queryrequest.Send();
-                       if (result->GetType() == SQL_ERROR)
+                        SQLRequest* query2 = new SQLRequest(SQL_COUNT,dbid,"INSERT INTO ircd_log_hosts VALUES('','"+host+"')");
+                        Request queryrequest2((char*)query2, this, SQLModule);
+                        SQLResult* result2 = (SQLResult*)queryrequest2.Send();
+                       if (result2->GetType() == SQL_ERROR)
                        {
-                               Srv->Log(DEFAULT,"SQL log error: " + result->GetError());
+                               Srv->Log(DEFAULT,"SQL log error: " + result2->GetError());
                        }
                         if (result)
-                                delete result;
+                                delete result2;
                        if (query)
-                               delete query;
+                               delete query2;
                         hid = InsertHost(host);
                 }
                 return hid;
@@ -180,22 +190,61 @@ class ModuleSQLLog : public Module
        {
                // is the sql module loaded? If not, we don't attempt to do anything.
                if (!SQLModule)
-                       return false;
+                       return;
 
                long nickid = InsertNick(nick);
                long sourceid = InsertNick(source);
                long hostid = InsertHost(host);
-               InsertEntry(category,nickid,hostid,sourceid,time(NULL));
+               InsertEntry((unsigned)category,(unsigned)nickid,(unsigned)hostid,(unsigned)sourceid,(unsigned long)time(NULL));
        }
 
-       virtual void OnOper(userrec* user)
+       virtual void OnOper(userrec* user, std::string opertype)
        {
                AddLogEntry(LT_OPER,user->nick,user->host,user->server);
        }
 
+       virtual void OnGlobalOper(userrec* user)
+       {
+               AddLogEntry(LT_OPER,user->nick,user->host,user->server);
+       }
+
+       virtual int OnKill(userrec* source, userrec* dest, std::string reason)
+       {
+               AddLogEntry(LT_KILL,dest->nick,dest->host,source->nick);
+               return 0;
+       }
+
+       virtual int OnPreCommand(std::string command, char **parameters, int pcnt, userrec *user)
+       {
+               if ((command == "GLINE") || (command == "KLINE") || (command == "ELINE") || (command == "ZLINE"))
+               {
+                       AddLogEntry(LT_XLINE,user->nick,command[0]+std::string(":")+std::string(parameters[0]),user->server);
+               }
+               return 0;
+       }
+
+       virtual void OnUserConnect(userrec* user)
+       {
+               AddLogEntry(LT_CONNECT,user->nick,user->host,user->server);
+       }
+
+       virtual void OnGlobalConnect(userrec* user)
+       {
+               AddLogEntry(LT_CONNECT,user->nick,user->host,user->server);
+       }
+
+       virtual void OnUserQuit(userrec* user, std::string reason)
+       {
+               AddLogEntry(LT_DISCONNECT,user->nick,user->host,user->server);
+       }
+
+       virtual void OnLoadModule(Module* mod,std::string name)
+       {
+               AddLogEntry(LT_LOADMODULE,name,Srv->GetServerName(),Srv->GetServerName());
+       }
+
        virtual ~ModuleSQLLog()
        {
-               delete Srv;
        }
        
        virtual Version GetVersion()
@@ -216,9 +265,9 @@ class ModuleSQLLogFactory : public ModuleFactory
        {
        }
        
-       virtual Module * CreateModule()
+       virtual Module * CreateModule(Server* Me)
        {
-               return new ModuleSQLLog;
+               return new ModuleSQLLog(Me);
        }
        
 };