X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fngircd%2Flists.c;h=b842ec82e319bbf3812d3b8a16a93e5b0bbe5c39;hb=798de94d6556bdf2c6019f368ad7441fe6e2d1be;hp=022e305eff9a7f61c7b2cd573a5f96fda4b5223d;hpb=896d45471aa4324d6c86cfc5613feab760151c70;p=ngircd-alex.git diff --git a/src/ngircd/lists.c b/src/ngircd/lists.c index 022e305e..b842ec82 100644 --- a/src/ngircd/lists.c +++ b/src/ngircd/lists.c @@ -32,7 +32,8 @@ struct list_elem { struct list_elem *next; /** pointer to next list element */ char mask[MASK_LEN]; /** IRC mask */ char *reason; /** Optional "reason" text */ - time_t valid_until; /** 0: unlimited; 1: once; t(>1): until t */ + time_t valid_until; /** 0: unlimited; t(>0): until t */ + bool onlyonce; }; /** @@ -65,7 +66,7 @@ Lists_GetReason(const struct list_elem *e) * Get "validity" value stored in list element. * * @param list_elem List element. - * @return Validity: 0=unlimited, 1=once, >1 until this time stamp. + * @return Validity: 0=unlimited, >0 until this time stamp. */ GLOBAL time_t Lists_GetValidity(const struct list_elem *e) @@ -74,6 +75,19 @@ Lists_GetValidity(const struct list_elem *e) return e->valid_until; } +/** + * Get "onlyonce" value stored in list element. + * + * @param list_elem List element. + * @return True if the element was stored for single use, false otherwise. + */ +GLOBAL bool +Lists_GetOnlyOnce(const struct list_elem *e) +{ + assert(e != NULL); + return e->onlyonce; +} + /** * Get first list element of a list. * @@ -111,7 +125,7 @@ Lists_GetNext(const struct list_elem *e) */ bool Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil, - const char *Reason) + const char *Reason, bool OnlyOnce) { struct list_elem *e, *newelem; @@ -148,6 +162,7 @@ Lists_Add(struct list_head *h, const char *Mask, time_t ValidUntil, else newelem->reason = NULL; newelem->valid_until = ValidUntil; + newelem->onlyonce = OnlyOnce; newelem->next = e; h->first = newelem; @@ -326,10 +341,10 @@ Lists_CheckReason(struct list_head *h, CLIENT *Client, char *reason, size_t len) while (e) { next = e->next; - if (Match(e->mask, Client_MaskCloaked(Client))) { + if (MatchCaseInsensitive(e->mask, Client_MaskCloaked(Client))) { if (len && e->reason) strlcpy(reason, e->reason, len); - if (e->valid_until == 1) { + if (e->onlyonce) { /* Entry is valid only once, delete it */ LogDebug("Deleted \"%s\" from list (used).", e->mask); @@ -363,14 +378,14 @@ Lists_Expire(struct list_head *h, const char *ListName) while (e) { next = e->next; - if (e->valid_until > 1 && e->valid_until < now) { + if (e->valid_until > 0 && e->valid_until < now) { /* Entry is expired, delete it */ if (e->reason) - Log(LOG_INFO, + Log(LOG_NOTICE|LOG_snotice, "Deleted \"%s\" (\"%s\") from %s list (expired).", e->mask, e->reason, ListName); else - Log(LOG_INFO, + Log(LOG_NOTICE|LOG_snotice, "Deleted \"%s\" from %s list (expired).", e->mask, ListName); Lists_Unlink(h, last, e);