]> jfr.im git - solanum.git/blobdiff - ircd/reject.c
Support more human friendly k/d/x-line duration format
[solanum.git] / ircd / reject.c
index 3981af6eeef50047e458749463dea27bf4c9a26e..db90d388a1e2efabda331414c3edd10719138419 100644 (file)
@@ -233,51 +233,51 @@ check_reject(rb_fde_t *F, struct sockaddr *addr)
        rb_patricia_node_t *pnode;
        reject_t *rdata;
        delay_t *ddata;
+
        /* Reject is disabled */
-       if(ConfigFileEntry.reject_after_count == 0 || ConfigFileEntry.reject_duration == 0)
+       if (ConfigFileEntry.reject_after_count == 0 || ConfigFileEntry.reject_duration == 0)
                return 0;
 
        pnode = rb_match_ip(reject_tree, addr);
-       if(pnode != NULL)
+       if (pnode == NULL)
+               return 0;
+
+       rdata = pnode->data;
+       rdata->time = rb_current_time();
+
+       if (rdata->count <= (unsigned long)ConfigFileEntry.reject_after_count)
+               return 0;
+
+       if (rdata->aconf != NULL && rdata->aconf->status & CONF_ILLEGAL)
        {
-               rdata = pnode->data;
+               rb_dlinkDelete(&rdata->rnode, &reject_list);
+               reject_free(rdata);
+               rb_patricia_remove(reject_tree, pnode);
+               return 0;
+       }
 
-               rdata->time = rb_current_time();
-               if(rdata->count > (unsigned long)ConfigFileEntry.reject_after_count)
-               {
-                       ddata = rb_malloc(sizeof(delay_t));
-                       ServerStats.is_rej++;
-                       rb_setselect(F, RB_SELECT_WRITE | RB_SELECT_READ, NULL, NULL);
-                       if(rdata->aconf)
-                       {
-                               if(rdata->aconf->status & CONF_ILLEGAL)
-                               {
-                                       rb_dlinkDelete(&rdata->rnode, &reject_list);
-                                       reject_free(rdata);
-                                       rb_patricia_remove(reject_tree, pnode);
-                                       return 0;
-                               }
-                               ddata->aconf = rdata->aconf;
-                               ddata->aconf->clients++;
-                               ddata->reason = NULL;
-                       }
-                       else if(rdata->reason)
-                       {
-                               ddata->reason = rdata->reason;
-                               ddata->aconf = NULL;
-                       }
-                       else
-                       {
-                               ddata->aconf = NULL;
-                               ddata->reason = NULL;
-                       }
-                       ddata->F = F;
-                       rb_dlinkAdd(ddata, &ddata->node, &delay_exit);
-                       return 1;
-               }
+       ddata = rb_malloc(sizeof(delay_t));
+       ServerStats.is_rej++;
+       rb_setselect(F, RB_SELECT_WRITE | RB_SELECT_READ, NULL, NULL);
+       if (rdata->aconf)
+       {
+               ddata->aconf = rdata->aconf;
+               ddata->aconf->clients++;
+               ddata->reason = NULL;
        }
-       /* Caller does what it wants */
-       return 0;
+       else if (rdata->reason)
+       {
+               ddata->reason = rdata->reason;
+               ddata->aconf = NULL;
+       }
+       else
+       {
+               ddata->aconf = NULL;
+               ddata->reason = NULL;
+       }
+       ddata->F = F;
+       rb_dlinkAdd(ddata, &ddata->node, &delay_exit);
+       return 1;
 }
 
 int