| 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)); |
| 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 |
| 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 |
| 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 |
| 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 |
| 438 |
|
|
| 439 |
|
|
| 440 |
|
/*************************************************************************** |
| 441 |
< |
* serverinfo {} section |
| 441 |
> |
* serverinfo {} section |
| 442 |
|
***************************************************************************/ |
| 443 |
|
serverinfo_entry: SERVERINFO '{' serverinfo_items '}' ';'; |
| 444 |
|
|
| 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 |
|
|
| 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 |
|
|
| 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); |
| 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); |
| 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); |
| 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); |
| 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; |
| 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 | |
| 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 |
| 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; |
| 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 |
|
|
| 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 ';' |
| 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 |
| 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 |
| 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 |
| 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) |
| 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; |
| 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; |
| 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; |
| 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); |
| 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; |
| 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 | |
| 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)); |
| 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 ';' |
| 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 |
|
|
| 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; |