| 65 |
|
|
| 66 |
|
static struct |
| 67 |
|
{ |
| 68 |
< |
struct { |
| 68 |
> |
struct |
| 69 |
> |
{ |
| 70 |
|
dlink_list list; |
| 71 |
|
} mask, |
| 72 |
|
leaf, |
| 73 |
|
hub; |
| 74 |
|
|
| 75 |
< |
struct { |
| 75 |
> |
struct |
| 76 |
> |
{ |
| 77 |
|
char buf[IRCD_BUFSIZE]; |
| 78 |
|
} name, |
| 79 |
|
user, |
| 87 |
|
spass, |
| 88 |
|
class; |
| 89 |
|
|
| 90 |
< |
struct { |
| 90 |
> |
struct |
| 91 |
> |
{ |
| 92 |
|
unsigned int value; |
| 93 |
|
} flags, |
| 94 |
|
modes, |
| 380 |
|
conf_item: admin_entry |
| 381 |
|
| logging_entry |
| 382 |
|
| oper_entry |
| 383 |
< |
| channel_entry |
| 383 |
> |
| channel_entry |
| 384 |
|
| class_entry |
| 385 |
|
| listen_entry |
| 386 |
|
| auth_entry |
| 387 |
|
| serverinfo_entry |
| 388 |
< |
| serverhide_entry |
| 388 |
> |
| serverhide_entry |
| 389 |
|
| resv_entry |
| 390 |
|
| service_entry |
| 391 |
|
| shared_entry |
| 392 |
< |
| cluster_entry |
| 392 |
> |
| cluster_entry |
| 393 |
|
| connect_entry |
| 394 |
|
| kill_entry |
| 395 |
|
| deny_entry |
| 396 |
< |
| exempt_entry |
| 397 |
< |
| general_entry |
| 396 |
> |
| exempt_entry |
| 397 |
> |
| general_entry |
| 398 |
|
| gecos_entry |
| 399 |
|
| modules_entry |
| 400 |
|
| motd_entry |
| 404 |
|
|
| 405 |
|
|
| 406 |
|
timespec_: { $$ = 0; } | timespec; |
| 407 |
< |
timespec: NUMBER timespec_ |
| 408 |
< |
{ |
| 409 |
< |
$$ = $1 + $2; |
| 410 |
< |
} |
| 411 |
< |
| NUMBER SECONDS timespec_ |
| 412 |
< |
{ |
| 413 |
< |
$$ = $1 + $3; |
| 414 |
< |
} |
| 415 |
< |
| NUMBER MINUTES timespec_ |
| 416 |
< |
{ |
| 417 |
< |
$$ = $1 * 60 + $3; |
| 418 |
< |
} |
| 419 |
< |
| NUMBER HOURS timespec_ |
| 420 |
< |
{ |
| 421 |
< |
$$ = $1 * 60 * 60 + $3; |
| 422 |
< |
} |
| 420 |
< |
| NUMBER DAYS timespec_ |
| 421 |
< |
{ |
| 422 |
< |
$$ = $1 * 60 * 60 * 24 + $3; |
| 423 |
< |
} |
| 424 |
< |
| NUMBER WEEKS timespec_ |
| 425 |
< |
{ |
| 426 |
< |
$$ = $1 * 60 * 60 * 24 * 7 + $3; |
| 427 |
< |
} |
| 428 |
< |
| NUMBER MONTHS timespec_ |
| 429 |
< |
{ |
| 430 |
< |
$$ = $1 * 60 * 60 * 24 * 7 * 4 + $3; |
| 431 |
< |
} |
| 432 |
< |
| NUMBER YEARS timespec_ |
| 433 |
< |
{ |
| 434 |
< |
$$ = $1 * 60 * 60 * 24 * 365 + $3; |
| 435 |
< |
} |
| 436 |
< |
; |
| 437 |
< |
|
| 438 |
< |
sizespec_: { $$ = 0; } | sizespec; |
| 439 |
< |
sizespec: NUMBER sizespec_ { $$ = $1 + $2; } |
| 440 |
< |
| NUMBER BYTES sizespec_ { $$ = $1 + $3; } |
| 441 |
< |
| NUMBER KBYTES sizespec_ { $$ = $1 * 1024 + $3; } |
| 442 |
< |
| NUMBER MBYTES sizespec_ { $$ = $1 * 1024 * 1024 + $3; } |
| 443 |
< |
; |
| 407 |
> |
timespec: NUMBER timespec_ { $$ = $1 + $2; } | |
| 408 |
> |
NUMBER SECONDS timespec_ { $$ = $1 + $3; } | |
| 409 |
> |
NUMBER MINUTES timespec_ { $$ = $1 * 60 + $3; } | |
| 410 |
> |
NUMBER HOURS timespec_ { $$ = $1 * 60 * 60 + $3; } | |
| 411 |
> |
NUMBER DAYS timespec_ { $$ = $1 * 60 * 60 * 24 + $3; } | |
| 412 |
> |
NUMBER WEEKS timespec_ { $$ = $1 * 60 * 60 * 24 * 7 + $3; } | |
| 413 |
> |
NUMBER MONTHS timespec_ { $$ = $1 * 60 * 60 * 24 * 7 * 4 + $3; } | |
| 414 |
> |
NUMBER YEARS timespec_ { $$ = $1 * 60 * 60 * 24 * 365 + $3; } |
| 415 |
> |
; |
| 416 |
> |
|
| 417 |
> |
sizespec_: { $$ = 0; } | sizespec; |
| 418 |
> |
sizespec: NUMBER sizespec_ { $$ = $1 + $2; } | |
| 419 |
> |
NUMBER BYTES sizespec_ { $$ = $1 + $3; } | |
| 420 |
> |
NUMBER KBYTES sizespec_ { $$ = $1 * 1024 + $3; } | |
| 421 |
> |
NUMBER MBYTES sizespec_ { $$ = $1 * 1024 * 1024 + $3; } |
| 422 |
> |
; |
| 423 |
|
|
| 424 |
|
|
| 425 |
|
/*************************************************************************** |
| 447 |
|
serverinfo_entry: SERVERINFO '{' serverinfo_items '}' ';'; |
| 448 |
|
|
| 449 |
|
serverinfo_items: serverinfo_items serverinfo_item | serverinfo_item ; |
| 450 |
< |
serverinfo_item: serverinfo_name | serverinfo_vhost | |
| 451 |
< |
serverinfo_hub | serverinfo_description | |
| 452 |
< |
serverinfo_network_name | serverinfo_network_desc | |
| 453 |
< |
serverinfo_max_clients | serverinfo_max_nick_length | |
| 454 |
< |
serverinfo_max_topic_length | serverinfo_ssl_dh_param_file | |
| 455 |
< |
serverinfo_rsa_private_key_file | serverinfo_vhost6 | |
| 456 |
< |
serverinfo_sid | serverinfo_ssl_certificate_file | |
| 457 |
< |
serverinfo_ssl_client_method | serverinfo_ssl_server_method | |
| 450 |
> |
serverinfo_item: serverinfo_name | |
| 451 |
> |
serverinfo_vhost | |
| 452 |
> |
serverinfo_hub | |
| 453 |
> |
serverinfo_description | |
| 454 |
> |
serverinfo_network_name | |
| 455 |
> |
serverinfo_network_desc | |
| 456 |
> |
serverinfo_max_clients | |
| 457 |
> |
serverinfo_max_nick_length | |
| 458 |
> |
serverinfo_max_topic_length | |
| 459 |
> |
serverinfo_ssl_dh_param_file | |
| 460 |
> |
serverinfo_rsa_private_key_file | |
| 461 |
> |
serverinfo_vhost6 | |
| 462 |
> |
serverinfo_sid | |
| 463 |
> |
serverinfo_ssl_certificate_file | |
| 464 |
> |
serverinfo_ssl_client_method | |
| 465 |
> |
serverinfo_ssl_server_method | |
| 466 |
|
serverinfo_ssl_cipher_list | |
| 467 |
< |
error ';' ; |
| 467 |
> |
error ';' ; |
| 468 |
|
|
| 469 |
|
|
| 470 |
|
serverinfo_ssl_client_method: T_SSL_CLIENT_METHOD '=' client_method_types ';' ; |
| 837 |
|
admin_entry: ADMIN '{' admin_items '}' ';' ; |
| 838 |
|
|
| 839 |
|
admin_items: admin_items admin_item | admin_item; |
| 840 |
< |
admin_item: admin_name | admin_description | |
| 841 |
< |
admin_email | error ';' ; |
| 840 |
> |
admin_item: admin_name | |
| 841 |
> |
admin_description | |
| 842 |
> |
admin_email | |
| 843 |
> |
error ';' ; |
| 844 |
|
|
| 845 |
|
admin_name: NAME '=' QSTRING ';' |
| 846 |
|
{ |
| 911 |
|
logging_entry: T_LOG '{' logging_items '}' ';' ; |
| 912 |
|
logging_items: logging_items logging_item | logging_item ; |
| 913 |
|
|
| 914 |
< |
logging_item: logging_use_logging | logging_file_entry | |
| 915 |
< |
error ';' ; |
| 914 |
> |
logging_item: logging_use_logging | logging_file_entry | |
| 915 |
> |
error ';' ; |
| 916 |
|
|
| 917 |
|
logging_use_logging: USE_LOGGING '=' TBOOL ';' |
| 918 |
|
{ |
| 1086 |
|
}; |
| 1087 |
|
|
| 1088 |
|
oper_items: oper_items oper_item | oper_item; |
| 1089 |
< |
oper_item: oper_name | oper_user | oper_password | |
| 1090 |
< |
oper_umodes | oper_class | oper_encrypted | |
| 1091 |
< |
oper_rsa_public_key_file | oper_ssl_certificate_fingerprint | |
| 1092 |
< |
oper_ssl_connection_required | |
| 1093 |
< |
oper_flags | error ';' ; |
| 1089 |
> |
oper_item: oper_name | |
| 1090 |
> |
oper_user | |
| 1091 |
> |
oper_password | |
| 1092 |
> |
oper_umodes | |
| 1093 |
> |
oper_class | |
| 1094 |
> |
oper_encrypted | |
| 1095 |
> |
oper_rsa_public_key_file | |
| 1096 |
> |
oper_ssl_certificate_fingerprint | |
| 1097 |
> |
oper_ssl_connection_required | |
| 1098 |
> |
oper_flags | |
| 1099 |
> |
error ';' ; |
| 1100 |
|
|
| 1101 |
|
oper_name: NAME '=' QSTRING ';' |
| 1102 |
|
{ |
| 1421 |
|
|
| 1422 |
|
class_items: class_items class_item | class_item; |
| 1423 |
|
class_item: class_name | |
| 1424 |
< |
class_cidr_bitlen_ipv4 | class_cidr_bitlen_ipv6 | |
| 1424 |
> |
class_cidr_bitlen_ipv4 | |
| 1425 |
> |
class_cidr_bitlen_ipv6 | |
| 1426 |
|
class_ping_time | |
| 1427 |
< |
class_number_per_cidr | |
| 1427 |
> |
class_number_per_cidr | |
| 1428 |
|
class_number_per_ip | |
| 1429 |
|
class_connectfreq | |
| 1430 |
|
class_max_number | |
| 1431 |
< |
class_max_global | |
| 1432 |
< |
class_max_local | |
| 1433 |
< |
class_max_ident | |
| 1431 |
> |
class_max_global | |
| 1432 |
> |
class_max_local | |
| 1433 |
> |
class_max_ident | |
| 1434 |
|
class_sendq | class_recvq | |
| 1435 |
|
class_min_idle | |
| 1436 |
|
class_max_idle | |
| 1437 |
|
class_flags | |
| 1438 |
< |
error ';' ; |
| 1438 |
> |
error ';' ; |
| 1439 |
|
|
| 1440 |
|
class_name: NAME '=' QSTRING ';' |
| 1441 |
|
{ |
| 1598 |
|
#endif |
| 1599 |
|
{ |
| 1600 |
|
conf_error_report("SSL not available - port closed"); |
| 1601 |
< |
break; |
| 1601 |
> |
break; |
| 1602 |
|
} |
| 1603 |
|
add_listener($1, block_state.addr.buf, block_state.flags.value); |
| 1604 |
|
} |
| 1606 |
|
{ |
| 1607 |
|
if (conf_parser_ctx.pass == 2) |
| 1608 |
|
{ |
| 1613 |
– |
int i; |
| 1614 |
– |
|
| 1609 |
|
if (block_state.flags.value & LISTENER_SSL) |
| 1610 |
|
#ifdef HAVE_LIBCRYPTO |
| 1611 |
|
if (!ServerInfo.server_ctx) |
| 1612 |
|
#endif |
| 1613 |
|
{ |
| 1614 |
|
conf_error_report("SSL not available - port closed"); |
| 1615 |
< |
break; |
| 1615 |
> |
break; |
| 1616 |
|
} |
| 1617 |
|
|
| 1618 |
< |
for (i = $1; i <= $3; ++i) |
| 1618 |
> |
for (int i = $1; i <= $3; ++i) |
| 1619 |
|
add_listener(i, block_state.addr.buf, block_state.flags.value); |
| 1620 |
|
} |
| 1621 |
|
}; |
| 1678 |
|
}; |
| 1679 |
|
|
| 1680 |
|
auth_items: auth_items auth_item | auth_item; |
| 1681 |
< |
auth_item: auth_user | auth_passwd | auth_class | auth_flags | |
| 1682 |
< |
auth_spoof | auth_redir_serv | auth_redir_port | |
| 1683 |
< |
auth_encrypted | error ';' ; |
| 1681 |
> |
auth_item: auth_user | |
| 1682 |
> |
auth_passwd | |
| 1683 |
> |
auth_class | |
| 1684 |
> |
auth_flags | |
| 1685 |
> |
auth_spoof | |
| 1686 |
> |
auth_redir_serv |
| 1687 |
> |
auth_redir_port | |
| 1688 |
> |
auth_encrypted | |
| 1689 |
> |
error ';' ; |
| 1690 |
|
|
| 1691 |
|
auth_user: USER '=' QSTRING ';' |
| 1692 |
|
{ |
| 1817 |
|
create_resv(block_state.name.buf, block_state.rpass.buf, &block_state.mask.list); |
| 1818 |
|
}; |
| 1819 |
|
|
| 1820 |
< |
resv_items: resv_items resv_item | resv_item; |
| 1821 |
< |
resv_item: resv_mask | resv_reason | resv_exempt | error ';' ; |
| 1820 |
> |
resv_items: resv_items resv_item | resv_item; |
| 1821 |
> |
resv_item: resv_mask | resv_reason | resv_exempt | error ';' ; |
| 1822 |
|
|
| 1823 |
|
resv_mask: MASK '=' QSTRING ';' |
| 1824 |
|
{ |
| 1988 |
|
conf->name = xstrdup(block_state.name.buf); |
| 1989 |
|
}; |
| 1990 |
|
|
| 1991 |
< |
cluster_items: cluster_items cluster_item | cluster_item; |
| 1992 |
< |
cluster_item: cluster_name | cluster_type | error ';' ; |
| 1991 |
> |
cluster_items: cluster_items cluster_item | cluster_item; |
| 1992 |
> |
cluster_item: cluster_name | cluster_type | error ';' ; |
| 1993 |
|
|
| 1994 |
|
cluster_name: NAME '=' QSTRING ';' |
| 1995 |
|
{ |
| 2003 |
|
block_state.flags.value = 0; |
| 2004 |
|
} '=' cluster_types ';' ; |
| 2005 |
|
|
| 2006 |
< |
cluster_types: cluster_types ',' cluster_type_item | cluster_type_item; |
| 2006 |
> |
cluster_types: cluster_types ',' cluster_type_item | cluster_type_item; |
| 2007 |
|
cluster_type_item: KLINE |
| 2008 |
|
{ |
| 2009 |
|
if (conf_parser_ctx.pass == 2) |
| 2122 |
|
}; |
| 2123 |
|
|
| 2124 |
|
connect_items: connect_items connect_item | connect_item; |
| 2125 |
< |
connect_item: connect_name | connect_host | connect_vhost | |
| 2126 |
< |
connect_send_password | connect_accept_password | |
| 2127 |
< |
connect_ssl_certificate_fingerprint | |
| 2128 |
< |
connect_aftype | connect_port | connect_ssl_cipher_list | |
| 2129 |
< |
connect_flags | connect_hub_mask | connect_leaf_mask | |
| 2130 |
< |
connect_class | connect_encrypted | |
| 2125 |
> |
connect_item: connect_name | |
| 2126 |
> |
connect_host | |
| 2127 |
> |
connect_vhost | |
| 2128 |
> |
connect_send_password | |
| 2129 |
> |
connect_accept_password | |
| 2130 |
> |
connect_ssl_certificate_fingerprint | |
| 2131 |
> |
connect_aftype | |
| 2132 |
> |
connect_port | |
| 2133 |
> |
connect_ssl_cipher_list | |
| 2134 |
> |
connect_flags | |
| 2135 |
> |
connect_hub_mask | |
| 2136 |
> |
connect_leaf_mask | |
| 2137 |
> |
connect_class | |
| 2138 |
> |
connect_encrypted | |
| 2139 |
|
error ';' ; |
| 2140 |
|
|
| 2141 |
|
connect_name: NAME '=' QSTRING ';' |
| 2436 |
|
'{' general_items '}' ';'; |
| 2437 |
|
|
| 2438 |
|
general_items: general_items general_item | general_item; |
| 2439 |
< |
general_item: general_hide_spoof_ips | general_ignore_bogus_ts | |
| 2440 |
< |
general_failed_oper_notice | general_anti_nick_flood | |
| 2441 |
< |
general_max_nick_time | general_max_nick_changes | |
| 2442 |
< |
general_max_accept | general_anti_spam_exit_message_time | |
| 2443 |
< |
general_ts_warn_delta | general_ts_max_delta | |
| 2439 |
> |
general_item: general_hide_spoof_ips | |
| 2440 |
> |
general_ignore_bogus_ts | |
| 2441 |
> |
general_failed_oper_notice | |
| 2442 |
> |
general_anti_nick_flood | |
| 2443 |
> |
general_max_nick_time | |
| 2444 |
> |
general_max_nick_changes | |
| 2445 |
> |
general_max_accept | |
| 2446 |
> |
general_anti_spam_exit_message_time | |
| 2447 |
> |
general_ts_warn_delta | |
| 2448 |
> |
general_ts_max_delta | |
| 2449 |
|
general_kill_chase_time_limit | |
| 2450 |
|
general_invisible_on_connect | |
| 2451 |
< |
general_warn_no_nline | general_dots_in_ident | |
| 2452 |
< |
general_stats_o_oper_only | general_stats_k_oper_only | |
| 2453 |
< |
general_pace_wait | general_stats_i_oper_only | |
| 2454 |
< |
general_pace_wait_simple | general_stats_P_oper_only | |
| 2451 |
> |
general_warn_no_nline | |
| 2452 |
> |
general_dots_in_ident | |
| 2453 |
> |
general_stats_o_oper_only | |
| 2454 |
> |
general_stats_k_oper_only | |
| 2455 |
> |
general_pace_wait | |
| 2456 |
> |
general_stats_i_oper_only | |
| 2457 |
> |
general_pace_wait_simple | |
| 2458 |
> |
general_stats_P_oper_only | |
| 2459 |
|
general_stats_u_oper_only | |
| 2460 |
< |
general_short_motd | general_no_oper_flood | |
| 2461 |
< |
general_true_no_oper_flood | general_oper_pass_resv | |
| 2462 |
< |
general_oper_only_umodes | general_max_targets | |
| 2463 |
< |
general_use_egd | general_egdpool_path | |
| 2464 |
< |
general_oper_umodes | general_caller_id_wait | |
| 2465 |
< |
general_opers_bypass_callerid | general_default_floodcount | |
| 2466 |
< |
general_min_nonwildcard | general_min_nonwildcard_simple | |
| 2467 |
< |
general_throttle_time | general_havent_read_conf | |
| 2460 |
> |
general_short_motd | |
| 2461 |
> |
general_no_oper_flood | |
| 2462 |
> |
general_true_no_oper_flood | |
| 2463 |
> |
general_oper_pass_resv | |
| 2464 |
> |
general_oper_only_umodes | |
| 2465 |
> |
general_max_targets | |
| 2466 |
> |
general_use_egd | |
| 2467 |
> |
general_egdpool_path | |
| 2468 |
> |
general_oper_umodes | |
| 2469 |
> |
general_caller_id_wait | |
| 2470 |
> |
general_opers_bypass_callerid | |
| 2471 |
> |
general_default_floodcount | |
| 2472 |
> |
general_min_nonwildcard | |
| 2473 |
> |
general_min_nonwildcard_simple | |
| 2474 |
> |
general_throttle_time | |
| 2475 |
> |
general_havent_read_conf | |
| 2476 |
|
general_ping_cookie | |
| 2477 |
|
general_disable_auth | |
| 2478 |
< |
general_tkline_expire_notices | general_gline_enable | |
| 2479 |
< |
general_gline_duration | general_gline_request_duration | |
| 2478 |
> |
general_tkline_expire_notices | |
| 2479 |
> |
general_gline_enable | |
| 2480 |
> |
general_gline_duration | |
| 2481 |
> |
general_gline_request_duration | |
| 2482 |
|
general_gline_min_cidr | |
| 2483 |
|
general_gline_min_cidr6 | |
| 2484 |
< |
general_stats_e_disabled | |
| 2485 |
< |
general_max_watch | general_services_name | |
| 2486 |
< |
general_cycle_on_host_change | |
| 2487 |
< |
error; |
| 2484 |
> |
general_stats_e_disabled | |
| 2485 |
> |
general_max_watch | |
| 2486 |
> |
general_services_name | |
| 2487 |
> |
general_cycle_on_host_change | |
| 2488 |
> |
error; |
| 2489 |
|
|
| 2490 |
|
|
| 2491 |
|
general_max_watch: MAX_WATCH '=' NUMBER ';' |
| 2809 |
|
ConfigFileEntry.oper_only_umodes = 0; |
| 2810 |
|
} '=' umode_items ';' ; |
| 2811 |
|
|
| 2812 |
< |
umode_items: umode_items ',' umode_item | umode_item; |
| 2813 |
< |
umode_item: T_BOTS |
| 2812 |
> |
umode_items: umode_items ',' umode_item | umode_item; |
| 2813 |
> |
umode_item: T_BOTS |
| 2814 |
|
{ |
| 2815 |
|
ConfigFileEntry.oper_only_umodes |= UMODE_BOTS; |
| 2816 |
|
} | T_CCONN |
| 2899 |
|
|
| 2900 |
|
channel_items: channel_items channel_item | channel_item; |
| 2901 |
|
channel_item: channel_max_bans | |
| 2902 |
< |
channel_knock_delay | channel_knock_delay_channel | |
| 2903 |
< |
channel_max_chans_per_user | channel_max_chans_per_oper | |
| 2902 |
> |
channel_knock_delay | |
| 2903 |
> |
channel_knock_delay_channel | |
| 2904 |
> |
channel_max_chans_per_user | |
| 2905 |
> |
channel_max_chans_per_oper | |
| 2906 |
|
channel_default_split_user_count | |
| 2907 |
|
channel_default_split_server_count | |
| 2908 |
|
channel_no_create_on_split | |
| 2909 |
|
channel_no_join_on_split | |
| 2910 |
< |
channel_jflood_count | channel_jflood_time | |
| 2911 |
< |
channel_disable_fake_channels | error; |
| 2910 |
> |
channel_jflood_count | |
| 2911 |
> |
channel_jflood_time | |
| 2912 |
> |
channel_disable_fake_channels | |
| 2913 |
> |
error; |
| 2914 |
|
|
| 2915 |
|
channel_disable_fake_channels: DISABLE_FAKE_CHANNELS '=' TBOOL ';' |
| 2916 |
|
{ |
| 2979 |
|
'{' serverhide_items '}' ';'; |
| 2980 |
|
|
| 2981 |
|
serverhide_items: serverhide_items serverhide_item | serverhide_item; |
| 2982 |
< |
serverhide_item: serverhide_flatten_links | serverhide_disable_remote_commands | |
| 2982 |
> |
serverhide_item: serverhide_flatten_links | |
| 2983 |
> |
serverhide_disable_remote_commands | |
| 2984 |
|
serverhide_hide_servers | |
| 2985 |
< |
serverhide_hide_services | |
| 2986 |
< |
serverhide_links_delay | |
| 2987 |
< |
serverhide_hidden | serverhide_hidden_name | |
| 2988 |
< |
serverhide_hide_server_ips | |
| 2985 |
> |
serverhide_hide_services | |
| 2986 |
> |
serverhide_links_delay | |
| 2987 |
> |
serverhide_hidden | |
| 2988 |
> |
serverhide_hidden_name | |
| 2989 |
> |
serverhide_hide_server_ips | |
| 2990 |
|
error; |
| 2991 |
|
|
| 2992 |
|
serverhide_flatten_links: FLATTEN_LINKS '=' TBOOL ';' |