]> jfr.im git - solanum.git/blobdiff - src/newconf.c
Add target change for channels.
[solanum.git] / src / newconf.c
index 36d05175785f4616b1a4402799440c16a0a51e65..6e4fca20ed92b025987bc8ebc5ff812e1cee1c30 100644 (file)
@@ -615,6 +615,12 @@ conf_set_oper_flags(void *data)
        set_modes_from_table(&yy_oper->flags, "flag", oper_table, args);
 }
 
+static void
+conf_set_oper_fingerprint(void *data)
+{
+       yy_oper->certfp = rb_strdup((char *) data);
+}
+
 static void
 conf_set_oper_privset(void *data)
 {
@@ -892,12 +898,12 @@ conf_begin_auth(struct TopConf *tc)
 static int
 conf_end_auth(struct TopConf *tc)
 {
-       struct ConfItem *yy_tmp;
+       struct ConfItem *yy_tmp, *found_conf;
        rb_dlink_node *ptr;
        rb_dlink_node *next_ptr;
 
-       if(EmptyString(yy_aconf->name))
-               yy_aconf->name = rb_strdup("NOMATCH");
+       if(EmptyString(yy_aconf->info.name))
+               yy_aconf->info.name = rb_strdup("NOMATCH");
 
        /* didnt even get one ->host? */
        if(EmptyString(yy_aconf->host))
@@ -910,9 +916,11 @@ conf_end_auth(struct TopConf *tc)
        collapse(yy_aconf->user);
        collapse(yy_aconf->host);
        conf_add_class_to_conf(yy_aconf);
-       if (find_exact_conf_by_address("*", CONF_CLIENT, "*"))
+       if ((found_conf = find_exact_conf_by_address("*", CONF_CLIENT, "*")) && found_conf->spasswd == NULL)
                conf_report_error("Ignoring redundant auth block (after *@*)");
-       else if (find_exact_conf_by_address(yy_aconf->host, CONF_CLIENT, yy_aconf->user))
+       else if ((found_conf = find_exact_conf_by_address(yy_aconf->host, CONF_CLIENT, yy_aconf->user)) &&
+                       (!found_conf->spasswd || (yy_aconf->spasswd &&
+                           0 == irccmp(found_conf->spasswd, yy_aconf->spasswd))))
                conf_report_error("Ignoring duplicate auth block for %s@%s",
                                yy_aconf->user, yy_aconf->host);
        else
@@ -929,7 +937,7 @@ conf_end_auth(struct TopConf *tc)
                        yy_tmp->spasswd = rb_strdup(yy_aconf->spasswd);
                
                /* this will always exist.. */
-               yy_tmp->name = rb_strdup(yy_aconf->name);
+               yy_tmp->info.name = rb_strdup(yy_aconf->info.name);
 
                if(yy_aconf->className)
                        yy_tmp->className = rb_strdup(yy_aconf->className);
@@ -1062,8 +1070,8 @@ conf_set_auth_spoof(void *data)
                return;
        }
 
-       rb_free(yy_aconf->name);
-       yy_aconf->name = rb_strdup(data);
+       rb_free(yy_aconf->info.name);
+       yy_aconf->info.name = rb_strdup(data);
        yy_aconf->flags |= CONF_FLAGS_SPOOF_IP;
 }
 
@@ -1079,8 +1087,8 @@ static void
 conf_set_auth_redir_serv(void *data)
 {
        yy_aconf->flags |= CONF_FLAGS_REDIR;
-       rb_free(yy_aconf->name);
-       yy_aconf->name = rb_strdup(data);
+       rb_free(yy_aconf->info.name);
+       yy_aconf->info.name = rb_strdup(data);
 }
 
 static void
@@ -1722,9 +1730,6 @@ conf_end_alias(struct TopConf *tc)
                return -1;
        }
 
-       if (!alias_dict)
-               alias_dict = irc_dictionary_create(strcasecmp);
-
        irc_dictionary_add(alias_dict, yy_alias->name, yy_alias);
 
        return 0;
@@ -2040,6 +2045,7 @@ static struct ConfEntry conf_operator_table[] =
        { "snomask",    CF_QSTRING, conf_set_oper_snomask,      0, NULL },
        { "user",       CF_QSTRING, conf_set_oper_user,         0, NULL },
        { "password",   CF_QSTRING, conf_set_oper_password,     0, NULL },
+       { "fingerprint",        CF_QSTRING, conf_set_oper_fingerprint,  0, NULL },
        { "\0", 0, NULL, 0, NULL }
 };
 
@@ -2130,6 +2136,7 @@ static struct ConfEntry conf_general_table[] =
        { "collision_fnc",      CF_YESNO, NULL, 0, &ConfigFileEntry.collision_fnc       },
        { "connect_timeout",    CF_TIME,  NULL, 0, &ConfigFileEntry.connect_timeout     },
        { "default_floodcount", CF_INT,   NULL, 0, &ConfigFileEntry.default_floodcount  },
+       { "default_ident_timeout",      CF_INT, NULL, 0, &ConfigFileEntry.default_ident_timeout         },
        { "disable_auth",       CF_YESNO, NULL, 0, &ConfigFileEntry.disable_auth        },
        { "dots_in_ident",      CF_INT,   NULL, 0, &ConfigFileEntry.dots_in_ident       },
        { "failed_oper_notice", CF_YESNO, NULL, 0, &ConfigFileEntry.failed_oper_notice  },
@@ -2169,6 +2176,7 @@ static struct ConfEntry conf_general_table[] =
        { "ts_warn_delta",      CF_TIME,  NULL, 0, &ConfigFileEntry.ts_warn_delta       },
        { "use_whois_actually", CF_YESNO, NULL, 0, &ConfigFileEntry.use_whois_actually  },
        { "warn_no_nline",      CF_YESNO, NULL, 0, &ConfigFileEntry.warn_no_nline       },
+       { "use_propagated_bans",CF_YESNO, NULL, 0, &ConfigFileEntry.use_propagated_bans },
        { "\0",                 0,        NULL, 0, NULL }
 };
 
@@ -2190,6 +2198,8 @@ static struct ConfEntry conf_channel_table[] =
        { "use_invex",          CF_YESNO, NULL, 0, &ConfigChannel.use_invex             },
        { "use_knock",          CF_YESNO, NULL, 0, &ConfigChannel.use_knock             },
        { "use_forward",        CF_YESNO, NULL, 0, &ConfigChannel.use_forward           },
+       { "resv_forcepart",     CF_YESNO, NULL, 0, &ConfigChannel.resv_forcepart        },
+       { "channel_target_change", CF_YESNO, NULL, 0, &ConfigChannel.channel_target_change      },
        { "\0",                 0,        NULL, 0, NULL }
 };