]> jfr.im git - solanum.git/blobdiff - ircd/s_conf.c
Merge pull request #298 from edk0/rejectcache
[solanum.git] / ircd / s_conf.c
index dbed64d02c85717c01e524ac9a9f8b5f6946a7be..2658bddcafa933d5483202853b42a88abca5b252 100644 (file)
@@ -25,6 +25,7 @@
 #include "stdinc.h"
 #include "ircd_defs.h"
 #include "s_conf.h"
+#include "s_user.h"
 #include "s_newconf.h"
 #include "newconf.h"
 #include "s_serv.h"
@@ -279,9 +280,8 @@ check_client(struct Client *client_p, struct Client *source_p, const char *usern
                                source_p->name, IsGotId(source_p) ? "" : "~",
                                source_p->username, source_p->sockhost,
                                source_p->localClient->listener->name, port);
-                       add_reject(client_p, NULL, NULL);
-                       exit_client(client_p, source_p, &me,
-                                   "You are not authorised to use this server");
+                       add_reject(client_p, NULL, NULL, NULL, "You are not authorised to use this server.");
+                       exit_client(client_p, source_p, &me, "You are not authorised to use this server.");
                        break;
                }
        case BANNED_CLIENT:
@@ -363,7 +363,7 @@ verify_access(struct Client *client_p, const char *username)
                                        form_str(ERR_YOUREBANNEDCREEP),
                                        me.name, client_p->name,
                                        get_user_ban_reason(aconf));
-               add_reject(client_p, aconf->user, aconf->host);
+               add_reject(client_p, aconf->user, aconf->host, aconf, NULL);
                return (BANNED_CLIENT);
        }
 
@@ -530,6 +530,20 @@ attach_iline(struct Client *client_p, struct ConfItem *aconf)
        return (attach_conf(client_p, aconf));
 }
 
+/*
+ * deref_conf
+ *
+ * inputs      - ConfItem that is referenced by something other than a client
+ * side effects        - Decrement and free ConfItem if appropriate
+ */
+void
+deref_conf(struct ConfItem *aconf)
+{
+       aconf->clients--;
+       if(!aconf->clients && IsIllegal(aconf))
+               free_conf(aconf);
+}
+
 /*
  * detach_conf
  *
@@ -630,6 +644,8 @@ attach_conf(struct Client *client_p, struct ConfItem *aconf)
 bool
 rehash(bool sig)
 {
+       rb_dlink_node *n;
+
        hook_data_rehash hdata = { sig };
 
        if(sig)
@@ -648,6 +664,16 @@ rehash(bool sig)
 
        open_logfiles();
 
+       RB_DLINK_FOREACH(n, local_oper_list.head)
+       {
+               struct Client *oper = n->data;
+               const char *modeparv[4];
+               modeparv[0] = modeparv[1] = oper->name;
+               modeparv[2] = "+";
+               modeparv[3] = NULL;
+               user_mode(oper, oper, 3, modeparv);
+       }
+
        call_hook(h_rehash, &hdata);
        return false;
 }
@@ -1267,7 +1293,7 @@ get_oper_name(struct Client *client_p)
        {
                snprintf(buffer, sizeof(buffer), "%s!%s@%s{%s}",
                                client_p->name, client_p->username,
-                               client_p->host, client_p->localClient->opername);
+                               client_p->host, client_p->user->opername);
                return buffer;
        }