New functions Lists_Expire() and Class_Expire()
authorAlexander Barton <alex@barton.de>
Sun, 25 Dec 2011 16:44:20 +0000 (17:44 +0100)
committerAlexander Barton <alex@barton.de>
Sun, 25 Dec 2011 16:44:20 +0000 (17:44 +0100)
GLINE and KLINE lists are cleared automatically now, not when they are
checked. So "STATS g" and "STATS k" no longer show expired entries :-)

src/ngircd/class.c
src/ngircd/class.h
src/ngircd/conn.c
src/ngircd/lists.c
src/ngircd/lists.h

index dd10ac81021fb0e80fd8336a67b4ecddf329ad89..1a4d4c0b6d1179ae22776d8f57df80c2754d71d8 100644 (file)
@@ -83,4 +83,11 @@ Class_GetList(const int Class)
        return My_Classes[Class];
 }
 
+GLOBAL void
+Class_Expire(void)
+{
+       Lists_Expire(&My_Classes[CLASS_GLINE], "G-Line");
+       Lists_Expire(&My_Classes[CLASS_KLINE], "K-Line");
+}
+
 /* -eof- */
index b93c3b68cb78bf0cc3141acee7dae52014a9d9a5..3507836f857f0c7ce261e440f80ab0ed9396f623 100644 (file)
@@ -33,6 +33,8 @@ GLOBAL bool Class_IsMember PARAMS((const int Class, CLIENT *Client));
 
 GLOBAL struct list_head Class_GetList PARAMS((const int Class));
 
+GLOBAL void Class_Expire PARAMS((void));
+
 #endif /* __class_h__ */
 
 /* -eof- */
index aa754eb482ae5c38f224adee20c9ac129751f19e..4d5c223c0161f1713448b38a5a576024d84febd1 100644 (file)
@@ -65,6 +65,7 @@
 #include "ngircd.h"
 #include "array.h"
 #include "client.h"
+#include "class.h"
 #include "conf.h"
 #include "conn-ssl.h"
 #include "conn-zip.h"
@@ -742,6 +743,9 @@ Conn_Handler(void)
                Check_Servers();
                Check_Connections();
 
+               /* Expire outdated class/list items */
+               Class_Expire();
+
                /* Look for non-empty read buffers ... */
                for (i = 0; i < Pool_Size; i++) {
                        if ((My_Connections[i].sock > NONE)
index 8e120bfeb16a059bf17d043dd440bd69c587cfe7..63c16b0da1ed268af0a7f42bd6e49fe22a13da1a 100644 (file)
@@ -316,22 +316,16 @@ bool
 Lists_Check( struct list_head *h, CLIENT *Client)
 {
        struct list_elem *e, *last, *next;
+       time_t now;
 
        assert(h != NULL);
 
        e = h->first;
        last = NULL;
+       now = time(NULL);
 
        while (e) {
                next = e->next;
-               if (e->valid_until > 1 && e->valid_until < time(NULL)) {
-                       /* Entry is expired, delete it */
-                       LogDebug("Deleted \"%s\" from list (expired).",
-                                e->mask);
-                       Lists_Unlink(h, last, e);
-                       e = next;
-                       continue;
-               }
                if (Match(e->mask, Client_Mask(Client))) {
                        if (e->valid_until == 1) {
                                /* Entry is valid only once, delete it */
@@ -348,4 +342,42 @@ Lists_Check( struct list_head *h, CLIENT *Client)
        return false;
 }
 
+/**
+ * Check list and purge expired entries.
+ *
+ * @param h List head.
+ */
+GLOBAL void
+Lists_Expire(struct list_head *h, const char *ListName)
+{
+       struct list_elem *e, *last, *next;
+       time_t now;
+
+       assert(h != NULL);
+
+       e = h->first;
+       last = NULL;
+       now = time(NULL);
+
+       while (e) {
+               next = e->next;
+               if (e->valid_until > 1 && e->valid_until < now) {
+                       /* Entry is expired, delete it */
+                       if (e->reason)
+                               Log(LOG_INFO,
+                                   "Deleted \"%s\" (\"%s\") from %s list (expired).",
+                                   e->mask, e->reason, ListName);
+                       else
+                               Log(LOG_INFO,
+                                   "Deleted \"%s\" from %s list (expired).",
+                                   e->mask, ListName);
+                       Lists_Unlink(h, last, e);
+                       e = next;
+                       continue;
+               }
+               last = e;
+               e = next;
+       }
+}
+
 /* -eof- */
index 316b13454068c18f856170e4938190f9bab3a357..f9a4c91cf5158b9c52fe7a4f5dbf1df9080fc86a 100644 (file)
@@ -47,6 +47,8 @@ GLOBAL const char *Lists_GetMask PARAMS((const struct list_elem *e));
 GLOBAL const char *Lists_GetReason PARAMS((const struct list_elem *e));
 GLOBAL time_t Lists_GetValidity PARAMS((const struct list_elem *e));
 
+GLOBAL void Lists_Expire PARAMS((struct list_head *h, const char *ListName));
+
 #endif
 
 /* -eof- */