ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/conf_parser.y
(Generate patch)

Comparing ircd-hybrid/trunk/src/conf_parser.y (file contents):
Revision 4499 by michael, Sat Aug 16 18:29:23 2014 UTC vs.
Revision 6161 by michael, Thu Jun 18 10:55:29 2015 UTC

# Line 1 | Line 1
1   /*
2   *  ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd)
3   *
4 < *  Copyright (c) 2000-2014 ircd-hybrid development team
4 > *  Copyright (c) 2000-2015 ircd-hybrid development team
5   *
6   *  This program is free software; you can redistribute it and/or modify
7   *  it under the terms of the GNU General Public License as published by
# Line 15 | Line 15
15   *
16   *  You should have received a copy of the GNU General Public License
17   *  along with this program; if not, write to the Free Software
18 < *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
18 > *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
19   *  USA
20   */
21  
# Line 27 | Line 27
27  
28   %{
29  
30 #define YY_NO_UNPUT
30   #include <sys/types.h>
31   #include <string.h>
32  
# Line 37 | Line 36
36   #include "list.h"
37   #include "conf.h"
38   #include "conf_class.h"
39 + #include "conf_pseudo.h"
40   #include "event.h"
41 + #include "id.h"
42   #include "log.h"
43   #include "client.h"     /* for UMODE_ALL only */
44   #include "irc_string.h"
# Line 76 | Line 77 | static struct
77    {
78      char buf[IRCD_BUFSIZE];
79    } name,
80 +    nick,
81      user,
82      host,
83      addr,
# Line 85 | Line 87 | static struct
87      cert,
88      rpass,
89      spass,
90 <    class;
90 >    whois,
91 >    class,
92 >    target,
93 >    prepend,
94 >    command;
95  
96    struct
97    {
# Line 116 | Line 122 | static struct
122   static void
123   reset_block_state(void)
124   {
125 <  dlink_node *ptr = NULL, *ptr_next = NULL;
125 >  dlink_node *node = NULL, *node_next = NULL;
126  
127 <  DLINK_FOREACH_SAFE(ptr, ptr_next, block_state.mask.list.head)
127 >  DLINK_FOREACH_SAFE(node, node_next, block_state.mask.list.head)
128    {
129 <    MyFree(ptr->data);
130 <    dlinkDelete(ptr, &block_state.mask.list);
131 <    free_dlink_node(ptr);
129 >    MyFree(node->data);
130 >    dlinkDelete(node, &block_state.mask.list);
131 >    free_dlink_node(node);
132    }
133  
134 <  DLINK_FOREACH_SAFE(ptr, ptr_next, block_state.leaf.list.head)
134 >  DLINK_FOREACH_SAFE(node, node_next, block_state.leaf.list.head)
135    {
136 <    MyFree(ptr->data);
137 <    dlinkDelete(ptr, &block_state.leaf.list);
138 <    free_dlink_node(ptr);
136 >    MyFree(node->data);
137 >    dlinkDelete(node, &block_state.leaf.list);
138 >    free_dlink_node(node);
139    }
140  
141 <  DLINK_FOREACH_SAFE(ptr, ptr_next, block_state.hub.list.head)
141 >  DLINK_FOREACH_SAFE(node, node_next, block_state.hub.list.head)
142    {
143 <    MyFree(ptr->data);
144 <    dlinkDelete(ptr, &block_state.hub.list);
145 <    free_dlink_node(ptr);
143 >    MyFree(node->data);
144 >    dlinkDelete(node, &block_state.hub.list);
145 >    free_dlink_node(node);
146    }
147  
148    memset(&block_state, 0, sizeof(block_state));
# Line 168 | Line 174 | reset_block_state(void)
174   %token  CONNECTFREQ
175   %token  CYCLE_ON_HOST_CHANGE
176   %token  DEFAULT_FLOODCOUNT
177 + %token  DEFAULT_JOIN_FLOOD_COUNT
178 + %token  DEFAULT_JOIN_FLOOD_TIME
179 + %token  DEFAULT_MAX_CLIENTS
180   %token  DEFAULT_SPLIT_SERVER_COUNT
181   %token  DEFAULT_SPLIT_USER_COUNT
182   %token  DENY
# Line 176 | Line 185 | reset_block_state(void)
185   %token  DISABLE_AUTH
186   %token  DISABLE_FAKE_CHANNELS
187   %token  DISABLE_REMOTE_COMMANDS
188 + %token  DLINE_MIN_CIDR
189 + %token  DLINE_MIN_CIDR6
190   %token  DOTS_IN_IDENT
180 %token  EGDPOOL_PATH
191   %token  EMAIL
192   %token  ENCRYPTED
193   %token  EXCEED_LIMIT
# Line 186 | Line 196 | reset_block_state(void)
196   %token  FLATTEN_LINKS
197   %token  GECOS
198   %token  GENERAL
189 %token  GLINE
190 %token  GLINE_DURATION
191 %token  GLINE_ENABLE
192 %token  GLINE_EXEMPT
193 %token  GLINE_MIN_CIDR
194 %token  GLINE_MIN_CIDR6
195 %token  GLINE_REQUEST_DURATION
196 %token  GLOBAL_KILL
197 %token  HAVENT_READ_CONF
199   %token  HIDDEN
200   %token  HIDDEN_NAME
201   %token  HIDE_CHANS
# Line 203 | Line 204 | reset_block_state(void)
204   %token  HIDE_SERVER_IPS
205   %token  HIDE_SERVERS
206   %token  HIDE_SERVICES
206 %token  HIDE_SPOOF_IPS
207   %token  HOST
208   %token  HUB
209   %token  HUB_MASK
# Line 215 | Line 215 | reset_block_state(void)
215   %token  IRCD_AUTH
216   %token  IRCD_FLAGS
217   %token  IRCD_SID
218 %token  JOIN_FLOOD_COUNT
219 %token  JOIN_FLOOD_TIME
218   %token  KILL
219   %token  KILL_CHASE_TIME_LIMIT
220   %token  KLINE
221   %token  KLINE_EXEMPT
222 + %token  KLINE_MIN_CIDR
223 + %token  KLINE_MIN_CIDR6
224   %token  KNOCK_CLIENT_COUNT
225   %token  KNOCK_CLIENT_TIME
226   %token  KNOCK_DELAY_CHANNEL
# Line 303 | Line 303 | reset_block_state(void)
303   %token  STATS_E_DISABLED
304   %token  STATS_I_OPER_ONLY
305   %token  STATS_K_OPER_ONLY
306 + %token  STATS_M_OPER_ONLY
307   %token  STATS_O_OPER_ONLY
308   %token  STATS_P_OPER_ONLY
309   %token  STATS_U_OPER_ONLY
# Line 310 | Line 311 | reset_block_state(void)
311   %token  T_BOTS
312   %token  T_CALLERID
313   %token  T_CCONN
314 + %token  T_COMMAND
315   %token  T_CLUSTER
316   %token  T_DEAF
317   %token  T_DEBUG
# Line 324 | Line 326 | reset_block_state(void)
326   %token  T_IPV6
327   %token  T_LOCOPS
328   %token  T_LOG
327 %token  T_MAX_CLIENTS
329   %token  T_NCHANGE
330   %token  T_NONONREG
331 + %token  T_OPME
332 + %token  T_PREPEND
333 + %token  T_PSEUDO
334   %token  T_RECVQ
335   %token  T_REJ
336   %token  T_RESTART
337   %token  T_SERVER
338   %token  T_SERVICE
335 %token  T_SERVICES_NAME
339   %token  T_SERVNOTICE
340   %token  T_SET
341   %token  T_SHARED
# Line 342 | Line 345 | reset_block_state(void)
345   %token  T_SPY
346   %token  T_SSL
347   %token  T_SSL_CIPHER_LIST
348 + %token  T_TARGET
349   %token  T_UMODES
350   %token  T_UNAUTH
351   %token  T_UNDLINE
# Line 356 | Line 360 | reset_block_state(void)
360   %token  THROTTLE_TIME
361   %token  TKLINE_EXPIRE_NOTICES
362   %token  TMASKED
359 %token  TRUE_NO_OPER_FLOOD
363   %token  TS_MAX_DELTA
364   %token  TS_WARN_DELTA
365   %token  TWODOTS
366   %token  TYPE
367   %token  UNKLINE
365 %token  USE_EGD
368   %token  USE_LOGGING
369   %token  USER
370   %token  VHOST
371   %token  VHOST6
372   %token  WARN_NO_CONNECT_BLOCK
373 + %token  WHOIS
374   %token  XLINE
375 + %token  XLINE_EXEMPT
376  
377   %type  <string> QSTRING
378   %type  <number> NUMBER
# Line 403 | Line 407 | conf_item:        admin_entry
407                  | gecos_entry
408                  | modules_entry
409                  | motd_entry
410 +                | pseudo_entry
411                  | error ';'
412                  | error '}'
413          ;
# Line 458 | Line 463 | serverinfo_item:        serverinfo_name
463                          serverinfo_description |
464                          serverinfo_network_name |
465                          serverinfo_network_desc |
466 <                        serverinfo_max_clients |
466 >                        serverinfo_default_max_clients |
467                          serverinfo_max_nick_length |
468                          serverinfo_max_topic_length |
469                          serverinfo_ssl_dh_param_file |
# Line 483 | Line 488 | serverinfo_ssl_certificate_file: SSL_CER
488        break;
489      }
490  
491 <    if (SSL_CTX_use_certificate_file(ConfigServerInfo.server_ctx, yylval.string,
492 <                                     SSL_FILETYPE_PEM) <= 0 ||
488 <        SSL_CTX_use_certificate_file(ConfigServerInfo.client_ctx, yylval.string,
489 <                                     SSL_FILETYPE_PEM) <= 0)
491 >    if (SSL_CTX_use_certificate_chain_file(ConfigServerInfo.server_ctx, yylval.string) <= 0 ||
492 >        SSL_CTX_use_certificate_chain_file(ConfigServerInfo.client_ctx, yylval.string) <= 0)
493      {
494        report_crypto_errors();
495        conf_error_report("Could not open/read certificate file");
# Line 626 | Line 629 | serverinfo_ssl_message_digest_algorithm:
629   serverinfo_ssl_dh_elliptic_curve: SSL_DH_ELLIPTIC_CURVE '=' QSTRING ';'
630   {
631   #ifdef HAVE_LIBCRYPTO
632 < #if OPENSSL_VERSION_NUMBER >= 0x1000005FL && !defined(OPENSSL_NO_ECDH)
632 > #if OPENSSL_VERSION_NUMBER >= 0x009080FFL && !defined(OPENSSL_NO_ECDH)
633    int nid = 0;
634    EC_KEY *key = NULL;
635  
# Line 634 | Line 637 | serverinfo_ssl_dh_elliptic_curve: SSL_DH
637    {
638      if ((nid = OBJ_sn2nid(yylval.string)) == 0)
639      {
640 <        conf_error_report("Ignoring serverinfo::serverinfo_ssl_dh_elliptic_curve -- unknown curve name");
640 >        conf_error_report("Ignoring serverinfo::ssl_dh_elliptic_curve -- unknown curve name");
641          break;
642      }
643  
644      if ((key = EC_KEY_new_by_curve_name(nid)) == NULL)
645      {
646 <      conf_error_report("Ignoring serverinfo::serverinfo_ssl_dh_elliptic_curve -- could not create curve");
646 >      conf_error_report("Ignoring serverinfo::ssl_dh_elliptic_curve -- could not create curve");
647        break;
648      }
649  
# Line 687 | Line 690 | serverinfo_description: DESCRIPTION '='
690    {
691      MyFree(ConfigServerInfo.description);
692      ConfigServerInfo.description = xstrdup(yylval.string);
693 +    strlcpy(me.info, ConfigServerInfo.description, sizeof(me.info));
694    }
695   };
696  
# Line 769 | Line 773 | serverinfo_vhost6: VHOST6 '=' QSTRING ';
773    }
774   };
775  
776 < serverinfo_max_clients: T_MAX_CLIENTS '=' NUMBER ';'
776 > serverinfo_default_max_clients: DEFAULT_MAX_CLIENTS '=' NUMBER ';'
777   {
778    if (conf_parser_ctx.pass != 2)
779      break;
# Line 780 | Line 784 | serverinfo_max_clients: T_MAX_CLIENTS '=
784  
785      snprintf(buf, sizeof(buf), "MAXCLIENTS too low, setting to %d", MAXCLIENTS_MIN);
786      conf_error_report(buf);
787 <    ConfigServerInfo.max_clients = MAXCLIENTS_MIN;
787 >    ConfigServerInfo.default_max_clients = MAXCLIENTS_MIN;
788    }
789    else if ($3 > MAXCLIENTS_MAX)
790    {
# Line 788 | Line 792 | serverinfo_max_clients: T_MAX_CLIENTS '=
792  
793      snprintf(buf, sizeof(buf), "MAXCLIENTS too high, setting to %d", MAXCLIENTS_MAX);
794      conf_error_report(buf);
795 <    ConfigServerInfo.max_clients = MAXCLIENTS_MAX;
795 >    ConfigServerInfo.default_max_clients = MAXCLIENTS_MAX;
796    }
797    else
798 <    ConfigServerInfo.max_clients = $3;
798 >    ConfigServerInfo.default_max_clients = $3;
799   };
800  
801   serverinfo_max_nick_length: MAX_NICK_LENGTH '=' NUMBER ';'
# Line 891 | Line 895 | motd_entry: MOTD
895      reset_block_state();
896   } '{' motd_items '}' ';'
897   {
898 <  dlink_node *ptr = NULL;
898 >  dlink_node *node = NULL;
899  
900    if (conf_parser_ctx.pass != 2)
901      break;
# Line 899 | Line 903 | motd_entry: MOTD
903    if (!block_state.file.buf[0])
904      break;
905  
906 <  DLINK_FOREACH(ptr, block_state.mask.list.head)
907 <    motd_add(ptr->data, block_state.file.buf);
906 >  DLINK_FOREACH(node, block_state.mask.list.head)
907 >    motd_add(node->data, block_state.file.buf);
908   };
909  
910   motd_items: motd_items motd_item | motd_item;
# Line 919 | Line 923 | motd_file: T_FILE '=' QSTRING ';'
923   };
924  
925   /***************************************************************************
926 + * pseudo section
927 + ***************************************************************************/
928 + pseudo_entry: T_PSEUDO
929 + {
930 +  if (conf_parser_ctx.pass == 2)
931 +    reset_block_state();
932 + } '{' pseudo_items '}' ';'
933 + {
934 +  if (conf_parser_ctx.pass != 2)
935 +    break;
936 +
937 +  if (!block_state.command.buf[0] ||
938 +      !block_state.name.buf[0] ||
939 +      !block_state.nick.buf[0] ||
940 +      !block_state.host.buf[0])
941 +    break;
942 +
943 +  pseudo_register(block_state.name.buf, block_state.nick.buf, block_state.host.buf,
944 +                  block_state.prepend.buf, block_state.command.buf);
945 + };
946 +
947 + pseudo_items: pseudo_items pseudo_item | pseudo_item;
948 + pseudo_item:  pseudo_command | pseudo_prepend | pseudo_name | pseudo_target | error ';' ;
949 +
950 + pseudo_command: T_COMMAND '=' QSTRING ';'
951 + {
952 +  if (conf_parser_ctx.pass == 2)
953 +    strlcpy(block_state.command.buf, yylval.string, sizeof(block_state.command.buf));
954 + };
955 +
956 + pseudo_name: NAME '=' QSTRING ';'
957 + {
958 +  if (conf_parser_ctx.pass == 2)
959 +    strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf));
960 + };
961 +
962 + pseudo_prepend: T_PREPEND '=' QSTRING ';'
963 + {
964 +  if (conf_parser_ctx.pass == 2)
965 +    strlcpy(block_state.prepend.buf, yylval.string, sizeof(block_state.prepend.buf));
966 + };
967 +
968 + pseudo_target: T_TARGET '=' QSTRING ';'
969 + {
970 +  if (conf_parser_ctx.pass == 2)
971 +  {
972 +    struct split_nuh_item nuh;
973 +
974 +    nuh.nuhmask  = yylval.string;
975 +    nuh.nickptr  = NULL;
976 +    nuh.userptr  = block_state.nick.buf;
977 +    nuh.hostptr  = block_state.host.buf;
978 +    nuh.nicksize = 0;
979 +    nuh.usersize = sizeof(block_state.nick.buf);
980 +    nuh.hostsize = sizeof(block_state.host.buf);
981 +
982 +    split_nuh(&nuh);
983 +  }
984 + };
985 +
986 + /***************************************************************************
987   *  section logging
988   ***************************************************************************/
989   logging_entry:          T_LOG  '{' logging_items '}' ';' ;
# Line 984 | Line 1049 | logging_file_type_item:  USER
1049   {
1050    if (conf_parser_ctx.pass == 2)
1051      block_state.type.value = LOG_TYPE_OPER;
987 } | GLINE
988 {
989  if (conf_parser_ctx.pass == 2)
990    block_state.type.value = LOG_TYPE_GLINE;
1052   } | XLINE
1053   {
1054    if (conf_parser_ctx.pass == 2)
# Line 1027 | Line 1088 | oper_entry: OPERATOR
1088    block_state.flags.value |= CONF_FLAGS_ENCRYPTED;
1089   } '{' oper_items '}' ';'
1090   {
1091 <  dlink_node *ptr = NULL;
1091 >  dlink_node *node = NULL;
1092  
1093    if (conf_parser_ctx.pass != 2)
1094      break;
# Line 1043 | Line 1104 | oper_entry: OPERATOR
1104      break;
1105   #endif
1106  
1107 <  DLINK_FOREACH(ptr, block_state.mask.list.head)
1107 >  DLINK_FOREACH(node, block_state.mask.list.head)
1108    {
1109      struct MaskItem *conf = NULL;
1110      struct split_nuh_item nuh;
1111  
1112 <    nuh.nuhmask  = ptr->data;
1112 >    nuh.nuhmask  = node->data;
1113      nuh.nickptr  = NULL;
1114      nuh.userptr  = block_state.user.buf;
1115      nuh.hostptr  = block_state.host.buf;
# Line 1068 | Line 1129 | oper_entry: OPERATOR
1129      if (block_state.rpass.buf[0])
1130        conf->passwd = xstrdup(block_state.rpass.buf);
1131  
1132 +    if (block_state.whois.buf[0])
1133 +      conf->whois = xstrdup(block_state.whois.buf);
1134 +
1135      conf->flags = block_state.flags.value;
1136      conf->modes = block_state.modes.value;
1137      conf->port  = block_state.port.value;
# Line 1108 | Line 1172 | oper_items:     oper_items oper_item | o
1172   oper_item:      oper_name |
1173                  oper_user |
1174                  oper_password |
1175 +                oper_whois |
1176                  oper_umodes |
1177                  oper_class |
1178                  oper_encrypted |
# Line 1135 | Line 1200 | oper_password: PASSWORD '=' QSTRING ';'
1200      strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf));
1201   };
1202  
1203 + oper_whois: WHOIS '=' QSTRING ';'
1204 + {
1205 +  if (conf_parser_ctx.pass == 2)
1206 +    strlcpy(block_state.whois.buf, yylval.string, sizeof(block_state.whois.buf));
1207 + };
1208 +
1209   oper_encrypted: ENCRYPTED '=' TBOOL ';'
1210   {
1211    if (conf_parser_ctx.pass != 2)
# Line 1327 | Line 1398 | oper_flags_item: KILL ':' REMOTE
1398   {
1399    if (conf_parser_ctx.pass == 2)
1400      block_state.port.value |= OPER_FLAG_UNXLINE;
1330 } | GLINE
1331 {
1332  if (conf_parser_ctx.pass == 2)
1333    block_state.port.value |= OPER_FLAG_GLINE;
1401   } | DIE
1402   {
1403    if (conf_parser_ctx.pass == 2)
# Line 1371 | Line 1438 | oper_flags_item: KILL ':' REMOTE
1438   {
1439    if (conf_parser_ctx.pass == 2)
1440      block_state.port.value |= OPER_FLAG_MODULE;
1441 + } | T_OPME
1442 + {
1443 +  if (conf_parser_ctx.pass == 2)
1444 +    block_state.port.value |= OPER_FLAG_OPME;
1445   };
1446  
1447  
# Line 1427 | Line 1498 | class_entry: CLASS
1498    class->min_idle = block_state.min_idle.value;
1499    class->max_idle = block_state.max_idle.value;
1500  
1501 <  if (class->number_per_cidr && block_state.number_per_cidr.value)
1431 <    if ((class->cidr_bitlen_ipv4 && block_state.cidr_bitlen_ipv4.value) ||
1432 <        (class->cidr_bitlen_ipv6 && block_state.cidr_bitlen_ipv6.value))
1433 <      if ((class->cidr_bitlen_ipv4 != block_state.cidr_bitlen_ipv4.value) ||
1434 <          (class->cidr_bitlen_ipv6 != block_state.cidr_bitlen_ipv6.value))
1435 <        rebuild_cidr_list(class);
1501 >  rebuild_cidr_list(class);
1502  
1503    class->cidr_bitlen_ipv4 = block_state.cidr_bitlen_ipv4.value;
1504    class->cidr_bitlen_ipv6 = block_state.cidr_bitlen_ipv6.value;
# Line 1666 | Line 1732 | auth_entry: IRCD_AUTH
1732      reset_block_state();
1733   } '{' auth_items '}' ';'
1734   {
1735 <  dlink_node *ptr = NULL;
1735 >  dlink_node *node = NULL;
1736  
1737    if (conf_parser_ctx.pass != 2)
1738      break;
1739  
1740 <  DLINK_FOREACH(ptr, block_state.mask.list.head)
1740 >  DLINK_FOREACH(node, block_state.mask.list.head)
1741    {
1742      struct MaskItem *conf = NULL;
1743      struct split_nuh_item nuh;
1744  
1745 <    nuh.nuhmask  = ptr->data;
1745 >    nuh.nuhmask  = node->data;
1746      nuh.nickptr  = NULL;
1747      nuh.userptr  = block_state.user.buf;
1748      nuh.hostptr  = block_state.host.buf;
# Line 1761 | Line 1827 | auth_flags_item: SPOOF_NOTICE
1827   {
1828    if (conf_parser_ctx.pass == 2)
1829      block_state.flags.value |= CONF_FLAGS_EXEMPTKLINE;
1830 + } | XLINE_EXEMPT
1831 + {
1832 +  if (conf_parser_ctx.pass == 2)
1833 +    block_state.flags.value |= CONF_FLAGS_EXEMPTXLINE;
1834   } | NEED_IDENT
1835   {
1836    if (conf_parser_ctx.pass == 2)
# Line 1773 | Line 1843 | auth_flags_item: SPOOF_NOTICE
1843   {
1844    if (conf_parser_ctx.pass == 2)
1845      block_state.flags.value |= CONF_FLAGS_NO_TILDE;
1776 } | GLINE_EXEMPT
1777 {
1778  if (conf_parser_ctx.pass == 2)
1779    block_state.flags.value |= CONF_FLAGS_EXEMPTGLINE;
1846   } | RESV_EXEMPT
1847   {
1848    if (conf_parser_ctx.pass == 2)
# Line 2461 | Line 2527 | general_entry: GENERAL
2527   general_items:      general_items general_item | general_item;
2528   general_item:       general_away_count |
2529                      general_away_time |
2464                    general_hide_spoof_ips |
2530                      general_ignore_bogus_ts |
2531                      general_failed_oper_notice |
2532                      general_anti_nick_flood |
# Line 2475 | Line 2540 | general_item:       general_away_count |
2540                      general_invisible_on_connect |
2541                      general_warn_no_connect_block |
2542                      general_dots_in_ident |
2478                    general_stats_o_oper_only |
2479                    general_stats_k_oper_only |
2480                    general_pace_wait |
2543                      general_stats_i_oper_only |
2544 <                    general_pace_wait_simple |
2544 >                    general_stats_k_oper_only |
2545 >                    general_stats_m_oper_only |
2546 >                    general_stats_o_oper_only |
2547                      general_stats_P_oper_only |
2548                      general_stats_u_oper_only |
2549 +                    general_pace_wait |
2550 +                    general_pace_wait_simple |
2551                      general_short_motd |
2552                      general_no_oper_flood |
2487                    general_true_no_oper_flood |
2553                      general_oper_pass_resv |
2554                      general_oper_only_umodes |
2555                      general_max_targets |
# Line 2496 | Line 2561 | general_item:       general_away_count |
2561                      general_min_nonwildcard_simple |
2562                      general_throttle_count |
2563                      general_throttle_time |
2499                    general_havent_read_conf |
2564                      general_ping_cookie |
2565                      general_disable_auth |
2566                      general_tkline_expire_notices |
2567 <                    general_gline_enable |
2568 <                    general_gline_duration |
2569 <                    general_gline_request_duration |
2570 <                    general_gline_min_cidr |
2507 <                    general_gline_min_cidr6 |
2567 >                    general_dline_min_cidr |
2568 >                    general_dline_min_cidr6 |
2569 >                    general_kline_min_cidr |
2570 >                    general_kline_min_cidr6 |
2571                      general_stats_e_disabled |
2572                      general_max_watch |
2510                    general_services_name |
2573                      general_cycle_on_host_change |
2574                      error;
2575  
# Line 2533 | Line 2595 | general_cycle_on_host_change: CYCLE_ON_H
2595      ConfigGeneral.cycle_on_host_change = yylval.number;
2596   };
2597  
2598 < general_gline_enable: GLINE_ENABLE '=' TBOOL ';'
2598 > general_dline_min_cidr: DLINE_MIN_CIDR '=' NUMBER ';'
2599   {
2600 <  if (conf_parser_ctx.pass == 2)
2539 <    ConfigGeneral.glines = yylval.number;
2600 >  ConfigGeneral.dline_min_cidr = $3;
2601   };
2602  
2603 < general_gline_duration: GLINE_DURATION '=' timespec ';'
2603 > general_dline_min_cidr6: DLINE_MIN_CIDR6 '=' NUMBER ';'
2604   {
2605 <  if (conf_parser_ctx.pass == 2)
2545 <    ConfigGeneral.gline_time = $3;
2605 >  ConfigGeneral.dline_min_cidr6 = $3;
2606   };
2607  
2608 < general_gline_request_duration: GLINE_REQUEST_DURATION '=' timespec ';'
2608 > general_kline_min_cidr: KLINE_MIN_CIDR '=' NUMBER ';'
2609   {
2610 <  if (conf_parser_ctx.pass == 2)
2551 <    ConfigGeneral.gline_request_time = $3;
2610 >  ConfigGeneral.kline_min_cidr = $3;
2611   };
2612  
2613 < general_gline_min_cidr: GLINE_MIN_CIDR '=' NUMBER ';'
2613 > general_kline_min_cidr6: KLINE_MIN_CIDR6 '=' NUMBER ';'
2614   {
2615 <  ConfigGeneral.gline_min_cidr = $3;
2557 < };
2558 <
2559 < general_gline_min_cidr6: GLINE_MIN_CIDR6 '=' NUMBER ';'
2560 < {
2561 <  ConfigGeneral.gline_min_cidr6 = $3;
2615 >  ConfigGeneral.kline_min_cidr6 = $3;
2616   };
2617  
2618   general_tkline_expire_notices: TKLINE_EXPIRE_NOTICES '=' TBOOL ';'
# Line 2571 | Line 2625 | general_kill_chase_time_limit: KILL_CHAS
2625    ConfigGeneral.kill_chase_time_limit = $3;
2626   };
2627  
2574 general_hide_spoof_ips: HIDE_SPOOF_IPS '=' TBOOL ';'
2575 {
2576  ConfigGeneral.hide_spoof_ips = yylval.number;
2577 };
2578
2628   general_ignore_bogus_ts: IGNORE_BOGUS_TS '=' TBOOL ';'
2629   {
2630    ConfigGeneral.ignore_bogus_ts = yylval.number;
# Line 2622 | Line 2671 | general_ts_max_delta: TS_MAX_DELTA '=' t
2671      ConfigGeneral.ts_max_delta = $3;
2672   };
2673  
2625 general_havent_read_conf: HAVENT_READ_CONF '=' NUMBER ';'
2626 {
2627  if (($3 > 0) && conf_parser_ctx.pass == 1)
2628  {
2629    ilog(LOG_TYPE_IRCD, "You haven't read your config file properly.");
2630    ilog(LOG_TYPE_IRCD, "There is a line in the example conf that will kill your server if not removed.");
2631    ilog(LOG_TYPE_IRCD, "Consider actually reading/editing the conf file, and removing this line.");
2632    exit(0);
2633  }
2634 };
2635
2674   general_invisible_on_connect: INVISIBLE_ON_CONNECT '=' TBOOL ';'
2675   {
2676    ConfigGeneral.invisible_on_connect = yylval.number;
# Line 2648 | Line 2686 | general_stats_e_disabled: STATS_E_DISABL
2686    ConfigGeneral.stats_e_disabled = yylval.number;
2687   };
2688  
2689 + general_stats_m_oper_only: STATS_M_OPER_ONLY '=' TBOOL ';'
2690 + {
2691 +  ConfigGeneral.stats_m_oper_only = yylval.number;
2692 + };
2693 +
2694   general_stats_o_oper_only: STATS_O_OPER_ONLY '=' TBOOL ';'
2695   {
2696    ConfigGeneral.stats_o_oper_only = yylval.number;
# Line 2709 | Line 2752 | general_no_oper_flood: NO_OPER_FLOOD '='
2752    ConfigGeneral.no_oper_flood = yylval.number;
2753   };
2754  
2712 general_true_no_oper_flood: TRUE_NO_OPER_FLOOD '=' TBOOL ';'
2713 {
2714  ConfigGeneral.true_no_oper_flood = yylval.number;
2715 };
2716
2755   general_oper_pass_resv: OPER_PASS_RESV '=' TBOOL ';'
2756   {
2757    ConfigGeneral.oper_pass_resv = yylval.number;
# Line 2729 | Line 2767 | general_max_targets: MAX_TARGETS '=' NUM
2767    ConfigGeneral.max_targets = $3;
2768   };
2769  
2732 general_services_name: T_SERVICES_NAME '=' QSTRING ';'
2733 {
2734  if (conf_parser_ctx.pass == 2 && valid_servname(yylval.string))
2735  {
2736    MyFree(ConfigGeneral.service_name);
2737    ConfigGeneral.service_name = xstrdup(yylval.string);
2738  }
2739 };
2740
2770   general_ping_cookie: PING_COOKIE '=' TBOOL ';'
2771   {
2772    ConfigGeneral.ping_cookie = yylval.number;
# Line 2934 | Line 2963 | channel_item:       channel_max_bans |
2963                      channel_default_split_server_count |
2964                      channel_no_create_on_split |
2965                      channel_no_join_on_split |
2966 <                    channel_jflood_count |
2967 <                    channel_jflood_time |
2966 >                    channel_default_join_flood_count |
2967 >                    channel_default_join_flood_time |
2968                      channel_disable_fake_channels |
2969                      error;
2970  
# Line 2999 | Line 3028 | channel_no_join_on_split: NO_JOIN_ON_SPL
3028    ConfigChannel.no_join_on_split = yylval.number;
3029   };
3030  
3031 < channel_jflood_count: JOIN_FLOOD_COUNT '=' NUMBER ';'
3031 > channel_default_join_flood_count: DEFAULT_JOIN_FLOOD_COUNT '=' NUMBER ';'
3032   {
3033 <  GlobalSetOptions.joinfloodcount = yylval.number;
3033 >  ConfigChannel.default_join_flood_count = yylval.number;
3034   };
3035  
3036 < channel_jflood_time: JOIN_FLOOD_TIME '=' timespec ';'
3036 > channel_default_join_flood_time: DEFAULT_JOIN_FLOOD_TIME '=' timespec ';'
3037   {
3038 <  GlobalSetOptions.joinfloodtime = $3;
3038 >  ConfigChannel.default_join_flood_time = $3;
3039   };
3040  
3041   /***************************************************************************

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)