]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/lists.c
Fix typos/errors/... in file comments
[ngircd-alex.git] / src / ngircd / lists.c
index ab2aeb3c32069fec47fa101d44660749db22ba27..38b3b0e8031fc9f52480748dbf8b2de84e079d11 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  * 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
@@ -32,13 +32,14 @@ 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;
 };
 
 /**
  * Get IRC mask stored in list element.
  *
- * @param list_elem List element.
+ * @param e List element.
  * @return Pointer to IRC mask
  */
 GLOBAL const char *
@@ -51,7 +52,7 @@ Lists_GetMask(const struct list_elem *e)
 /**
  * Get optional "reason" text stored in list element.
  *
- * @param list_elem List element.
+ * @param e List element.
  * @return Pointer to "reason" text or empty string ("").
  */
 GLOBAL const char *
@@ -64,8 +65,8 @@ 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.
+ * @param e List element.
+ * @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 e 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;
 
@@ -285,6 +300,7 @@ Lists_MakeMask(const char *Pattern, char *mask, size_t len)
                strlcpy(mask, Pattern, len - 5);
                strlcat(mask, "!*@", len);
                strlcat(mask, at, len);
+               at--; *at = '@';
        } else {
                /* All parts (nick, user and domain name) are given */
                strlcpy(mask, Pattern, len);
@@ -325,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);
@@ -362,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);