| 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 |
| 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 |
|
|
| 27 |
|
|
| 28 |
|
%{ |
| 29 |
|
|
| 30 |
– |
#define YY_NO_UNPUT |
| 30 |
|
#include <sys/types.h> |
| 31 |
|
#include <string.h> |
| 32 |
|
|
| 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" |
| 77 |
|
{ |
| 78 |
|
char buf[IRCD_BUFSIZE]; |
| 79 |
|
} name, |
| 80 |
+ |
nick, |
| 81 |
|
user, |
| 82 |
|
host, |
| 83 |
|
addr, |
| 87 |
|
cert, |
| 88 |
|
rpass, |
| 89 |
|
spass, |
| 90 |
< |
class; |
| 90 |
> |
whois, |
| 91 |
> |
class, |
| 92 |
> |
target, |
| 93 |
> |
prepend, |
| 94 |
> |
command; |
| 95 |
|
|
| 96 |
|
struct |
| 97 |
|
{ |
| 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)); |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 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 |
| 407 |
|
| gecos_entry |
| 408 |
|
| modules_entry |
| 409 |
|
| motd_entry |
| 410 |
+ |
| pseudo_entry |
| 411 |
|
| error ';' |
| 412 |
|
| error '}' |
| 413 |
|
; |
| 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 | |
| 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"); |
| 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 |
|
|
| 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 |
|
|
| 690 |
|
{ |
| 691 |
|
MyFree(ConfigServerInfo.description); |
| 692 |
|
ConfigServerInfo.description = xstrdup(yylval.string); |
| 693 |
+ |
strlcpy(me.info, ConfigServerInfo.description, sizeof(me.info)); |
| 694 |
|
} |
| 695 |
|
}; |
| 696 |
|
|
| 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; |
| 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 |
|
{ |
| 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 ';' |
| 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; |
| 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; |
| 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 '}' ';' ; |
| 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) |
| 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; |
| 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; |
| 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; |
| 1172 |
|
oper_item: oper_name | |
| 1173 |
|
oper_user | |
| 1174 |
|
oper_password | |
| 1175 |
+ |
oper_whois | |
| 1176 |
|
oper_umodes | |
| 1177 |
|
oper_class | |
| 1178 |
|
oper_encrypted | |
| 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) |
| 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) |
| 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 |
|
|
| 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; |
| 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; |
| 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) |
| 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) |
| 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 | |
| 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 | |
| 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 |
|
|
| 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 ';' |
| 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; |
| 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; |
| 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; |
| 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; |
| 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; |
| 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 |
|
|
| 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 |
|
/*************************************************************************** |