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 9101 by michael, Wed Jan 1 09:58:45 2020 UTC vs.
Revision 9234 by michael, Fri Jan 31 17:38:34 2020 UTC

# Line 111 | Line 111 | static struct
111   static void
112   reset_block_state(void)
113   {
114 <  dlink_node *node = NULL, *node_next = NULL;
114 >  dlink_node *node, *node_next;
115 >  dlink_list *tab[] = { &block_state.mask.list,
116 >                        &block_state.leaf.list, &block_state.hub.list, NULL };
117  
118 <  DLINK_FOREACH_SAFE(node, node_next, block_state.mask.list.head)
118 >  for (dlink_list **list = tab; *list; ++list)
119    {
120 <    xfree(node->data);
121 <    dlinkDelete(node, &block_state.mask.list);
122 <    free_dlink_node(node);
123 <  }
124 <
125 <  DLINK_FOREACH_SAFE(node, node_next, block_state.leaf.list.head)
124 <  {
125 <    xfree(node->data);
126 <    dlinkDelete(node, &block_state.leaf.list);
127 <    free_dlink_node(node);
128 <  }
129 <
130 <  DLINK_FOREACH_SAFE(node, node_next, block_state.hub.list.head)
131 <  {
132 <    xfree(node->data);
133 <    dlinkDelete(node, &block_state.hub.list);
134 <    free_dlink_node(node);
120 >    DLINK_FOREACH_SAFE(node, node_next, (*list)->head)
121 >    {
122 >      xfree(node->data);
123 >      dlinkDelete(node, *list);
124 >      free_dlink_node(node);
125 >    }
126    }
127  
128    memset(&block_state, 0, sizeof(block_state));
# Line 178 | Line 169 | reset_block_state(void)
169   %token  DLINE_MIN_CIDR6
170   %token  DOTS_IN_IDENT
171   %token  EMAIL
172 + %token  ENABLE_EXTBANS
173   %token  ENCRYPTED
174   %token  EXCEED_LIMIT
175   %token  EXEMPT
# Line 283 | Line 275 | reset_block_state(void)
275   %token  SPOOF
276   %token  SPOOF_NOTICE
277   %token  SQUIT
286 %token  SSL_CERTIFICATE_FILE
287 %token  SSL_CERTIFICATE_FINGERPRINT
288 %token  SSL_CONNECTION_REQUIRED
289 %token  SSL_DH_ELLIPTIC_CURVE
290 %token  SSL_DH_PARAM_FILE
291 %token  SSL_MESSAGE_DIGEST_ALGORITHM
278   %token  STATS_E_DISABLED
279   %token  STATS_I_OPER_ONLY
280   %token  STATS_K_OPER_ONLY
# Line 333 | Line 319 | reset_block_state(void)
319   %token  T_SKILL
320   %token  T_SOFTCALLERID
321   %token  T_SPY
336 %token  T_SSL
337 %token  T_SSL_CIPHER_LIST
322   %token  T_TARGET
323 + %token  T_TLS
324   %token  T_UMODES
325   %token  T_UNAUTH
326   %token  T_UNDLINE
# Line 349 | Line 334 | reset_block_state(void)
334   %token  THROTTLE_COUNT
335   %token  THROTTLE_TIME
336   %token  TIMEOUT
337 + %token  TLS_CERTIFICATE_FILE
338 + %token  TLS_CERTIFICATE_FINGERPRINT
339 + %token  TLS_CIPHER_LIST
340 + %token  TLS_CIPHER_SUITES
341 + %token  TLS_CONNECTION_REQUIRED
342 + %token  TLS_DH_PARAM_FILE
343 + %token  TLS_MESSAGE_DIGEST_ALGORITHM
344 + %token  TLS_SUPPORTED_GROUPS
345   %token  TMASKED
346   %token  TS_MAX_DELTA
347   %token  TS_WARN_DELTA
# Line 445 | Line 438 | modules_path: PATH '=' QSTRING ';'
438  
439  
440   /***************************************************************************
441 < * serverinfo {}  section
441 > * serverinfo {} section
442   ***************************************************************************/
443   serverinfo_entry: SERVERINFO '{' serverinfo_items '}' ';';
444  
# Line 458 | Line 451 | serverinfo_item:        serverinfo_name
451                          serverinfo_default_max_clients |
452                          serverinfo_max_nick_length |
453                          serverinfo_max_topic_length |
454 <                        serverinfo_ssl_dh_param_file |
455 <                        serverinfo_ssl_dh_elliptic_curve |
454 >                        serverinfo_tls_dh_param_file |
455 >                        serverinfo_tls_supported_groups |
456                          serverinfo_rsa_private_key_file |
457                          serverinfo_sid |
458 <                        serverinfo_ssl_certificate_file |
459 <                        serverinfo_ssl_cipher_list |
460 <                        serverinfo_ssl_message_digest_algorithm |
458 >                        serverinfo_tls_certificate_file |
459 >                        serverinfo_tls_cipher_list |
460 >                        serverinfo_tls_cipher_suites |
461 >                        serverinfo_tls_message_digest_algorithm |
462                          error ';' ;
463  
464  
465 < serverinfo_ssl_certificate_file: SSL_CERTIFICATE_FILE '=' QSTRING ';'
465 > serverinfo_tls_certificate_file: TLS_CERTIFICATE_FILE '=' QSTRING ';'
466   {
467    if (conf_parser_ctx.pass == 2)
468    {
469 <    xfree(ConfigServerInfo.ssl_certificate_file);
470 <    ConfigServerInfo.ssl_certificate_file = xstrdup(yylval.string);
469 >    xfree(ConfigServerInfo.tls_certificate_file);
470 >    ConfigServerInfo.tls_certificate_file = xstrdup(yylval.string);
471    }
472   };
473  
# Line 486 | Line 480 | serverinfo_rsa_private_key_file: RSA_PRI
480    }
481   };
482  
483 < serverinfo_ssl_dh_param_file: SSL_DH_PARAM_FILE '=' QSTRING ';'
483 > serverinfo_tls_dh_param_file: TLS_DH_PARAM_FILE '=' QSTRING ';'
484 > {
485 >  if (conf_parser_ctx.pass == 2)
486 >  {
487 >    xfree(ConfigServerInfo.tls_dh_param_file);
488 >    ConfigServerInfo.tls_dh_param_file = xstrdup(yylval.string);
489 >  }
490 > };
491 >
492 > serverinfo_tls_cipher_list: TLS_CIPHER_LIST '=' QSTRING ';'
493   {
494    if (conf_parser_ctx.pass == 2)
495    {
496 <    xfree(ConfigServerInfo.ssl_dh_param_file);
497 <    ConfigServerInfo.ssl_dh_param_file = xstrdup(yylval.string);
496 >    xfree(ConfigServerInfo.tls_cipher_list);
497 >    ConfigServerInfo.tls_cipher_list = xstrdup(yylval.string);
498    }
499   };
500  
501 < serverinfo_ssl_cipher_list: T_SSL_CIPHER_LIST '=' QSTRING ';'
501 > serverinfo_tls_cipher_suites: TLS_CIPHER_SUITES '=' QSTRING ';'
502   {
503    if (conf_parser_ctx.pass == 2)
504    {
505 <    xfree(ConfigServerInfo.ssl_cipher_list);
506 <    ConfigServerInfo.ssl_cipher_list = xstrdup(yylval.string);
505 >    xfree(ConfigServerInfo.tls_cipher_suites);
506 >    ConfigServerInfo.tls_cipher_suites = xstrdup(yylval.string);
507    }
508   };
509  
510 < serverinfo_ssl_message_digest_algorithm: SSL_MESSAGE_DIGEST_ALGORITHM '=' QSTRING ';'
510 > serverinfo_tls_message_digest_algorithm: TLS_MESSAGE_DIGEST_ALGORITHM '=' QSTRING ';'
511   {
512    if (conf_parser_ctx.pass == 2)
513    {
514 <    xfree(ConfigServerInfo.ssl_message_digest_algorithm);
515 <    ConfigServerInfo.ssl_message_digest_algorithm = xstrdup(yylval.string);
514 >    xfree(ConfigServerInfo.tls_message_digest_algorithm);
515 >    ConfigServerInfo.tls_message_digest_algorithm = xstrdup(yylval.string);
516    }
517   }
518  
519 < serverinfo_ssl_dh_elliptic_curve: SSL_DH_ELLIPTIC_CURVE '=' QSTRING ';'
519 > serverinfo_tls_supported_groups: TLS_SUPPORTED_GROUPS '=' QSTRING ';'
520   {
521    if (conf_parser_ctx.pass == 2)
522    {
523 <    xfree(ConfigServerInfo.ssl_dh_elliptic_curve);
524 <    ConfigServerInfo.ssl_dh_elliptic_curve = xstrdup(yylval.string);
523 >    xfree(ConfigServerInfo.tls_supported_groups);
524 >    ConfigServerInfo.tls_supported_groups = xstrdup(yylval.string);
525    }
526   };
527  
# Line 566 | Line 569 | serverinfo_network_name: NETWORK_NAME '=
569   {
570    if (conf_parser_ctx.pass == 2)
571    {
572 <    char *p;
572 >    char *p = strchr(yylval.string, ' ');
573  
574 <    if ((p = strchr(yylval.string, ' ')))
574 >    if (p)
575        *p = '\0';
576  
577      xfree(ConfigServerInfo.network_name);
# Line 597 | Line 600 | serverinfo_default_max_clients: DEFAULT_
600    }
601    else if ($3 > MAXCLIENTS_MAX)
602    {
603 <    char buf[IRCD_BUFSIZE] = "";
603 >    char buf[IRCD_BUFSIZE];
604  
605      snprintf(buf, sizeof(buf), "default_max_clients too high, setting to %d", MAXCLIENTS_MAX);
606      conf_error_report(buf);
# Line 620 | Line 623 | serverinfo_max_nick_length: MAX_NICK_LEN
623    }
624    else if ($3 > NICKLEN)
625    {
626 <    char buf[IRCD_BUFSIZE] = "";
626 >    char buf[IRCD_BUFSIZE];
627  
628      snprintf(buf, sizeof(buf), "max_nick_length too high, setting to %d", NICKLEN);
629      conf_error_report(buf);
# Line 643 | Line 646 | serverinfo_max_topic_length: MAX_TOPIC_L
646    }
647    else if ($3 > TOPICLEN)
648    {
649 <    char buf[IRCD_BUFSIZE] = "";
649 >    char buf[IRCD_BUFSIZE];
650  
651      snprintf(buf, sizeof(buf), "max_topic_length too high, setting to %d", TOPICLEN);
652      conf_error_report(buf);
# Line 709 | Line 712 | motd_entry: MOTD
712      reset_block_state();
713   } '{' motd_items '}' ';'
714   {
715 <  dlink_node *node = NULL;
715 >  dlink_node *node;
716  
717    if (conf_parser_ctx.pass != 2)
718      break;
# Line 802 | Line 805 | pseudo_target: T_TARGET '=' QSTRING ';'
805   /***************************************************************************
806   * log {} section
807   ***************************************************************************/
808 < logging_entry:          T_LOG  '{' logging_items '}' ';' ;
808 > logging_entry:          T_LOG '{' logging_items '}' ';' ;
809   logging_items:          logging_items logging_item | logging_item ;
810  
811   logging_item:           logging_use_logging | logging_file_entry |
# Line 854 | Line 857 | logging_file_type: TYPE
857   {
858    if (conf_parser_ctx.pass == 2)
859      block_state.type.value = 0;
860 < } '='  logging_file_type_items ';' ;
860 > } '=' logging_file_type_items ';' ;
861  
862   logging_file_type_items: logging_file_type_items ',' logging_file_type_item | logging_file_type_item;
863   logging_file_type_item:  USER
# Line 904 | Line 907 | oper_entry: OPERATOR
907    block_state.flags.value |= CONF_FLAGS_ENCRYPTED;
908   } '{' oper_items '}' ';'
909   {
910 <  dlink_node *node = NULL;
910 >  dlink_node *node;
911  
912    if (conf_parser_ctx.pass != 2)
913      break;
# Line 966 | Line 969 | oper_item:      oper_name |
969                  oper_umodes |
970                  oper_class |
971                  oper_encrypted |
972 <                oper_ssl_certificate_fingerprint |
973 <                oper_ssl_connection_required |
972 >                oper_tls_certificate_fingerprint |
973 >                oper_tls_connection_required |
974                  oper_flags |
975                  error ';' ;
976  
# Line 1006 | Line 1009 | oper_encrypted: ENCRYPTED '=' TBOOL ';'
1009      block_state.flags.value &= ~CONF_FLAGS_ENCRYPTED;
1010   };
1011  
1012 < oper_ssl_certificate_fingerprint: SSL_CERTIFICATE_FINGERPRINT '=' QSTRING ';'
1012 > oper_tls_certificate_fingerprint: TLS_CERTIFICATE_FINGERPRINT '=' QSTRING ';'
1013   {
1014    if (conf_parser_ctx.pass == 2)
1015      strlcpy(block_state.cert.buf, yylval.string, sizeof(block_state.cert.buf));
1016   };
1017  
1018 < oper_ssl_connection_required: SSL_CONNECTION_REQUIRED '=' TBOOL ';'
1018 > oper_tls_connection_required: TLS_CONNECTION_REQUIRED '=' TBOOL ';'
1019   {
1020    if (conf_parser_ctx.pass != 2)
1021      break;
1022  
1023    if (yylval.number)
1024 <    block_state.flags.value |= CONF_FLAGS_SSL;
1024 >    block_state.flags.value |= CONF_FLAGS_TLS;
1025    else
1026 <    block_state.flags.value &= ~CONF_FLAGS_SSL;
1026 >    block_state.flags.value &= ~CONF_FLAGS_TLS;
1027   };
1028  
1029   oper_class: CLASS '=' QSTRING ';'
# Line 1033 | Line 1036 | oper_umodes: T_UMODES
1036   {
1037    if (conf_parser_ctx.pass == 2)
1038      block_state.modes.value = 0;
1039 < } '='  oper_umodes_items ';' ;
1039 > } '=' oper_umodes_items ';' ;
1040  
1041   oper_umodes_items: oper_umodes_items ',' oper_umodes_item | oper_umodes_item;
1042   oper_umodes_item:  T_BOTS
# Line 1134 | Line 1137 | oper_flags: IRCD_FLAGS
1137   {
1138    if (conf_parser_ctx.pass == 2)
1139      block_state.port.value = 0;
1140 < } '='  oper_flags_items ';';
1140 > } '=' oper_flags_items ';';
1141  
1142   oper_flags_items: oper_flags_items ',' oper_flags_item | oper_flags_item;
1143   oper_flags_item: KILL ':' REMOTE
# Line 1429 | Line 1432 | class_flags: IRCD_FLAGS
1432   {
1433    if (conf_parser_ctx.pass == 1)
1434      block_state.flags.value &= CLASS_FLAGS_FAKE_IDLE;
1435 < } '='  class_flags_items ';';
1435 > } '=' class_flags_items ';';
1436  
1437   class_flags_items: class_flags_items ',' class_flags_item | class_flags_item;
1438   class_flags_item: RANDOM_IDLE
# Line 1455 | Line 1458 | listen_entry: LISTEN
1458   listen_flags: IRCD_FLAGS
1459   {
1460    block_state.flags.value = 0;
1461 < } '='  listen_flags_items ';';
1461 > } '=' listen_flags_items ';';
1462  
1463   listen_flags_items: listen_flags_items ',' listen_flags_item | listen_flags_item;
1464 < listen_flags_item: T_SSL
1464 > listen_flags_item: T_TLS
1465   {
1466    if (conf_parser_ctx.pass == 2)
1467 <    block_state.flags.value |= LISTENER_SSL;
1467 >    block_state.flags.value |= LISTENER_TLS;
1468   } | HIDDEN
1469   {
1470    if (conf_parser_ctx.pass == 2)
# Line 1484 | Line 1487 | port_item: NUMBER
1487    if (conf_parser_ctx.pass == 2)
1488    {
1489   #ifndef HAVE_TLS
1490 <    if (block_state.flags.value & LISTENER_SSL)
1490 >    if (block_state.flags.value & LISTENER_TLS)
1491      {
1492        conf_error_report("TLS not available - port closed");
1493        break;
# Line 1497 | Line 1500 | port_item: NUMBER
1500    if (conf_parser_ctx.pass == 2)
1501    {
1502   #ifndef HAVE_TLS
1503 <    if (block_state.flags.value & LISTENER_SSL)
1503 >    if (block_state.flags.value & LISTENER_TLS)
1504      {
1505        conf_error_report("TLS not available - port closed");
1506        break;
# Line 1531 | Line 1534 | auth_entry: IRCD_AUTH
1534      reset_block_state();
1535   } '{' auth_items '}' ';'
1536   {
1537 <  dlink_node *node = NULL;
1537 >  dlink_node *node;
1538  
1539    if (conf_parser_ctx.pass != 2)
1540      break;
# Line 1565 | Line 1568 | auth_entry: IRCD_AUTH
1568        conf->name = xstrdup(block_state.name.buf);
1569  
1570      conf->flags = block_state.flags.value;
1571 <    conf->port  = block_state.port.value;
1571 >    conf->port = block_state.port.value;
1572  
1573      conf_add_class_to_conf(conf, block_state.class.buf);
1574      add_conf_by_address(CONF_CLIENT, conf);
# Line 2018 | Line 2021 | connect_entry: CONNECT
2021    }
2022  
2023    conf_add_class_to_conf(conf, block_state.class.buf);
2024 <  lookup_confhost(conf);
2024 >  conf_dns_lookup(conf);
2025   };
2026  
2027   connect_items:  connect_items connect_item | connect_item;
# Line 2028 | Line 2031 | connect_item:   connect_name |
2031                  connect_bind |
2032                  connect_send_password |
2033                  connect_accept_password |
2034 <                connect_ssl_certificate_fingerprint |
2034 >                connect_tls_certificate_fingerprint |
2035                  connect_aftype |
2036                  connect_port |
2037 <                connect_ssl_cipher_list |
2037 >                connect_tls_cipher_list |
2038                  connect_flags |
2039                  connect_hub_mask |
2040                  connect_leaf_mask |
# Line 2089 | Line 2092 | connect_accept_password: ACCEPT_PASSWORD
2092      strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf));
2093   };
2094  
2095 < connect_ssl_certificate_fingerprint: SSL_CERTIFICATE_FINGERPRINT '=' QSTRING ';'
2095 > connect_tls_certificate_fingerprint: TLS_CERTIFICATE_FINGERPRINT '=' QSTRING ';'
2096   {
2097    if (conf_parser_ctx.pass == 2)
2098      strlcpy(block_state.cert.buf, yylval.string, sizeof(block_state.cert.buf));
# Line 2121 | Line 2124 | connect_flags_item: AUTOCONN
2124   {
2125    if (conf_parser_ctx.pass == 2)
2126      block_state.flags.value |= CONF_FLAGS_ALLOW_AUTO_CONN;
2127 < } | T_SSL
2127 > } | T_TLS
2128   {
2129    if (conf_parser_ctx.pass == 2)
2130 <    block_state.flags.value |= CONF_FLAGS_SSL;
2130 >    block_state.flags.value |= CONF_FLAGS_TLS;
2131   };
2132  
2133   connect_encrypted: ENCRYPTED '=' TBOOL ';'
# Line 2156 | Line 2159 | connect_class: CLASS '=' QSTRING ';'
2159      strlcpy(block_state.class.buf, yylval.string, sizeof(block_state.class.buf));
2160   };
2161  
2162 < connect_ssl_cipher_list: T_SSL_CIPHER_LIST '=' QSTRING ';'
2162 > connect_tls_cipher_list: TLS_CIPHER_LIST '=' QSTRING ';'
2163   {
2164   #ifdef HAVE_TLS
2165    if (conf_parser_ctx.pass == 2)
2166      strlcpy(block_state.ciph.buf, yylval.string, sizeof(block_state.ciph.buf));
2167   #else
2168    if (conf_parser_ctx.pass == 2)
2169 <    conf_error_report("Ignoring connect::ciphers -- no TLS support");
2169 >    conf_error_report("Ignoring connect::tls_cipher_list -- no TLS support");
2170   #endif
2171   };
2172  
# Line 2775 | Line 2778 | channel_item:       channel_max_bans |
2778                      channel_default_join_flood_count |
2779                      channel_default_join_flood_time |
2780                      channel_disable_fake_channels |
2781 +                    channel_enable_extbans |
2782                      error;
2783  
2784 + channel_enable_extbans: ENABLE_EXTBANS '=' TBOOL ';'
2785 + {
2786 +  ConfigChannel.enable_extbans = yylval.number;
2787 + };
2788 +
2789   channel_disable_fake_channels: DISABLE_FAKE_CHANNELS '=' TBOOL ';'
2790   {
2791    ConfigChannel.disable_fake_channels = yylval.number;

Diff Legend

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