]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/newconf.c
Add mr_flea (and Taros) to the list of Charybdis contributors.
[irc/rqf/shadowircd.git] / src / newconf.c
index ebe7437f0b1aeaaf954bb3cb9b77fa0faa4e611a..65e28f8e2b13f4bd06971030b58a1dac8b4e974d 100644 (file)
@@ -1,5 +1,4 @@
 /* This code is in the public domain.
- * $Id: newconf.c 3550 2007-08-09 06:47:26Z nenolod $
  */
 
 #include "stdinc.h"
@@ -377,6 +376,8 @@ static struct mode_table shared_table[] =
        { "unresv",     SHARED_UNRESV   },
        { "locops",     SHARED_LOCOPS   },
        { "rehash",     SHARED_REHASH   },
+       { "die",        SHARED_DIE              },
+       { "modules", SHARED_MODULE  },
        { "all",        SHARED_ALL      },
        { "none",       0               },
        {NULL, 0}
@@ -571,10 +572,31 @@ conf_end_oper(struct TopConf *tc)
                yy_tmpoper->flags = yy_oper->flags;
                yy_tmpoper->umodes = yy_oper->umodes;
                yy_tmpoper->snomask = yy_oper->snomask;
-               if(valid_hostname(yy_oper->vhost))
-                       yy_tmpoper->vhost = rb_strdup(yy_oper->vhost);
-               else
-                       conf_report_error("Ignoring vhost setting for oper %s -- invalid hostmask.", yy_oper->name);
+
+               if(!EmptyString(yy_oper->vhost))
+               {
+                       if(valid_hostname(yy_oper->vhost))
+                               yy_tmpoper->vhost = rb_strdup(yy_oper->vhost);
+                       else if(!EmptyString(yy_oper->vhost))
+                               conf_report_error("Ignoring vhost setting for oper %s -- invalid hostmask.", yy_oper->name);
+               }
+
+               if(!EmptyString(yy_oper->swhois))
+               {
+                       if(strlen(yy_oper->swhois) < 400)
+                               yy_tmpoper->swhois = rb_strdup(yy_oper->swhois);
+                       else 
+                               conf_report_error("Ignoring swhois setting for oper %s -- swhois too long.", yy_oper->name);
+               }
+
+               if(!EmptyString(yy_oper->operstring))
+               {
+                       if(strlen(yy_oper->operstring) < 400)
+                               yy_tmpoper->operstring = rb_strdup(yy_oper->operstring);
+                       else
+                               conf_report_error("Ignoring operstring setting for oper %s -- operstring too long.", yy_oper->name);
+               }
+
                yy_tmpoper->privset = yy_oper->privset;
 
 #ifdef HAVE_LIBCRYPTO
@@ -710,6 +732,18 @@ conf_set_oper_vhost(void *data)
        yy_oper->vhost = rb_strdup((char *) data);
 }
 
+static void
+conf_set_oper_swhois(void *data)
+{
+       yy_oper->swhois = rb_strdup((char *) data);
+}
+
+static void
+conf_set_oper_operstring(void *data)
+{
+       yy_oper->operstring = rb_strdup((char *) data);
+}
+
 static int
 conf_begin_class(struct TopConf *tc)
 {
@@ -917,8 +951,8 @@ conf_end_auth(struct TopConf *tc)
        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))
@@ -952,7 +986,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);
@@ -1042,7 +1076,7 @@ static void
 conf_set_auth_autojoin_opers(void *data)
 {
        if(yy_aconf->autojoin_opers)
-               memset(yy_aconf->autojoin_opers, 0, strlen(yy_aconf->autojoin));
+               memset(yy_aconf->autojoin_opers, 0, strlen(yy_aconf->autojoin_opers));
        rb_free(yy_aconf->autojoin_opers);
        yy_aconf->autojoin_opers = rb_strdup(data);
 }
@@ -1103,8 +1137,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;
 }
 
@@ -1120,8 +1154,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
@@ -1198,7 +1232,7 @@ conf_set_shared_oper(void *data)
 
        if((p = strchr(args->v.string, '@')) == NULL)
        {
-               conf_report_error("Ignoring shard::oper -- oper is not a user@host");
+               conf_report_error("Ignoring shared::oper -- oper is not a user@host");
                return;
        }
 
@@ -1275,9 +1309,9 @@ conf_end_connect(struct TopConf *tc)
                return 0;
        }
 
-       if(EmptyString(yy_server->passwd) || EmptyString(yy_server->spasswd))
+       if((EmptyString(yy_server->passwd) || EmptyString(yy_server->spasswd)) && EmptyString(yy_server->certfp))
        {
-               conf_report_error("Ignoring connect block for %s -- missing password.",
+               conf_report_error("Ignoring connect block for %s -- no certfp or password credentials provided.",
                                        yy_server->name);
                return 0;
        }
@@ -1349,6 +1383,15 @@ conf_set_connect_accept_password(void *data)
        yy_server->passwd = rb_strdup(data);
 }
 
+static void
+conf_set_connect_fingerprint(void *data)
+{
+       yy_server->certfp = rb_strdup((char *) data);
+
+       /* force SSL to be enabled if fingerprint is enabled. */
+       yy_server->flags |= SERVER_SSL;
+}
+
 static void
 conf_set_connect_port(void *data)
 {
@@ -1986,7 +2029,7 @@ add_conf_item(const char *topconf, const char *name, int type, void (*func) (voi
        if((tc = find_top_conf(topconf)) == NULL)
                return -1;
 
-       if((cf = find_conf_item(tc, name)) != NULL)
+       if(find_conf_item(tc, name))
                return -1;
 
        cf = rb_malloc(sizeof(struct ConfEntry));
@@ -2028,6 +2071,8 @@ static struct ConfEntry conf_serverinfo_table[] =
 {
        { "description",        CF_QSTRING, NULL, 0, &ServerInfo.description    },
        { "network_desc",       CF_QSTRING, NULL, 0, &ServerInfo.network_desc   },
+       { "helpchan",           CF_QSTRING, NULL, 0, &ServerInfo.helpchan               },
+       { "helpurl",            CF_QSTRING, NULL, 0, &ServerInfo.helpurl                },
        { "hub",                CF_YESNO,   NULL, 0, &ServerInfo.hub            },
 
        { "network_name",       CF_QSTRING, conf_set_serverinfo_network_name,   0, NULL },
@@ -2077,6 +2122,8 @@ static struct ConfEntry conf_operator_table[] =
        { "privset",    CF_QSTRING, conf_set_oper_privset,      0, NULL },
        { "snomask",    CF_QSTRING, conf_set_oper_snomask,      0, NULL },
        { "vhost",      CF_QSTRING, conf_set_oper_vhost,        0, NULL },
+       { "swhois",     CF_QSTRING, conf_set_oper_swhois,       0, NULL },
+       { "operstring", CF_QSTRING, conf_set_oper_operstring,   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 },
@@ -2126,6 +2173,7 @@ static struct ConfEntry conf_connect_table[] =
 {
        { "send_password",      CF_QSTRING,   conf_set_connect_send_password,   0, NULL },
        { "accept_password",    CF_QSTRING,   conf_set_connect_accept_password, 0, NULL },
+       { "fingerprint",        CF_QSTRING,   conf_set_connect_fingerprint,     0, NULL },
        { "flags",      CF_STRING | CF_FLIST, conf_set_connect_flags,   0, NULL },
        { "host",       CF_QSTRING, conf_set_connect_host,      0, NULL },
        { "vhost",      CF_QSTRING, conf_set_connect_vhost,     0, NULL },
@@ -2153,6 +2201,7 @@ static struct ConfEntry conf_general_table[] =
        { "default_operstring", CF_QSTRING, NULL, REALLEN,    &ConfigFileEntry.default_operstring },
        { "default_adminstring",CF_QSTRING, NULL, REALLEN,    &ConfigFileEntry.default_adminstring },
        { "default_operhost",   CF_QSTRING, NULL, REALLEN,    &ConfigFileEntry.default_operhost },
+       { "static_quit",        CF_QSTRING, NULL, REALLEN,        &ConfigFileEntry.static_quit  },
        { "servicestring",      CF_QSTRING, NULL, REALLEN,    &ConfigFileEntry.servicestring },
        { "egdpool_path",       CF_QSTRING, NULL, MAXPATHLEN, &ConfigFileEntry.egdpool_path },
        { "kline_reason",       CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.kline_reason },
@@ -2160,7 +2209,9 @@ static struct ConfEntry conf_general_table[] =
        { "identify_command",   CF_QSTRING, NULL, REALLEN, &ConfigFileEntry.identifycommand },
 
        { "anti_spam_exit_message_time", CF_TIME,  NULL, 0, &ConfigFileEntry.anti_spam_exit_message_time },
+       { "use_part_messages",          CF_YESNO, NULL, 0, &ConfigFileEntry.use_part_messages   },
        { "disable_fake_channels",       CF_YESNO, NULL, 0, &ConfigFileEntry.disable_fake_channels },
+       { "hide_channel_below_users", CF_INT, NULL, 0, &ConfigFileEntry.hide_channel_below_users },
        { "min_nonwildcard_simple",      CF_INT,   NULL, 0, &ConfigFileEntry.min_nonwildcard_simple },
        { "non_redundant_klines",        CF_YESNO, NULL, 0, &ConfigFileEntry.non_redundant_klines },
        { "tkline_expire_notices",       CF_YESNO, NULL, 0, &ConfigFileEntry.tkline_expire_notices },
@@ -2173,6 +2224,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  },
@@ -2189,6 +2241,7 @@ static struct ConfEntry conf_general_table[] =
        { "min_nonwildcard",    CF_INT,   NULL, 0, &ConfigFileEntry.min_nonwildcard     },
        { "nick_delay",         CF_TIME,  NULL, 0, &ConfigFileEntry.nick_delay          },
        { "no_oper_flood",      CF_YESNO, NULL, 0, &ConfigFileEntry.no_oper_flood       },
+       { "true_no_oper_flood", CF_YESNO, NULL, 0, &ConfigFileEntry.true_no_oper_flood  },
        { "operspy_admin_only", CF_YESNO, NULL, 0, &ConfigFileEntry.operspy_admin_only  },
        { "operspy_dont_care_user_info", CF_YESNO, NULL, 0, &ConfigFileEntry.operspy_dont_care_user_info },
        { "secret_channels_in_whois", CF_YESNO, NULL, 0, &ConfigFileEntry.secret_channels_in_whois },
@@ -2213,6 +2266,8 @@ 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 },
+       { "expire_override_time",       CF_TIME, NULL, 0, &ConfigFileEntry.expire_override_time},
        { "\0",                 0,        NULL, 0, NULL }
 };
 
@@ -2220,6 +2275,7 @@ static struct ConfEntry conf_channel_table[] =
 {
        { "autochanmodes",      CF_QSTRING, NULL, 0, &ConfigChannel.autochanmodes       },
        { "exemptchanops",      CF_QSTRING, NULL, 0, &ConfigChannel.exemptchanops       },
+       { "disabledmodes",      CF_QSTRING, NULL, 0, &ConfigChannel.disabledmodes       },
        { "default_split_user_count",   CF_INT,  NULL, 0, &ConfigChannel.default_split_user_count        },
        { "default_split_server_count", CF_INT,  NULL, 0, &ConfigChannel.default_split_server_count },
        { "burst_topicwho",     CF_YESNO, NULL, 0, &ConfigChannel.burst_topicwho        },
@@ -2234,15 +2290,16 @@ static struct ConfEntry conf_channel_table[] =
        { "only_ascii_channels", CF_YESNO, NULL, 0, &ConfigChannel.only_ascii_channels },
        { "cycle_host_change",  CF_YESNO, NULL, 0, &ConfigChannel.cycle_host_change },
        { "host_in_topic",      CF_YESNO, NULL, 0, &ConfigChannel.host_in_topic },
+       { "admin_on_channel_create", CF_YESNO, NULL, 0, &ConfigChannel.admin_on_channel_create },
        { "use_halfop",         CF_YESNO, NULL, 0, &ConfigChannel.use_halfop            },
-       { "use_owner",          CF_YESNO, NULL, 0, &ConfigChannel.use_owner             },
+       { "use_admin",          CF_YESNO, NULL, 0, &ConfigChannel.use_admin             },
        { "use_except",         CF_YESNO, NULL, 0, &ConfigChannel.use_except            },
        { "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           },
        { "use_local_channels", CF_YESNO, NULL, 0, &ConfigChannel.use_local_channels    },
        { "resv_forcepart",     CF_YESNO, NULL, 0, &ConfigChannel.resv_forcepart        },
-       { "kick_no_rejoin_time", CF_INT,  NULL, 0, &ConfigChannel.kick_no_rejoin_time   },
+       { "channel_target_change", CF_YESNO, NULL, 0, &ConfigChannel.channel_target_change  },
        { "exempt_cmode_c",     CF_YESNO, NULL, 0, &ConfigChannel.exempt_cmode_c        },
        { "exempt_cmode_C",     CF_YESNO, NULL, 0, &ConfigChannel.exempt_cmode_C        },
        { "exempt_cmode_D",     CF_YESNO, NULL, 0, &ConfigChannel.exempt_cmode_D        },