]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - modules/m_dline.c
report_error() cleanup
[irc/rqf/shadowircd.git] / modules / m_dline.c
index f173d05c6621ad0597b72f29665286db35a51c4f..32cc408c42ef112ba48bcf32088ee3ec48955f77 100644 (file)
@@ -25,7 +25,6 @@
  */
 
 #include "stdinc.h"
-#include "tools.h"
 #include "channel.h"
 #include "class.h"
 #include "client.h"
@@ -35,7 +34,6 @@
 #include "ircd.h"
 #include "hostmask.h"
 #include "numeric.h"
-#include "commio.h"
 #include "s_conf.h"
 #include "s_newconf.h"
 #include "s_log.h"
@@ -63,7 +61,7 @@ DECLARE_MODULE_AV1(dline, NULL, NULL, dline_clist, NULL, NULL, "$Revision: 3225
 
 static int valid_comment(char *comment);
 static int flush_write(struct Client *, FILE *, char *, char *);
-static int remove_temp_dline(const char *);
+static int remove_temp_dline(struct ConfItem *);
 
 /* mo_dline()
  * 
@@ -78,7 +76,7 @@ mo_dline(struct Client *client_p, struct Client *source_p,
        const char *dlhost;
        char *oper_reason;
        char *reason = def;
-       struct irc_sockaddr_storage daddr;
+       struct rb_sockaddr_storage daddr;
        char cidr_form_host[HOSTLEN + 1];
        struct ConfItem *aconf;
        int bits;
@@ -188,7 +186,7 @@ mo_dline(struct Client *client_p, struct Client *source_p,
 
        aconf = make_conf();
        aconf->status = CONF_DLINE;
-       DupString(aconf->host, dlhost);
+       aconf->host = rb_strdup(dlhost);
 
        /* Look for an oper reason */
        if((oper_reason = strchr(reason, '|')) != NULL)
@@ -197,16 +195,16 @@ mo_dline(struct Client *client_p, struct Client *source_p,
                oper_reason++;
 
                if(!EmptyString(oper_reason))
-                       DupString(aconf->spasswd, oper_reason);
+                       aconf->spasswd = rb_strdup(oper_reason);
        }
 
        if(tdline_time > 0)
        {
-               ircsnprintf(dlbuffer, sizeof(dlbuffer), 
+               rb_snprintf(dlbuffer, sizeof(dlbuffer), 
                         "Temporary D-line %d min. - %s (%s)",
                         (int) (tdline_time / 60), reason, current_date);
-               DupString(aconf->passwd, dlbuffer);
-               aconf->hold = CurrentTime + tdline_time;
+               aconf->passwd = rb_strdup(dlbuffer);
+               aconf->hold = rb_current_time() + tdline_time;
                add_temp_dline(aconf);
 
                if(EmptyString(oper_reason))
@@ -235,8 +233,8 @@ mo_dline(struct Client *client_p, struct Client *source_p,
        }
        else
        {
-               ircsnprintf(dlbuffer, sizeof(dlbuffer), "%s (%s)", reason, current_date);
-               DupString(aconf->passwd, dlbuffer);
+               rb_snprintf(dlbuffer, sizeof(dlbuffer), "%s (%s)", reason, current_date);
+               aconf->passwd = rb_strdup(dlbuffer);
                add_conf_by_address(aconf->host, CONF_DLINE, NULL, aconf);
                write_confitem(DLINE_TYPE, source_p, NULL, aconf->host, reason,
                               oper_reason, current_date, 0);
@@ -258,10 +256,11 @@ mo_undline(struct Client *client_p, struct Client *source_p, int parc, const cha
        char buf[BUFSIZE], buff[BUFSIZE], temppath[BUFSIZE], *p;
        const char *filename, *found_cidr;
        const char *cidr;
+       struct ConfItem *aconf;
        int pairme = NO, error_on_write = NO;
        mode_t oldumask;
 
-       ircsnprintf(temppath, sizeof(temppath), "%s.tmp", ConfigFileEntry.dlinefile);
+       rb_snprintf(temppath, sizeof(temppath), "%s.tmp", ConfigFileEntry.dlinefile);
 
        if(!IsOperUnkline(source_p))
        {
@@ -278,15 +277,23 @@ mo_undline(struct Client *client_p, struct Client *source_p, int parc, const cha
                return 0;
        }
 
-       if(remove_temp_dline(cidr))
+       aconf = find_exact_conf_by_address(cidr, CONF_DLINE, NULL);
+       if(aconf == NULL)
+       {
+               sendto_one_notice(source_p, ":No D-Line for %s", cidr);
+               return 0;
+       }
+
+       strlcpy(buf, aconf->host, sizeof buf);
+       if(remove_temp_dline(aconf))
        {
                sendto_one(source_p,
                           ":%s NOTICE %s :Un-dlined [%s] from temporary D-lines",
-                          me.name, parv[0], cidr);
+                          me.name, parv[0], buf);
                sendto_realops_snomask(SNO_GENERAL, L_ALL,
                                     "%s has removed the temporary D-Line for: [%s]",
-                                    get_oper_name(source_p), cidr);
-               ilog(L_KLINE, "UD %s %s", get_oper_name(source_p), cidr);
+                                    get_oper_name(source_p), buf);
+               ilog(L_KLINE, "UD %s %s", get_oper_name(source_p), buf);
                return 0;
        }
 
@@ -330,7 +337,7 @@ mo_undline(struct Client *client_p, struct Client *source_p, int parc, const cha
                        continue;
                }
 
-               if(irccmp(found_cidr, cidr) == 0)
+               if(irccmp(found_cidr, aconf->host) == 0)
                {
                        pairme++;
                }
@@ -355,8 +362,8 @@ mo_undline(struct Client *client_p, struct Client *source_p, int parc, const cha
        }
        else if(!pairme)
        {
-               sendto_one(source_p, ":%s NOTICE %s :No D-Line for %s",
-                          me.name, parv[0], cidr);
+               sendto_one_notice(source_p, ":Cannot find D-Line for %s in file",
+                          aconf->host);
 
                if(temppath != NULL)
                        (void) unlink(temppath);
@@ -369,13 +376,13 @@ mo_undline(struct Client *client_p, struct Client *source_p, int parc, const cha
                sendto_one_notice(source_p, ":Couldn't rename temp file, aborted");
                return 0;
        }
-       rehash_bans(0);
-
 
-       sendto_one(source_p, ":%s NOTICE %s :D-Line for [%s] is removed", me.name, parv[0], cidr);
+       sendto_one(source_p, ":%s NOTICE %s :D-Line for [%s] is removed", me.name, parv[0], aconf->host);
        sendto_realops_snomask(SNO_GENERAL, L_ALL,
-                            "%s has removed the D-Line for: [%s]", get_oper_name(source_p), cidr);
-       ilog(L_KLINE, "UD %s %s", get_oper_name(source_p), cidr);
+                            "%s has removed the D-Line for: [%s]", get_oper_name(source_p), aconf->host);
+       ilog(L_KLINE, "UD %s %s", get_oper_name(source_p), aconf->host);
+
+       delete_one_address_conf(aconf->host, aconf);
 
        return 0;
 }
@@ -435,32 +442,23 @@ flush_write(struct Client *source_p, FILE * out, char *buf, char *temppath)
 
 /* remove_temp_dline()
  *
- * inputs       - hostname to undline
+ * inputs       - confitem to undline
  * outputs      -
  * side effects - tries to undline anything that matches
  */
 static int
-remove_temp_dline(const char *host)
+remove_temp_dline(struct ConfItem *aconf)
 {
-       struct ConfItem *aconf;
-       dlink_node *ptr;
-       struct irc_sockaddr_storage addr, caddr;
-       int bits, cbits;
+       rb_dlink_node *ptr;
        int i;
 
-       parse_netmask(host, (struct sockaddr *)&addr, &bits);
-
        for (i = 0; i < LAST_TEMP_TYPE; i++)
        {
-               DLINK_FOREACH(ptr, temp_dlines[i].head)
+               RB_DLINK_FOREACH(ptr, temp_dlines[i].head)
                {
-                       aconf = ptr->data;
-
-                       parse_netmask(aconf->host, (struct sockaddr *)&caddr, &cbits);
-
-                       if(comp_with_mask_sock((struct sockaddr *)&addr, (struct sockaddr *)&caddr, bits) && bits == cbits)
+                       if (aconf == ptr->data)
                        {
-                               dlinkDestroy(ptr, &temp_dlines[i]);
+                               rb_dlinkDestroy(ptr, &temp_dlines[i]);
                                delete_one_address_conf(aconf->host, aconf);
                                return YES;
                        }