]> jfr.im git - solanum.git/blobdiff - ircd/hostmask.c
Support more human friendly k/d/x-line duration format
[solanum.git] / ircd / hostmask.c
index 1a154130d24a63d6383fc88a3cfd1172cb4225e1..6b50b5e56b44d5f260e955df37b69bf12dff048f 100644 (file)
@@ -478,13 +478,8 @@ find_dline(struct sockaddr *addr, int aftype)
        return NULL;
 }
 
-/* void find_exact_conf_by_address(const char*, int, const char *)
- * Input:
- * Output: ConfItem if found
- * Side-effects: None
- */
 struct ConfItem *
-find_exact_conf_by_address(const char *address, int type, const char *username)
+find_exact_conf_by_address_filtered(const char *address, int type, const char *username, bool (*filter)(struct ConfItem *))
 {
        int masktype, bits;
        unsigned long hv;
@@ -514,6 +509,9 @@ find_exact_conf_by_address(const char *address, int type, const char *username)
                                arec->masktype == masktype &&
                                (arec->username == NULL || username == NULL ? arec->username == username : !irccmp(arec->username, username)))
                {
+                       if (filter && !filter(arec->aconf))
+                               continue;
+
                        if (masktype == HM_HOST)
                        {
                                if (!irccmp(arec->Mask.hostname, address))
@@ -530,6 +528,17 @@ find_exact_conf_by_address(const char *address, int type, const char *username)
        return NULL;
 }
 
+/* void find_exact_conf_by_address(const char*, int, const char *)
+ * Input:
+ * Output: ConfItem if found
+ * Side-effects: None
+ */
+struct ConfItem *
+find_exact_conf_by_address(const char *address, int type, const char *username)
+{
+       return find_exact_conf_by_address_filtered(address, type, username, NULL);
+}
+
 /* void add_conf_by_address(const char*, int, const char *,
  *         struct ConfItem *aconf)
  * Input:
@@ -691,6 +700,8 @@ show_iline_prefix(struct Client *sptr, struct ConfItem *aconf, char *name)
                *prefix_ptr++ = '+';
        if(IsConfDoSpoofIp(aconf))
                *prefix_ptr++ = '=';
+       if(IsNeedSasl(aconf))
+               *prefix_ptr++ = '%';
        if(IsOper(sptr) && IsConfExemptFlood(aconf))
                *prefix_ptr++ = '|';
        if(IsOper(sptr) && IsConfExemptDNSBL(aconf) && !IsConfExemptKline(aconf))
@@ -699,8 +710,7 @@ show_iline_prefix(struct Client *sptr, struct ConfItem *aconf, char *name)
                *prefix_ptr++ = '^';
        if(IsOper(sptr) && IsConfExemptLimits(aconf))
                *prefix_ptr++ = '>';
-       *prefix_ptr = '\0';
-       strncpy(prefix_ptr, name, USERLEN);
+       rb_strlcpy(prefix_ptr, name, USERLEN + 1);
        return (prefix_of_host);
 }