]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/s_conf.c
Track who set a dline/kline/xline/resv as in ratbox3.
[irc/rqf/shadowircd.git] / src / s_conf.c
index c3df6fd04d06b982d2acec9a8666cbc305fa97ea..56849bd1e97c0ebe62f053ad231d5955bf731732 100644 (file)
@@ -51,6 +51,7 @@
 #include "privilege.h"
 #include "sslproc.h"
 #include "bandbi.h"
+#include "operhash.h"
 
 struct config_server_hide ConfigServerHide;
 
@@ -143,11 +144,15 @@ free_conf(struct ConfItem *aconf)
 
        rb_free(aconf->passwd);
        rb_free(aconf->spasswd);
-       rb_free(aconf->name);
        rb_free(aconf->className);
        rb_free(aconf->user);
        rb_free(aconf->host);
 
+       if(IsConfBan(aconf))
+               operhash_delete(aconf->info.oper);
+       else
+               rb_free(aconf->info.name);
+
        rb_bh_free(confitem_heap, aconf);
 }
 
@@ -334,7 +339,7 @@ verify_access(struct Client *client_p, const char *username)
                if(aconf->flags & CONF_FLAGS_REDIR)
                {
                        sendto_one_numeric(client_p, RPL_REDIR, form_str(RPL_REDIR),
-                                       aconf->name ? aconf->name : "", aconf->port);
+                                       aconf->info.name ? aconf->info.name : "", aconf->port);
                        return (NOT_AUTHORISED);
                }
 
@@ -351,24 +356,24 @@ verify_access(struct Client *client_p, const char *username)
                                sendto_realops_snomask(SNO_GENERAL, L_ALL,
                                                "%s spoofing: %s as %s",
                                                client_p->name,
-                                               show_ip(NULL, client_p) ? client_p->host : aconf->name,
-                                               aconf->name);
+                                               show_ip(NULL, client_p) ? client_p->host : aconf->info.name,
+                                               aconf->info.name);
                        }
 
                        /* user@host spoof */
-                       if((p = strchr(aconf->name, '@')) != NULL)
+                       if((p = strchr(aconf->info.name, '@')) != NULL)
                        {
                                char *host = p+1;
                                *p = '\0';
 
-                               rb_strlcpy(client_p->username, aconf->name,
+                               rb_strlcpy(client_p->username, aconf->info.name,
                                        sizeof(client_p->username));
                                rb_strlcpy(client_p->host, host,
                                        sizeof(client_p->host));
                                *p = '@';
                        }
                        else
-                               rb_strlcpy(client_p->host, aconf->name, sizeof(client_p->host));
+                               rb_strlcpy(client_p->host, aconf->info.name, sizeof(client_p->host));
                }
                return (attach_iline(client_p, aconf));
        }
@@ -1115,7 +1120,7 @@ get_printable_conf(struct ConfItem *aconf, char **name, char **host,
        static char null[] = "<NULL>";
        static char zero[] = "default";
 
-       *name = EmptyString(aconf->name) ? null : aconf->name;
+       *name = EmptyString(aconf->info.name) ? null : aconf->info.name;
        *host = EmptyString(aconf->host) ? null : aconf->host;
        *pass = EmptyString(aconf->passwd) ? null : aconf->passwd;
        *user = EmptyString(aconf->user) ? null : aconf->user;