]> jfr.im git - irc/quakenet/newserv.git/blobdiff - helpmod2/hchannel.c
GLINES: fix null pointer deref in trustgline / trustungline
[irc/quakenet/newserv.git] / helpmod2 / hchannel.c
index bae82fc378b458c62ea6a7503a2e3f590c73091a..d511bcfeac4f92f0900d1c5114fe4dbf2ce449c5 100644 (file)
@@ -4,14 +4,6 @@
 #include <string.h>
 #include <ctype.h>
 
-#include "../lib/sstring.h"
-#include "../lib/irc_string.h"
-#include "../channel/channel.h"
-#include "../localuser/localuserchannel.h"
-#include "../core/schedule.h"
-#include "../nick/nick.h"
-
-
 #include "hchannel.h"
 #include "haccount.h"
 #include "helpmod.h"
@@ -110,7 +102,7 @@ int hchannel_del(hchannel *hchan)
     while (hchan->htickets)
         hticket_del(hchan->htickets, hchan);
 
-    localpartchannel(helpmodnick, hchan->real_channel);
+    localpartchannel(helpmodnick, hchan->real_channel, "Channel Removed");
 
     free(hchan);
 
@@ -218,16 +210,16 @@ void hchannel_remove_inactive_users(void)
                if (
                    (huser_get_level((*hchanuser)->husr) == H_PEON) &&
                    (time(NULL) - huser_on_channel((*hchanuser)->husr,hchan)->last_activity >= hchan->max_idle) &&
-                   !(on_queue((*hchanuser)->husr, huser_on_channel((*hchanuser)->husr, hchan))) &&
-                    !IsSetHost((*hchanuser)->husr->real_user)
+                   !(on_queue((*hchanuser)->husr, huser_on_channel((*hchanuser)->husr, hchan)))
                   )
                {
                    if (huser_on_channel((*hchanuser)->husr, hchan)->flags & H_IDLE_WARNING)
                     {
                         const char *banmask = hban_ban_string((*hchanuser)->husr->real_user, HBAN_HOST);
-                        helpmod_setban(hchan, banmask, time(NULL) + 10 * HDEF_m, MCB_ADD, HLAZY);
+                        int bantime = 10;
+                        helpmod_setban(hchan, banmask, time(NULL) + bantime * HDEF_m, MCB_ADD, HLAZY);
 
-                        helpmod_kick(hchan, (*hchanuser)->husr, "Please do not idle in %s", hchannel_get_name(hchan));
+                        helpmod_kick(hchan, (*hchanuser)->husr, "Please do not idle in %s (%dmin anti-idle tempban). If you still require assistance, please try again later.", hchannel_get_name(hchan), bantime);
                         continue;
                     }
                     else
@@ -246,7 +238,7 @@ void hchannel_remove_inactive_users(void)
         {
             hchannel_user *tmp;
             for (tmp = hchan->channel_users;tmp;tmp = tmp->next)
-                if (huser_get_level(tmp->husr) > H_PEON)
+                if (huser_get_level(tmp->husr) >= H_TRIAL)
                 {
                     huser_channel *huserchan = huser_on_channel(tmp->husr, hchan);
                     if ((time(NULL) - huserchan->last_activity < HELPMOD_QUEUE_TIMEOUT) && (huserchan->last_activity != tmp->time_joined))
@@ -329,7 +321,7 @@ void hchannels_dnmo(struct huser_struct *husr)
         /*if (on_queue(husr, huserchan) || on_desk(husr, huserchan))*/
         if (huserchan != NULL)
         {
-            hchannel_user *tmp, **hchanuser = &hchan->channel_users;
+            hchannel_user *tmp = NULL, **hchanuser = &hchan->channel_users;
             for (;*hchanuser;hchanuser = &(*hchanuser)->next)
                 if ((*hchanuser)->husr == husr)
                 {
@@ -339,6 +331,7 @@ void hchannels_dnmo(struct huser_struct *husr)
                         break;
                 }
             *hchanuser = tmp;
+            assert(*hchanuser != NULL);
             (*hchanuser)->next = NULL;
             if (on_desk(husr, huserchan))
             {
@@ -471,10 +464,17 @@ const char *hchannel_get_state(hchannel* hchan, int mask)
 int hchannel_highlight_detection(hchannel *hchan, const char *message)
 {
     char buffer[512], *buffer_ptr = buffer, *ptr = buffer;
-    int i = 0, matches = 0;
+    int i, matches = 0;
 
     strcpy(buffer, message);
 
+    /* remove commas */
+    for (i=0;i<512 && buffer[i] != '\0';i++)
+       if (buffer[i] == ',')
+           buffer[i] = ' ';
+
+    /* reset i for loop */
+    i = 0;
     do
     {
        nick *tmp;