mirror of
https://github.com/osmarks/ngircd.git
synced 2025-01-31 17:49:11 +00:00
Lists: change "only once" property into "valid until"
The old "only once" true/false behavior is still supported, so there are no other code changes required.
This commit is contained in:
parent
872dc5042d
commit
fea2194fc0
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* ngIRCd -- The Next Generation IRC Daemon
|
* ngIRCd -- The Next Generation IRC Daemon
|
||||||
* Copyright (c)2001-2005 Alexander Barton (alex@barton.de)
|
* Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -39,7 +39,7 @@
|
|||||||
struct list_elem {
|
struct list_elem {
|
||||||
struct list_elem *next;
|
struct list_elem *next;
|
||||||
char mask[MASK_LEN];
|
char mask[MASK_LEN];
|
||||||
bool onlyonce;
|
time_t valid_until; /** 0: unlimited; 1: once; t(>1): until t */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ Lists_GetNext(const struct list_elem *e)
|
|||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Lists_Add(struct list_head *header, const char *Mask, bool OnlyOnce )
|
Lists_Add(struct list_head *header, const char *Mask, time_t ValidUntil )
|
||||||
{
|
{
|
||||||
struct list_elem *e, *newelem;
|
struct list_elem *e, *newelem;
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ Lists_Add(struct list_head *header, const char *Mask, bool OnlyOnce )
|
|||||||
}
|
}
|
||||||
|
|
||||||
strlcpy( newelem->mask, Mask, sizeof( newelem->mask ));
|
strlcpy( newelem->mask, Mask, sizeof( newelem->mask ));
|
||||||
newelem->onlyonce = OnlyOnce;
|
newelem->valid_until = ValidUntil;
|
||||||
newelem->next = e;
|
newelem->next = e;
|
||||||
header->first = newelem;
|
header->first = newelem;
|
||||||
|
|
||||||
@ -213,23 +213,34 @@ Lists_MakeMask(const char *Pattern)
|
|||||||
bool
|
bool
|
||||||
Lists_Check( struct list_head *header, CLIENT *Client)
|
Lists_Check( struct list_head *header, CLIENT *Client)
|
||||||
{
|
{
|
||||||
struct list_elem *e, *last;
|
struct list_elem *e, *last, *next;
|
||||||
|
|
||||||
assert( header != NULL );
|
assert( header != NULL );
|
||||||
|
|
||||||
e = header->first;
|
e = header->first;
|
||||||
last = NULL;
|
last = NULL;
|
||||||
|
|
||||||
while( e ) {
|
while (e) {
|
||||||
if( Match( e->mask, Client_Mask( Client ))) {
|
next = e->next;
|
||||||
if( e->onlyonce ) { /* delete entry */
|
if (e->valid_until > 1 && e->valid_until < time(NULL)) {
|
||||||
LogDebug("Deleted \"%s\" from list", e->mask);
|
/* Entry is expired, delete it */
|
||||||
|
LogDebug("Deleted \"%s\" from list (expired).",
|
||||||
|
e->mask);
|
||||||
|
Lists_Unlink(header, last, e);
|
||||||
|
e = next;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (Match(e->mask, Client_Mask(Client))) {
|
||||||
|
if (e->valid_until == 1 ) {
|
||||||
|
/* Entry is valid only once, delete it */
|
||||||
|
LogDebug("Deleted \"%s\" from list (used).",
|
||||||
|
e->mask);
|
||||||
Lists_Unlink(header, last, e);
|
Lists_Unlink(header, last, e);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
last = e;
|
last = e;
|
||||||
e = e->next;
|
e = next;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* ngIRCd -- The Next Generation IRC Daemon
|
* ngIRCd -- The Next Generation IRC Daemon
|
||||||
* Copyright (c)2001,2002 by Alexander Barton (alex@barton.de)
|
* Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -32,7 +32,7 @@ GLOBAL struct list_elem *Lists_GetNext PARAMS((const struct list_elem *));
|
|||||||
GLOBAL bool Lists_Check PARAMS((struct list_head *head, CLIENT *client ));
|
GLOBAL bool Lists_Check PARAMS((struct list_head *head, CLIENT *client ));
|
||||||
GLOBAL bool Lists_CheckDupeMask PARAMS((const struct list_head *head, const char *mask ));
|
GLOBAL bool Lists_CheckDupeMask PARAMS((const struct list_head *head, const char *mask ));
|
||||||
|
|
||||||
GLOBAL bool Lists_Add PARAMS((struct list_head *header, const char *Mask, bool OnlyOnce ));
|
GLOBAL bool Lists_Add PARAMS((struct list_head *header, const char *Mask, time_t ValidUntil ));
|
||||||
GLOBAL void Lists_Del PARAMS((struct list_head *head, const char *Mask ));
|
GLOBAL void Lists_Del PARAMS((struct list_head *head, const char *Mask ));
|
||||||
|
|
||||||
GLOBAL bool Lists_AlreadyRegistered PARAMS(( const struct list_head *head, const char *Mask));
|
GLOBAL bool Lists_AlreadyRegistered PARAMS(( const struct list_head *head, const char *Mask));
|
||||||
|
Loading…
Reference in New Issue
Block a user