]> jfr.im git - solanum.git/blobdiff - modules/m_info.c
Port ircd-seven banfowards to charybdis.
[solanum.git] / modules / m_info.c
index b8b0ee722cb60009667ef7e92d459f387cc0727a..456b846e564386bab092306aa133dd6aa5bbb9ed 100644 (file)
@@ -29,7 +29,7 @@
 #include "channel.h"
 #include "client.h"
 #include "common.h"
-#include "irc_string.h"
+#include "match.h"
 #include "ircd.h"
 #include "hook.h"
 #include "numeric.h"
@@ -122,17 +122,47 @@ static struct InfoStruct info_table[] = {
                "Prepend 'Client Exit:' to user QUIT messages"
        },
        {
-               "client_flood",
+               "client_flood_max_lines",
                OUTPUT_DECIMAL,
-               &ConfigFileEntry.client_flood,
+               &ConfigFileEntry.client_flood_max_lines,
                "Number of lines before a client Excess Flood's",
        },
+       {
+               "client_flood_burst_rate",
+               OUTPUT_DECIMAL,
+               &ConfigFileEntry.client_flood_burst_rate,
+               "Rate at which burst lines are processed",
+       },
+       {
+               "client_flood_burst_max",
+               OUTPUT_DECIMAL,
+               &ConfigFileEntry.client_flood_burst_max,
+               "Number of lines to permit at client_flood_burst_rate",
+       },
+       {
+               "client_flood_message_num",
+               OUTPUT_DECIMAL,
+               &ConfigFileEntry.client_flood_message_num,
+               "Number of messages to allow per client_flood_message_time outside of burst",
+       },
+       {
+               "client_flood_message_time",
+               OUTPUT_DECIMAL,
+               &ConfigFileEntry.client_flood_message_time,
+               "Time to allow per client_flood_message_num outside of burst",
+       },
        {
                "connect_timeout",
                OUTPUT_DECIMAL,
                &ConfigFileEntry.connect_timeout,
                "Connect timeout for connections to servers"
        },
+       {
+               "default_ident_timeout",
+               OUTPUT_DECIMAL,
+               &ConfigFileEntry.default_ident_timeout,
+               "Amount of time the server waits for ident responses from clients",
+       },
        {
                "default_floodcount",
                OUTPUT_DECIMAL,
@@ -446,6 +476,18 @@ static struct InfoStruct info_table[] = {
                &ConfigFileEntry.stats_y_oper_only,
                "STATS Y is only shown to operators",
        },
+       {
+               "throttle_count",
+               OUTPUT_DECIMAL,
+               &ConfigFileEntry.throttle_count, 
+               "Connection throttle threshold",
+       },
+       {
+               "throttle_duration",
+               OUTPUT_DECIMAL,
+               &ConfigFileEntry.throttle_duration, 
+               "Connection throttle duration",
+       },
        {
                "tkline_expire_notices",
                OUTPUT_BOOLEAN,
@@ -470,6 +512,12 @@ static struct InfoStruct info_table[] = {
                &ConfigFileEntry.warn_no_nline,
                "Display warning if connecting server lacks N-line"
        },
+       {
+               "use_propagated_bans",
+               OUTPUT_BOOLEAN,
+               &ConfigFileEntry.use_propagated_bans,
+               "KLINE sets fully propagated bans"
+       },
        {
                "default_split_server_count",
                OUTPUT_DECIMAL,
@@ -500,6 +548,12 @@ static struct InfoStruct info_table[] = {
                &ConfigChannel.kick_on_split_riding,
                "Kick users riding splits to join +i or +k channels"
        },
+       {
+               "disable_local_channels",
+               OUTPUT_BOOLEAN_YN,
+               &ConfigChannel.disable_local_channels,
+               "Disable local channels (&channels)"
+       },
        {
                "max_bans",
                OUTPUT_DECIMAL,
@@ -530,6 +584,12 @@ static struct InfoStruct info_table[] = {
                &ConfigChannel.no_join_on_split,
                "Disallow joining channels when split",
        },
+       {
+               "only_ascii_channels",
+               OUTPUT_BOOLEAN_YN,
+               &ConfigChannel.only_ascii_channels,
+               "Controls whether non-ASCII is disabled for JOIN"
+       },
        {
                "use_except",
                OUTPUT_BOOLEAN_YN,
@@ -542,18 +602,18 @@ static struct InfoStruct info_table[] = {
                &ConfigChannel.use_invex,
                "Enable chanmode +I (invite exceptions)",
        },
-       {
-               "use_forward",
-               OUTPUT_BOOLEAN_YN,
-               &ConfigChannel.use_forward,
-               "Enable chanmode +f (channel forwarding)",
-       },
        {
                "use_knock",
                OUTPUT_BOOLEAN_YN,
                &ConfigChannel.use_knock,
                "Enable /KNOCK",
        },
+       {
+               "resv_forcepart",
+               OUTPUT_BOOLEAN_YN,
+               &ConfigChannel.resv_forcepart,
+               "Force-part local users on channel RESV"
+       },
        {
                "disable_hidden",
                OUTPUT_BOOLEAN_YN,
@@ -584,10 +644,9 @@ static struct InfoStruct info_table[] = {
 /* *INDENT-ON* */
 
 /*
-** m_info
-**  parv[0] = sender prefix
-**  parv[1] = servername
-*/
+ ** m_info
+ **  parv[1] = servername
+ */
 static int
 m_info(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
 {
@@ -597,7 +656,7 @@ m_info(struct Client *client_p, struct Client *source_p, int parc, const char *p
        {
                /* safe enough to give this on a local connect only */
                sendto_one(source_p, form_str(RPL_LOAD2HI),
-                          me.name, source_p->name, "INFO");
+                               me.name, source_p->name, "INFO");
                sendto_one_numeric(source_p, RPL_ENDOFINFO, form_str(RPL_ENDOFINFO));
                return 0;
        }
@@ -609,7 +668,6 @@ m_info(struct Client *client_p, struct Client *source_p, int parc, const char *p
 
        info_spy(source_p);
 
-       SetCork(source_p);
        send_info_text(source_p);
        send_birthdate_online_time(source_p);
 
@@ -618,10 +676,9 @@ m_info(struct Client *client_p, struct Client *source_p, int parc, const char *p
 }
 
 /*
-** mo_info
-**  parv[0] = sender prefix
-**  parv[1] = servername
-*/
+ ** mo_info
+ **  parv[1] = servername
+ */
 static int
 mo_info(struct Client *client_p, struct Client *source_p, int parc, const char *parv[])
 {
@@ -631,7 +688,11 @@ mo_info(struct Client *client_p, struct Client *source_p, int parc, const char *
                send_info_text(source_p);
 
                if(IsOper(source_p))
+               {
                        send_conf_options(source_p);
+                       sendto_one_numeric(source_p, RPL_INFO, ":%s",
+                                       rb_lib_version());
+               }
 
                send_birthdate_online_time(source_p);
 
@@ -671,13 +732,14 @@ send_info_text(struct Client *source_p)
 static void
 send_birthdate_online_time(struct Client *source_p)
 {
+       char tbuf[26]; /* this needs to be 26 - see ctime_r manpage */
        sendto_one(source_p, ":%s %d %s :Birth Date: %s, compile # %s",
-                  get_id(&me, source_p), RPL_INFO, 
-                  get_id(source_p, source_p), creation, generation);
+                       get_id(&me, source_p), RPL_INFO, 
+                       get_id(source_p, source_p), creation, generation);
 
        sendto_one(source_p, ":%s %d %s :On-line since %s",
-                  get_id(&me, source_p), RPL_INFO, 
-                  get_id(source_p, source_p), myctime(startup_time));
+                       get_id(&me, source_p), RPL_INFO, 
+                       get_id(source_p, source_p), rb_ctime(startup_time, tbuf, sizeof(tbuf)));
 }
 
 /*
@@ -702,18 +764,18 @@ send_conf_options(struct Client *source_p)
                if(infoptr->intvalue)
                {
                        sendto_one(source_p, ":%s %d %s :%-30s %-5d [%-30s]",
-                                  get_id(&me, source_p), RPL_INFO,
-                                  get_id(source_p, source_p),
-                                  infoptr->name, infoptr->intvalue, 
-                                  infoptr->desc);
+                                       get_id(&me, source_p), RPL_INFO,
+                                       get_id(source_p, source_p),
+                                       infoptr->name, infoptr->intvalue, 
+                                       infoptr->desc);
                }
                else
                {
                        sendto_one(source_p, ":%s %d %s :%-30s %-5s [%-30s]",
-                                  get_id(&me, source_p), RPL_INFO,
-                                  get_id(source_p, source_p),
-                                  infoptr->name, infoptr->strvalue, 
-                                  infoptr->desc);
+                                       get_id(&me, source_p), RPL_INFO,
+                                       get_id(source_p, source_p),
+                                       infoptr->name, infoptr->strvalue, 
+                                       infoptr->desc);
                }
        }
 
@@ -727,95 +789,95 @@ send_conf_options(struct Client *source_p)
                        /*
                         * For "char *" references
                         */
-               case OUTPUT_STRING:
-                       {
-                               char *option = *((char **) info_table[i].option);
-
-                               sendto_one(source_p, ":%s %d %s :%-30s %-5s [%-30s]",
-                                          get_id(&me, source_p), RPL_INFO,
-                                          get_id(source_p, source_p),
-                                          info_table[i].name,
-                                          option ? option : "NONE",
-                                          info_table[i].desc ? info_table[i].desc : "<none>");
-
-                               break;
-                       }
-                       /*
-                        * For "char foo[]" references
-                        */
-               case OUTPUT_STRING_PTR:
-                       {
-                               char *option = (char *) info_table[i].option;
-
-                               sendto_one(source_p, ":%s %d %s :%-30s %-5s [%-30s]",
-                                          get_id(&me, source_p), RPL_INFO,
-                                          get_id(source_p, source_p),
-                                          info_table[i].name,
-                                          EmptyString(option) ? "NONE" : option,
-                                          info_table[i].desc ? info_table[i].desc : "<none>");
-
-                               break;
-                       }
-                       /*
-                        * Output info_table[i].option as a decimal value.
-                        */
-               case OUTPUT_DECIMAL:
-                       {
-                               int option = *((int *) info_table[i].option);
-
-                               sendto_one(source_p, ":%s %d %s :%-30s %-5d [%-30s]",
-                                          get_id(&me, source_p), RPL_INFO,
-                                          get_id(source_p, source_p),
-                                          info_table[i].name,
-                                          option,
-                                          info_table[i].desc ? info_table[i].desc : "<none>");
-
-                               break;
-                       }
-
-                       /*
-                        * Output info_table[i].option as "ON" or "OFF"
-                        */
-               case OUTPUT_BOOLEAN:
-                       {
-                               int option = *((int *) info_table[i].option);
-
-                               sendto_one(source_p, ":%s %d %s :%-30s %-5s [%-30s]",
-                                          get_id(&me, source_p), RPL_INFO,
-                                          get_id(source_p, source_p),
-                                          info_table[i].name,
-                                          option ? "ON" : "OFF",
-                                          info_table[i].desc ? info_table[i].desc : "<none>");
-
-                               break;
-                       }
-                       /*
-                        * Output info_table[i].option as "YES" or "NO"
-                        */
-               case OUTPUT_BOOLEAN_YN:
-                       {
-                               int option = *((int *) info_table[i].option);
-
-                               sendto_one(source_p, ":%s %d %s :%-30s %-5s [%-30s]",
-                                          get_id(&me, source_p), RPL_INFO,
-                                          get_id(source_p, source_p),
-                                          info_table[i].name,
-                                          option ? "YES" : "NO",
-                                          info_table[i].desc ? info_table[i].desc : "<none>");
-
-                               break;
-                       }
-
-               case OUTPUT_BOOLEAN2:
-               {
-                       int option = *((int *) info_table[i].option);
-
-                       sendto_one(source_p, ":%s %d %s :%-30s %-5s [%-30s]",
-                                  me.name, RPL_INFO, source_p->name,
-                                  info_table[i].name,
-                                  option ? ((option == 1) ? "MASK" : "YES") : "NO",
-                                  info_table[i].desc ? info_table[i].desc : "<none>");
-               }               /* switch (info_table[i].output_type) */
+                       case OUTPUT_STRING:
+                               {
+                                       char *option = *((char **) info_table[i].option);
+
+                                       sendto_one(source_p, ":%s %d %s :%-30s %-5s [%-30s]",
+                                                       get_id(&me, source_p), RPL_INFO,
+                                                       get_id(source_p, source_p),
+                                                       info_table[i].name,
+                                                       option ? option : "NONE",
+                                                       info_table[i].desc ? info_table[i].desc : "<none>");
+
+                                       break;
+                               }
+                               /*
+                                * For "char foo[]" references
+                                */
+                       case OUTPUT_STRING_PTR:
+                               {
+                                       char *option = (char *) info_table[i].option;
+
+                                       sendto_one(source_p, ":%s %d %s :%-30s %-5s [%-30s]",
+                                                       get_id(&me, source_p), RPL_INFO,
+                                                       get_id(source_p, source_p),
+                                                       info_table[i].name,
+                                                       EmptyString(option) ? "NONE" : option,
+                                                       info_table[i].desc ? info_table[i].desc : "<none>");
+
+                                       break;
+                               }
+                               /*
+                                * Output info_table[i].option as a decimal value.
+                                */
+                       case OUTPUT_DECIMAL:
+                               {
+                                       int option = *((int *) info_table[i].option);
+
+                                       sendto_one(source_p, ":%s %d %s :%-30s %-5d [%-30s]",
+                                                       get_id(&me, source_p), RPL_INFO,
+                                                       get_id(source_p, source_p),
+                                                       info_table[i].name,
+                                                       option,
+                                                       info_table[i].desc ? info_table[i].desc : "<none>");
+
+                                       break;
+                               }
+
+                               /*
+                                * Output info_table[i].option as "ON" or "OFF"
+                                */
+                       case OUTPUT_BOOLEAN:
+                               {
+                                       int option = *((int *) info_table[i].option);
+
+                                       sendto_one(source_p, ":%s %d %s :%-30s %-5s [%-30s]",
+                                                       get_id(&me, source_p), RPL_INFO,
+                                                       get_id(source_p, source_p),
+                                                       info_table[i].name,
+                                                       option ? "ON" : "OFF",
+                                                       info_table[i].desc ? info_table[i].desc : "<none>");
+
+                                       break;
+                               }
+                               /*
+                                * Output info_table[i].option as "YES" or "NO"
+                                */
+                       case OUTPUT_BOOLEAN_YN:
+                               {
+                                       int option = *((int *) info_table[i].option);
+
+                                       sendto_one(source_p, ":%s %d %s :%-30s %-5s [%-30s]",
+                                                       get_id(&me, source_p), RPL_INFO,
+                                                       get_id(source_p, source_p),
+                                                       info_table[i].name,
+                                                       option ? "YES" : "NO",
+                                                       info_table[i].desc ? info_table[i].desc : "<none>");
+
+                                       break;
+                               }
+
+                       case OUTPUT_BOOLEAN2:
+                               {
+                                       int option = *((int *) info_table[i].option);
+
+                                       sendto_one(source_p, ":%s %d %s :%-30s %-5s [%-30s]",
+                                                       me.name, RPL_INFO, source_p->name,
+                                                       info_table[i].name,
+                                                       option ? ((option == 1) ? "MASK" : "YES") : "NO",
+                                                       info_table[i].desc ? info_table[i].desc : "<none>");
+                               }               /* switch (info_table[i].output_type) */
                }
        }                       /* forloop */