]> jfr.im git - irc/evilnet/x3.git/blobdiff - src/log.c
fixing small memory leak
[irc/evilnet/x3.git] / src / log.c
index 93b3a9016ec7b432e7cb1b8d1a5892a033d83d00..ef531ee4363bd2020cebdd17564ebbd90cc5eb92 100644 (file)
--- a/src/log.c
+++ b/src/log.c
@@ -3,7 +3,7 @@
  *
  * This file is part of x3.
  *
- * srvx is free software; you can redistribute it and/or modify
+ * x3 is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
@@ -541,7 +541,7 @@ log_audit(struct log_type *type, enum log_severity sev, struct userNode *user, s
     /* remove old elements from the linked list */
     while (type->log_count > type->max_count)
         log_type_free_oldest(type);
-    while (type->log_oldest && (type->log_oldest->time + type->max_age < (unsigned long)now))
+    while (type->log_oldest && (type->log_oldest->time + (time_t)type->max_age < now))
         log_type_free_oldest(type);
     if (type->log_oldest)
         type->log_oldest->prev = 0;
@@ -602,7 +602,7 @@ log_module(struct log_type *type, enum log_severity sev, const char *format, ...
         fprintf(stderr, "%s: %s\n", log_severity_names[sev], msgbuf);
     }
     if (sev == LOG_FATAL) {
-        assert(0 && "fatal message logged");
+        //assert(0 && "fatal message logged");
         _exit(1);
     }
 }
@@ -969,14 +969,17 @@ ldIrc_close(struct logDestination *self_) {
     free(self);
 }
 
+/* 
+ * ldIrc_audit and ldIrc_module send log messages targetted to an IRC channel, to the channel
+ */
 static void
 ldIrc_audit(struct logDestination *self_, UNUSED_ARG(struct log_type *type), struct logEntry *entry) {
     struct logDest_irc *self = (struct logDest_irc*)self_;
 
     if (entry->channel_name) {
-        send_target_message(4, self->target, entry->bot, "(%s", strchr(strchr(entry->default_desc, ' '), ':')+1);
+        send_target_message(5, self->target, entry->bot, "(%s", strchr(strchr(entry->default_desc, ' '), ':')+1);
     } else {
-        send_target_message(4, self->target, entry->bot, "%s", strchr(entry->default_desc, ')')+2);
+        send_target_message(5, self->target, entry->bot, "%s", strchr(entry->default_desc, ')')+2);
     }
 }
 
@@ -985,7 +988,7 @@ ldIrc_module(struct logDestination *self_, struct log_type *type, enum log_sever
     struct logDest_irc *self = (struct logDest_irc*)self_;
     extern struct userNode *opserv;
 
-    send_target_message(4, self->target, opserv, "%s %s: %s\n", type->name, log_severity_names[sev], message);
+    send_target_message(5, self->target, opserv, "%s %s: %s\n", type->name, log_severity_names[sev], message);
 }
 
 static struct logDest_vtable ldIrc_vtbl = {
@@ -1046,19 +1049,24 @@ void SyncLog(char *fmt,...)
 
 int parselog(char *LogLine, struct userNode *user, struct chanNode *cptr, char *chan, char *nuh, char *command, char *rest)
 {
-   const char *info;
-
-   char serv[NICKLEN+1];
-
-   char* mychan;
-   char* mynuh;
+   struct svccmd *svccmd;
+   struct svccmd *cmd;
+   struct service *service;
+   const  char *info;
+   char   serv[NICKLEN+1];
+   char   buf[MAXLEN];
+   char   myservc[MAXLEN];
+   char*  mychan;
+   char*  mynuh;
    char* mycommand;
-   char* myrest;
-   char* datestr;
-   char* mywho;
-   charmyserv;
+   char*  myrest;
+   char*  datestr;
+   char*  mywho;
+   char *myserv;
    char* myserva;
-   char* mychana;
+   char*  mychana;
+   unsigned int pos;
+   int p = 0;
 
    datestr =   (char *) mysep(&LogLine, "]");
    mywho =     (char *) mysep(&LogLine, " ");
@@ -1097,15 +1105,75 @@ int parselog(char *LogLine, struct userNode *user, struct chanNode *cptr, char *
 
    if (!myserv)
       myserv = "";
+   else
+     strcpy(myservc, myserv);
+
 
    if (!strcmp(myserv, info)) {
       if (!IsOper(user))
         return 0;
-      sprintf(serv, "(%s)", info);
-   } else
+      else {
+        if ((service = service_find(myserv))) {
+          if (!(cmd = dict_find(service->commands, mycommand, NULL)))
+            return 0;
+
+          if (!(svccmd = svccmd_resolve_name(cmd, mycommand)))
+            return 0;
+
+          pos = snprintf(buf, sizeof(buf), "%s.%s", svccmd->command->parent->name, svccmd->command->name);
+
+          if (svccmd->alias.used) {
+              buf[pos++] = ' ';
+              unsplit_string((char**)svccmd->alias.list+1, svccmd->alias.used-1, buf+pos);
+          }
+        }
+      }
+
+      if (!(strcmp(buf+0, "OpServ.OP")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.DEOP")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.VOICE")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.DEVOICE")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.KICK")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.KICKBAN")))
+         p = 1;
+
+      if (!(strcmp(buf+0, "OpServ.OPALL")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.DEOPALL")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.VOICEALL")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.DEVOICEALL")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.KICKALL")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.KICKBANALL")))
+         p = 1;
+
+
+      if (!(strcmp(buf+0, "OpServ.INVITE")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.INVITEME")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.CLEARBANS")))
+         p = 1;
+      if (!(strcmp(buf+0, "OpServ.CLEARMODES")))
+         p = 1;
+
+      if (p == 1)
+        send_message(user, chanserv, "LAST_RESULTS", datestr, myserv, mynuh, mycommand, myrest);
+
+      p = 0;
+    } else {
       sprintf(serv, "%s", "");
+      send_message(user, chanserv, "LAST_RESULTS", datestr, serv, mynuh, mycommand, myrest);
+    }
 
-   send_message(user, chanserv, "LAST_RESULTS", datestr, serv, mynuh, mycommand, myrest);
    return 1;
 
 }