]> jfr.im git - solanum.git/blobdiff - src/s_newconf.c
Merge pull request #53 from ShadowNinja/clarify_U+R
[solanum.git] / src / s_newconf.c
index c73db3df04ef4181be0f5ff08ad4d9240c658329..7ca43ad67ef82880525e7af239ba3dbf5ac7c2cc 100644 (file)
@@ -43,8 +43,9 @@
 #include "hostmask.h"
 #include "newconf.h"
 #include "hash.h"
-#include "sprintf_irc.h"
 #include "irc_dictionary.h"
+#include "s_assert.h"
+#include "logger.h"
 
 rb_dlink_list shared_conf_list;
 rb_dlink_list cluster_conf_list;
@@ -174,7 +175,7 @@ free_remote_conf(struct remote_conf *remote_p)
 }
 
 int
-find_shared_conf(const char *username, const char *host, 
+find_shared_conf(const char *username, const char *host,
                const char *server, int flags)
 {
        struct remote_conf *shared_p;
@@ -216,7 +217,7 @@ propagate_generic(struct Client *source_p, const char *command,
                        "ENCAP %s %s %s",
                        target, command, buffer);
 }
-                       
+
 void
 cluster_generic(struct Client *source_p, const char *command,
                int cltype, int cap, const char *format, ...)
@@ -263,6 +264,7 @@ free_oper_conf(struct oper_conf *oper_p)
        rb_free(oper_p->username);
        rb_free(oper_p->host);
        rb_free(oper_p->name);
+       rb_free(oper_p->certfp);
 
        if(oper_p->passwd)
        {
@@ -299,7 +301,7 @@ find_oper_conf(const char *username, const char *host, const char *locip, const
                if(irccmp(oper_p->name, name) || !match(oper_p->username, username))
                        continue;
 
-               strlcpy(addr, oper_p->host, sizeof(addr));
+               rb_strlcpy(addr, oper_p->host, sizeof(addr));
 
                if(parse_netmask(addr, (struct sockaddr *)&ip, &bits) != HM_HOST)
                {
@@ -319,56 +321,6 @@ find_oper_conf(const char *username, const char *host, const char *locip, const
        return NULL;
 }
 
-struct oper_flags
-{
-       int flag;
-       char has;
-       char hasnt;
-};
-static struct oper_flags oper_flagtable[] =
-{
-       { OPER_GLINE,           'G', 'g' },
-       { OPER_KLINE,           'K', 'k' },
-       { OPER_XLINE,           'X', 'x' },
-       { OPER_RESV,            'Q', 'q' },
-       { OPER_GLOBKILL,        'O', 'o' },
-       { OPER_LOCKILL,         'C', 'c' },
-       { OPER_REMOTE,          'R', 'r' },
-       { OPER_UNKLINE,         'U', 'u' },
-       { OPER_REHASH,          'H', 'h' },
-       { OPER_DIE,             'D', 'd' },
-       { OPER_ADMIN,           'A', 'a' },
-       { OPER_NICKS,           'N', 'n' },
-       { OPER_OPERWALL,        'L', 'l' },
-       { OPER_SPY,             'S', 's' },
-       { OPER_INVIS,           'P', 'p' },
-       { OPER_REMOTEBAN,       'B', 'b' },
-       { OPER_MASSNOTICE,      'M', 'm' },
-       { 0,                    '\0', '\0' }
-};
-
-const char *
-get_oper_privs(int flags)
-{
-       static char buf[20];
-       char *p;
-       int i;
-
-       p = buf;
-
-       for(i = 0; oper_flagtable[i].flag; i++)
-       {
-               if(flags & oper_flagtable[i].flag)
-                       *p++ = oper_flagtable[i].has;
-               else
-                       *p++ = oper_flagtable[i].hasnt;
-       }
-
-       *p = '\0';
-
-       return buf;
-}
-
 struct server_conf *
 make_server_conf(void)
 {
@@ -490,7 +442,7 @@ detach_server_conf(struct Client *client_p)
 }
 
 void
-set_server_conf_autoconn(struct Client *source_p, char *name, int newval)
+set_server_conf_autoconn(struct Client *source_p, const char *name, int newval)
 {
        struct server_conf *server_p;
 
@@ -509,6 +461,24 @@ set_server_conf_autoconn(struct Client *source_p, char *name, int newval)
                sendto_one_notice(source_p, ":Can't find %s", name);
 }
 
+void
+disable_server_conf_autoconn(const char *name)
+{
+       struct server_conf *server_p;
+
+       server_p = find_server_conf(name);
+       if(server_p != NULL && server_p->flags & SERVER_AUTOCONN)
+       {
+               server_p->flags &= ~SERVER_AUTOCONN;
+
+               sendto_realops_snomask(SNO_GENERAL, L_ALL,
+                               "Disabling AUTOCONN for %s because of error",
+                               name);
+               ilog(L_SERVER, "Disabling AUTOCONN for %s because of error",
+                               name);
+       }
+}
+
 struct ConfItem *
 find_xline(const char *gecos, int counter)
 {
@@ -519,7 +489,7 @@ find_xline(const char *gecos, int counter)
        {
                aconf = ptr->data;
 
-               if(match_esc(aconf->name, gecos))
+               if(match_esc(aconf->host, gecos))
                {
                        if(counter)
                                aconf->port++;
@@ -540,7 +510,7 @@ find_xline_mask(const char *gecos)
        {
                aconf = ptr->data;
 
-               if(!irccmp(aconf->name, gecos))
+               if(!irccmp(aconf->host, gecos))
                        return aconf;
        }
 
@@ -557,7 +527,7 @@ find_nick_resv(const char *name)
        {
                aconf = ptr->data;
 
-               if(match_esc(aconf->name, name))
+               if(match_esc(aconf->host, name))
                {
                        aconf->port++;
                        return aconf;
@@ -577,7 +547,7 @@ find_nick_resv_mask(const char *name)
        {
                aconf = ptr->data;
 
-               if(!irccmp(aconf->name, name))
+               if(!irccmp(aconf->host, name))
                        return aconf;
        }
 
@@ -684,6 +654,7 @@ valid_temp_time(const char *p)
        return(result * 60);
 }
 
+/* Propagated bans are expired elsewhere. */
 static void
 expire_temp_rxlines(void *unused)
 {
@@ -696,12 +667,14 @@ expire_temp_rxlines(void *unused)
        {
                aconf = ptr->data;
 
+               if(aconf->lifetime != 0)
+                       continue;
                if(aconf->hold && aconf->hold <= rb_current_time())
                {
                        if(ConfigFileEntry.tkline_expire_notices)
                                sendto_realops_snomask(SNO_GENERAL, L_ALL,
                                                "Temporary RESV for [%s] expired",
-                                               aconf->name);
+                                               aconf->host);
 
                        free_conf(aconf);
                        rb_dlinkDestroy(ptr, &resvTable[i]);
@@ -713,12 +686,14 @@ expire_temp_rxlines(void *unused)
        {
                aconf = ptr->data;
 
+               if(aconf->lifetime != 0)
+                       continue;
                if(aconf->hold && aconf->hold <= rb_current_time())
                {
                        if(ConfigFileEntry.tkline_expire_notices)
                                sendto_realops_snomask(SNO_GENERAL, L_ALL,
                                                "Temporary RESV for [%s] expired",
-                                               aconf->name);
+                                               aconf->host);
                        free_conf(aconf);
                        rb_dlinkDestroy(ptr, &resv_conf_list);
                }
@@ -728,12 +703,14 @@ expire_temp_rxlines(void *unused)
        {
                aconf = ptr->data;
 
+               if(aconf->lifetime != 0)
+                       continue;
                if(aconf->hold && aconf->hold <= rb_current_time())
                {
                        if(ConfigFileEntry.tkline_expire_notices)
                                sendto_realops_snomask(SNO_GENERAL, L_ALL,
                                                "Temporary X-line for [%s] expired",
-                                               aconf->name);
+                                               aconf->host);
                        free_conf(aconf);
                        rb_dlinkDestroy(ptr, &xline_conf_list);
                }
@@ -755,8 +732,8 @@ add_nd_entry(const char *name)
                return;
 
        nd = rb_bh_alloc(nd_heap);
-       
-       strlcpy(nd->name, name, sizeof(nd->name));
+
+       rb_strlcpy(nd->name, name, sizeof(nd->name));
        nd->expire = rb_current_time() + ConfigFileEntry.nick_delay;
 
        /* this list is ordered */