]> jfr.im git - irc/rqf/shadowircd.git/blobdiff - src/s_conf.c
s/owner/admin/ throughout the source code and docs.
[irc/rqf/shadowircd.git] / src / s_conf.c
index b5004bcba1dc56052ffe78e49d59fb22dedc2003..c6a1770d5c63ace5b24aef2f33b9f2c98612a1da 100644 (file)
@@ -30,6 +30,7 @@
 #include "s_newconf.h"
 #include "newconf.h"
 #include "s_serv.h"
+#include "s_user.h"
 #include "s_stats.h"
 #include "channel.h"
 #include "class.h"
@@ -635,23 +636,6 @@ rehash(int sig)
        return (0);
 }
 
-static struct banconf_entry
-{
-       const char **filename;
-       void (*func) (FILE *);
-       int perm;
-} banconfs[] = {
-       { &ConfigFileEntry.klinefile,   parse_k_file,   0 },
-       { &ConfigFileEntry.klinefile,   parse_k_file,   1 },
-       { &ConfigFileEntry.dlinefile,   parse_d_file,   0 },
-       { &ConfigFileEntry.dlinefile,   parse_d_file,   1 },
-       { &ConfigFileEntry.xlinefile,   parse_x_file,   0 },
-       { &ConfigFileEntry.xlinefile,   parse_x_file,   1 },
-       { &ConfigFileEntry.resvfile,    parse_resv_file,0 },
-       { &ConfigFileEntry.resvfile,    parse_resv_file,1 },
-       { NULL,                         NULL,           0 }
-};
-
 void
 rehash_bans(int sig)
 {
@@ -697,6 +681,7 @@ set_default_conf(void)
 
        ConfigFileEntry.default_operstring = rb_strdup("is an IRC operator");
        ConfigFileEntry.default_adminstring = rb_strdup("is a Server Administrator");
+       ConfigFileEntry.default_operhost = rb_strdup("");
        ConfigFileEntry.servicestring = rb_strdup("is a Network Service");
 
        ConfigFileEntry.default_umodes = UMODE_INVISIBLE;       
@@ -752,6 +737,7 @@ set_default_conf(void)
        ConfigFileEntry.collision_fnc = YES;
        ConfigFileEntry.global_snotices = YES;
        ConfigFileEntry.operspy_dont_care_user_info = NO;
+       ConfigFileEntry.secret_channels_in_whois = NO;
 
 #ifdef HAVE_LIBZ
        ConfigFileEntry.compression_level = 4;
@@ -762,16 +748,23 @@ set_default_conf(void)
        ConfigFileEntry.oper_only_umodes = UMODE_SERVNOTICE;
        ConfigFileEntry.oper_snomask = SNO_GENERAL;
 
+       ConfigChannel.autochanmodes = rb_strdup("nt");
+       ConfigChannel.exemptchanops = rb_strdup("");
+       ConfigChannel.use_halfop = YES;
+       ConfigChannel.use_admin = YES;
        ConfigChannel.use_except = YES;
        ConfigChannel.use_invex = YES;
        ConfigChannel.use_knock = YES;
        ConfigChannel.use_forward = YES;
+       ConfigChannel.use_local_channels = YES;
        ConfigChannel.knock_delay = 300;
        ConfigChannel.knock_delay_channel = 60;
        ConfigChannel.max_chans_per_user = 15;
        ConfigChannel.max_bans = 25;
        ConfigChannel.max_bans_large = 500;
        ConfigChannel.only_ascii_channels = NO;
+       ConfigChannel.cycle_host_change = YES;
+       ConfigChannel.host_in_topic = YES;
        ConfigChannel.burst_topicwho = NO;
        ConfigChannel.kick_on_split_riding = NO;
 
@@ -780,6 +773,15 @@ set_default_conf(void)
        ConfigChannel.no_join_on_split = NO;
        ConfigChannel.no_create_on_split = YES;
        ConfigChannel.resv_forcepart = YES;
+       ConfigChannel.kick_no_rejoin_time = 30;
+
+       ConfigChannel.exempt_cmode_c = NO;
+       ConfigChannel.exempt_cmode_C = NO;
+       ConfigChannel.exempt_cmode_D = NO;
+       ConfigChannel.exempt_cmode_T = NO;
+       ConfigChannel.exempt_cmode_N = NO;
+       ConfigChannel.exempt_cmode_G = NO;
+       ConfigChannel.exempt_cmode_K = NO;
 
        ConfigServerHide.flatten_links = 0;
        ConfigServerHide.links_delay = 300;
@@ -797,6 +799,7 @@ set_default_conf(void)
        ConfigFileEntry.reject_duration = 120;
        ConfigFileEntry.throttle_count = 4;
        ConfigFileEntry.throttle_duration = 60;
+       ConfigFileEntry.expire_override_time = 300;
 
        ServerInfo.default_max_clients = MAXCONNECTIONS;
 
@@ -875,6 +878,52 @@ validate_conf(void)
                splitmode = 0;
                splitchecking = 0;
        }
+
+       if(!valid_hostname(ConfigFileEntry.default_operhost))
+       {
+               conf_report_error("Warning -- invalid default_operhost specified, ignoring.");
+               ConfigFileEntry.default_operhost = rb_strdup("");
+       }
+
+       /* Parse the exemptchanops option and set the internal variables
+        * that we will use. */
+       char * ech;
+
+       for(ech = ConfigChannel.exemptchanops; *ech; ech++)
+       {
+               if(*ech == 'c')
+               {
+                       ConfigChannel.exempt_cmode_c = 1;
+                       continue;
+               }
+               if(*ech == 'C')
+               {
+                       ConfigChannel.exempt_cmode_C = 1;
+                       continue;
+               }
+               if(*ech == 'D')
+               {
+                       ConfigChannel.exempt_cmode_D = 1;
+                       continue;
+               }
+               if(*ech == 'T')
+               {
+                       ConfigChannel.exempt_cmode_T = 1;
+                       continue;
+               }
+               if(*ech == 'N')
+               {
+                       ConfigChannel.exempt_cmode_N = 1;
+                       continue;
+               }
+               if(*ech == 'G')
+               {
+                       ConfigChannel.exempt_cmode_G = 1;
+                       continue;
+               }
+               if(*ech == 'K')
+                       ConfigChannel.exempt_cmode_K = 1;
+       }
 }
 
 /* add_temp_kline()
@@ -1103,7 +1152,7 @@ read_conf_files(int cold)
 
        conf_fbfile_in = NULL;
 
-       filename = get_conf_name(CONF_TYPE);
+       filename = ConfigFileEntry.configfile;
 
        /* We need to know the initial filename for the yyerror() to report
           FIXME: The full path is in conffilenamebuf first time since we
@@ -1235,162 +1284,6 @@ clear_out_old_conf(void)
 }
 
 
-/* write_confitem()
- *
- * inputs       - kline, dline or resv type flag
- *              - client pointer to report to
- *              - user name of target
- *              - host name of target
- *              - reason for target
- *              - time string
- *              - type of xline
- * output       - NONE
- * side effects - This function takes care of finding the right conf
- *                file and adding the line to it, as well as notifying
- *                opers and the user.
- */
-void
-write_confitem(KlineType type, struct Client *source_p, char *user,
-              char *host, const char *reason, const char *oper_reason,
-              const char *current_date, int xtype)
-{
-       char buffer[1024];
-       FILE *out;
-       const char *filename;   /* filename to use for kline */
-
-       filename = get_conf_name(type);
-
-       if(type == KLINE_TYPE)
-       {
-               if(EmptyString(oper_reason))
-               {
-                       sendto_realops_snomask(SNO_GENERAL, L_ALL,
-                                       "%s added K-Line for [%s@%s] [%s]",
-                                       get_oper_name(source_p), user, 
-                                       host, reason);
-                       ilog(L_KLINE, "K %s 0 %s %s %s",
-                               get_oper_name(source_p), user, host, reason);
-               }
-               else
-               {
-                       sendto_realops_snomask(SNO_GENERAL, L_ALL,
-                                       "%s added K-Line for [%s@%s] [%s|%s]",
-                                       get_oper_name(source_p), user,
-                                       host, reason, oper_reason);
-                       ilog(L_KLINE, "K %s 0 %s %s %s|%s",
-                               get_oper_name(source_p), user, host,
-                               reason, oper_reason);
-               }
-
-               sendto_one_notice(source_p, ":Added K-Line [%s@%s]",
-                                 user, host);
-       }
-       else if(type == DLINE_TYPE)
-       {
-               if(EmptyString(oper_reason))
-               {
-                       sendto_realops_snomask(SNO_GENERAL, L_ALL,
-                                       "%s added D-Line for [%s] [%s]",
-                                       get_oper_name(source_p), host, reason);
-                       ilog(L_KLINE, "D %s 0 %s %s",
-                               get_oper_name(source_p), host, reason);
-               }
-               else
-               {
-                       sendto_realops_snomask(SNO_GENERAL, L_ALL,
-                                       "%s added D-Line for [%s] [%s|%s]",
-                                       get_oper_name(source_p), host, 
-                                       reason, oper_reason);
-                       ilog(L_KLINE, "D %s 0 %s %s|%s",
-                               get_oper_name(source_p), host, 
-                               reason, oper_reason);
-               }
-
-               sendto_one_notice(source_p, ":Added D-Line [%s] to %s", host, filename);
-
-       }
-       else if(type == RESV_TYPE)
-       {
-               sendto_realops_snomask(SNO_GENERAL, L_ALL,
-                               "%s added RESV for [%s] [%s]",
-                               get_oper_name(source_p), host, reason);
-               ilog(L_KLINE, "R %s 0 %s %s",
-                       get_oper_name(source_p), host, reason);
-
-               sendto_one_notice(source_p, ":Added RESV for [%s] [%s]",
-                                 host, reason);
-       }
-
-       if((out = fopen(filename, "a")) == NULL)
-       {
-               sendto_realops_snomask(SNO_GENERAL, L_ALL, "*** Problem opening %s ", filename);
-               sendto_one_notice(source_p, ":*** Problem opening file, added temporarily only");
-               return;
-       }
-
-       if(oper_reason == NULL)
-               oper_reason = "";
-
-       if(type == KLINE_TYPE)
-       {
-               rb_snprintf(buffer, sizeof(buffer),
-                          "\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",%ld\n",
-                          user, host, reason, oper_reason, current_date,
-                          get_oper_name(source_p), (long int)rb_current_time());
-       }
-       else if(type == DLINE_TYPE)
-       {
-               rb_snprintf(buffer, sizeof(buffer),
-                          "\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",%ld\n", host,
-                          reason, oper_reason, current_date, get_oper_name(source_p), (long int)rb_current_time());
-       }
-       else if(type == RESV_TYPE)
-       {
-               rb_snprintf(buffer, sizeof(buffer), "\"%s\",\"%s\",\"%s\",%ld\n",
-                          host, reason, get_oper_name(source_p), (long int)rb_current_time());
-       }
-
-       if(fputs(buffer, out) == -1)
-       {
-               sendto_realops_snomask(SNO_GENERAL, L_ALL, "*** Problem writing to %s", filename);
-               sendto_one_notice(source_p, ":*** Problem writing to file, added temporarily only");
-               fclose(out);
-               return;
-       }
-
-       if (fclose(out))
-       {
-               sendto_realops_snomask(SNO_GENERAL, L_ALL, "*** Problem writing to %s", filename);
-               sendto_one_notice(source_p, ":*** Problem writing to file, added temporarily only");
-               return;
-       }
-}
-
-/* get_conf_name
- *
- * inputs       - type of conf file to return name of file for
- * output       - pointer to filename for type of conf
- * side effects - none
- */
-const char *
-get_conf_name(KlineType type)
-{
-       if(type == CONF_TYPE)
-       {
-               return (ConfigFileEntry.configfile);
-       }
-       else if(type == DLINE_TYPE)
-       {
-               return (ConfigFileEntry.dlinefile);
-       }
-       else if(type == RESV_TYPE)
-       {
-               return (ConfigFileEntry.resvfile);
-       }
-
-       return ConfigFileEntry.klinefile;
-}
-
 /*
  * conf_add_class_to_conf
  * inputs       - pointer to config item