mirror of
https://github.com/osmarks/ngircd.git
synced 2025-06-28 08:03:01 +00:00
New functions Lists_Expire() and Class_Expire()
GLINE and KLINE lists are cleared automatically now, not when they are checked. So "STATS g" and "STATS k" no longer show expired entries :-)
This commit is contained in:
parent
e9e6224aae
commit
ae5ebfb9f0
@ -83,4 +83,11 @@ Class_GetList(const int Class)
|
|||||||
return My_Classes[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- */
|
/* -eof- */
|
||||||
|
@ -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 struct list_head Class_GetList PARAMS((const int Class));
|
||||||
|
|
||||||
|
GLOBAL void Class_Expire PARAMS((void));
|
||||||
|
|
||||||
#endif /* __class_h__ */
|
#endif /* __class_h__ */
|
||||||
|
|
||||||
/* -eof- */
|
/* -eof- */
|
||||||
|
@ -65,6 +65,7 @@
|
|||||||
#include "ngircd.h"
|
#include "ngircd.h"
|
||||||
#include "array.h"
|
#include "array.h"
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
|
#include "class.h"
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
#include "conn-ssl.h"
|
#include "conn-ssl.h"
|
||||||
#include "conn-zip.h"
|
#include "conn-zip.h"
|
||||||
@ -742,6 +743,9 @@ Conn_Handler(void)
|
|||||||
Check_Servers();
|
Check_Servers();
|
||||||
Check_Connections();
|
Check_Connections();
|
||||||
|
|
||||||
|
/* Expire outdated class/list items */
|
||||||
|
Class_Expire();
|
||||||
|
|
||||||
/* Look for non-empty read buffers ... */
|
/* Look for non-empty read buffers ... */
|
||||||
for (i = 0; i < Pool_Size; i++) {
|
for (i = 0; i < Pool_Size; i++) {
|
||||||
if ((My_Connections[i].sock > NONE)
|
if ((My_Connections[i].sock > NONE)
|
||||||
|
@ -316,22 +316,16 @@ bool
|
|||||||
Lists_Check( struct list_head *h, CLIENT *Client)
|
Lists_Check( struct list_head *h, CLIENT *Client)
|
||||||
{
|
{
|
||||||
struct list_elem *e, *last, *next;
|
struct list_elem *e, *last, *next;
|
||||||
|
time_t now;
|
||||||
|
|
||||||
assert(h != NULL);
|
assert(h != NULL);
|
||||||
|
|
||||||
e = h->first;
|
e = h->first;
|
||||||
last = NULL;
|
last = NULL;
|
||||||
|
now = time(NULL);
|
||||||
|
|
||||||
while (e) {
|
while (e) {
|
||||||
next = e->next;
|
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 (Match(e->mask, Client_Mask(Client))) {
|
||||||
if (e->valid_until == 1) {
|
if (e->valid_until == 1) {
|
||||||
/* Entry is valid only once, delete it */
|
/* Entry is valid only once, delete it */
|
||||||
@ -348,4 +342,42 @@ Lists_Check( struct list_head *h, CLIENT *Client)
|
|||||||
return false;
|
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- */
|
/* -eof- */
|
||||||
|
@ -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 const char *Lists_GetReason PARAMS((const struct list_elem *e));
|
||||||
GLOBAL time_t Lists_GetValidity 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
|
#endif
|
||||||
|
|
||||||
/* -eof- */
|
/* -eof- */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user