| 28 |
|
#include <sys/types.h> |
| 29 |
|
|
| 30 |
|
#include "stdinc.h" |
| 31 |
– |
#include "dalloca.h" |
| 31 |
|
#include "ircd.h" |
| 32 |
|
#include "tools.h" |
| 33 |
|
#include "list.h" |
| 78 |
|
static char *listener_address = NULL; |
| 79 |
|
static int not_atom = 0; |
| 80 |
|
|
| 81 |
< |
struct CollectItem { |
| 81 |
> |
struct CollectItem |
| 82 |
> |
{ |
| 83 |
|
dlink_node node; |
| 84 |
|
char *name; |
| 85 |
|
char *user; |
| 169 |
|
%token DESCRIPTION |
| 170 |
|
%token DIE |
| 171 |
|
%token DISABLE_AUTH |
| 172 |
+ |
%token DISABLE_FAKE_CHANNELS |
| 173 |
|
%token DISABLE_HIDDEN |
| 174 |
|
%token DISABLE_LOCAL_CHANNELS |
| 175 |
|
%token DISABLE_REMOTE_COMMANDS |
| 316 |
|
%token SILENT |
| 317 |
|
%token SPOOF |
| 318 |
|
%token SPOOF_NOTICE |
| 319 |
+ |
%token STATS_E_DISABLED |
| 320 |
|
%token STATS_I_OPER_ONLY |
| 321 |
|
%token STATS_K_OPER_ONLY |
| 322 |
|
%token STATS_O_OPER_ONLY |
| 332 |
|
%token T_SOFTCALLERID |
| 333 |
|
%token T_CALLERID |
| 334 |
|
%token T_CCONN |
| 335 |
+ |
%token T_CCONN_FULL |
| 336 |
|
%token T_CLIENT_FLOOD |
| 337 |
|
%token T_DEAF |
| 338 |
|
%token T_DEBUG |
| 1079 |
|
{ |
| 1080 |
|
if (ypass == 2) |
| 1081 |
|
{ |
| 1082 |
< |
struct CollectItem *yy_tmp; |
| 1082 |
> |
struct split_nuh_item nuh; |
| 1083 |
> |
|
| 1084 |
> |
nuh.nuhmask = yylval.string; |
| 1085 |
> |
nuh.nickptr = NULL; |
| 1086 |
> |
nuh.userptr = userbuf; |
| 1087 |
> |
nuh.hostptr = hostbuf; |
| 1088 |
> |
|
| 1089 |
> |
nuh.nicksize = 0; |
| 1090 |
> |
nuh.usersize = sizeof(userbuf); |
| 1091 |
> |
nuh.hostsize = sizeof(hostbuf); |
| 1092 |
> |
|
| 1093 |
> |
split_nuh(&nuh); |
| 1094 |
|
|
| 1095 |
|
if (yy_aconf->user == NULL) |
| 1096 |
|
{ |
| 1097 |
< |
split_nuh(yylval.string, NULL, &yy_aconf->user, &yy_aconf->host); |
| 1097 |
> |
DupString(yy_aconf->user, userbuf); |
| 1098 |
> |
DupString(yy_aconf->host, hostbuf); |
| 1099 |
|
} |
| 1100 |
|
else |
| 1101 |
|
{ |
| 1102 |
< |
yy_tmp = (struct CollectItem *)MyMalloc(sizeof(struct CollectItem)); |
| 1103 |
< |
split_nuh(yylval.string, NULL, &yy_tmp->user, &yy_tmp->host); |
| 1102 |
> |
struct CollectItem *yy_tmp = MyMalloc(sizeof(struct CollectItem)); |
| 1103 |
> |
|
| 1104 |
> |
DupString(yy_tmp->user, userbuf); |
| 1105 |
> |
DupString(yy_tmp->host, hostbuf); |
| 1106 |
> |
|
| 1107 |
|
dlinkAdd(yy_tmp, &yy_tmp->node, &col_conf_list); |
| 1108 |
|
} |
| 1109 |
|
} |
| 1198 |
|
{ |
| 1199 |
|
if (ypass == 2) |
| 1200 |
|
yy_aconf->modes |= UMODE_CCONN; |
| 1201 |
+ |
} | T_CCONN_FULL |
| 1202 |
+ |
{ |
| 1203 |
+ |
if (ypass == 2) |
| 1204 |
+ |
yy_aconf->modes |= UMODE_CCONN_FULL; |
| 1205 |
|
} | T_DEAF |
| 1206 |
|
{ |
| 1207 |
|
if (ypass == 2) |
| 1553 |
|
if (ypass == 1) |
| 1554 |
|
{ |
| 1555 |
|
yy_conf = make_conf_item(CLASS_TYPE); |
| 1556 |
< |
yy_class = (struct ClassItem *)map_to_conf(yy_conf); |
| 1556 |
> |
yy_class = map_to_conf(yy_conf); |
| 1557 |
|
} |
| 1558 |
|
} class_name_b '{' class_items '}' ';' |
| 1559 |
|
{ |
| 1560 |
|
if (ypass == 1) |
| 1561 |
|
{ |
| 1562 |
< |
struct ConfItem *cconf; |
| 1562 |
> |
struct ConfItem *cconf = NULL; |
| 1563 |
|
struct ClassItem *class = NULL; |
| 1564 |
|
|
| 1565 |
|
if (yy_class_name == NULL) |
| 1544 |
– |
{ |
| 1566 |
|
delete_conf_item(yy_conf); |
| 1546 |
– |
} |
| 1567 |
|
else |
| 1568 |
|
{ |
| 1569 |
|
cconf = find_exact_name_conf(CLASS_TYPE, yy_class_name, NULL, NULL); |
| 1570 |
|
|
| 1571 |
|
if (cconf != NULL) /* The class existed already */ |
| 1572 |
|
{ |
| 1573 |
+ |
int user_count = 0; |
| 1574 |
+ |
|
| 1575 |
|
rebuild_cidr_class(cconf, yy_class); |
| 1576 |
< |
class = (struct ClassItem *) map_to_conf(cconf); |
| 1577 |
< |
*class = *yy_class; |
| 1576 |
> |
|
| 1577 |
> |
class = map_to_conf(cconf); |
| 1578 |
> |
|
| 1579 |
> |
user_count = class->curr_user_count; |
| 1580 |
> |
memcpy(class, yy_class, sizeof(*class)); |
| 1581 |
> |
class->curr_user_count = user_count; |
| 1582 |
> |
class->active = 1; |
| 1583 |
> |
|
| 1584 |
|
delete_conf_item(yy_conf); |
| 1585 |
|
|
| 1586 |
|
MyFree(cconf->name); /* Allows case change of class name */ |
| 1590 |
|
{ |
| 1591 |
|
MyFree(yy_conf->name); /* just in case it was allocated */ |
| 1592 |
|
yy_conf->name = yy_class_name; |
| 1593 |
+ |
yy_class->active = 1; |
| 1594 |
|
} |
| 1595 |
|
} |
| 1596 |
+ |
|
| 1597 |
|
yy_class_name = NULL; |
| 1598 |
|
} |
| 1599 |
|
}; |
| 1883 |
|
{ |
| 1884 |
|
if (ypass == 2) |
| 1885 |
|
{ |
| 1886 |
< |
struct CollectItem *yy_tmp; |
| 1886 |
> |
struct CollectItem *yy_tmp = NULL; |
| 1887 |
> |
struct split_nuh_item nuh; |
| 1888 |
> |
|
| 1889 |
> |
nuh.nuhmask = yylval.string; |
| 1890 |
> |
nuh.nickptr = NULL; |
| 1891 |
> |
nuh.userptr = userbuf; |
| 1892 |
> |
nuh.hostptr = hostbuf; |
| 1893 |
> |
|
| 1894 |
> |
nuh.nicksize = 0; |
| 1895 |
> |
nuh.usersize = sizeof(userbuf); |
| 1896 |
> |
nuh.hostsize = sizeof(hostbuf); |
| 1897 |
> |
|
| 1898 |
> |
split_nuh(&nuh); |
| 1899 |
|
|
| 1900 |
|
if (yy_aconf->user == NULL) |
| 1901 |
< |
split_nuh(yylval.string, NULL, &yy_aconf->user, &yy_aconf->host); |
| 1901 |
> |
{ |
| 1902 |
> |
DupString(yy_aconf->user, userbuf); |
| 1903 |
> |
DupString(yy_aconf->host, hostbuf); |
| 1904 |
> |
} |
| 1905 |
|
else |
| 1906 |
|
{ |
| 1907 |
|
yy_tmp = MyMalloc(sizeof(struct CollectItem)); |
| 1908 |
< |
split_nuh(yylval.string, NULL, &yy_tmp->user, &yy_tmp->host); |
| 1908 |
> |
|
| 1909 |
> |
DupString(yy_tmp->user, userbuf); |
| 1910 |
> |
DupString(yy_tmp->host, hostbuf); |
| 1911 |
> |
|
| 1912 |
|
dlinkAdd(yy_tmp, &yy_tmp->node, &col_conf_list); |
| 1913 |
|
} |
| 1914 |
|
} |
| 2249 |
|
{ |
| 2250 |
|
if (ypass == 2) |
| 2251 |
|
{ |
| 2252 |
< |
split_nuh(yylval.string, NULL, &yy_match_item->user, &yy_match_item->host); |
| 2252 |
> |
struct split_nuh_item nuh; |
| 2253 |
> |
|
| 2254 |
> |
nuh.nuhmask = yylval.string; |
| 2255 |
> |
nuh.nickptr = NULL; |
| 2256 |
> |
nuh.userptr = userbuf; |
| 2257 |
> |
nuh.hostptr = hostbuf; |
| 2258 |
> |
|
| 2259 |
> |
nuh.nicksize = 0; |
| 2260 |
> |
nuh.usersize = sizeof(userbuf); |
| 2261 |
> |
nuh.hostsize = sizeof(hostbuf); |
| 2262 |
> |
|
| 2263 |
> |
split_nuh(&nuh); |
| 2264 |
> |
|
| 2265 |
> |
DupString(yy_match_item->user, userbuf); |
| 2266 |
> |
DupString(yy_match_item->host, hostbuf); |
| 2267 |
|
} |
| 2268 |
|
}; |
| 2269 |
|
|
| 2440 |
|
yy_aconf->passwd && yy_aconf->spasswd) |
| 2441 |
|
#endif /* !HAVE_LIBCRYPTO */ |
| 2442 |
|
{ |
| 2443 |
< |
if (conf_add_server(yy_conf, scount, class_name) >= 0) |
| 2382 |
< |
{ |
| 2383 |
< |
++scount; |
| 2384 |
< |
} |
| 2385 |
< |
else |
| 2443 |
> |
if (conf_add_server(yy_conf, class_name) == -1) |
| 2444 |
|
{ |
| 2445 |
|
delete_conf_item(yy_conf); |
| 2446 |
|
yy_conf = NULL; |
| 2933 |
|
if (!(exp_user = ircd_pcre_compile(userbuf, &errptr)) || |
| 2934 |
|
!(exp_host = ircd_pcre_compile(hostbuf, &errptr))) |
| 2935 |
|
{ |
| 2936 |
< |
ilog(L_ERROR, "Failed to add regular expression based K-Line: %s", errptr); |
| 2936 |
> |
ilog(L_ERROR, "Failed to add regular expression based K-Line: %s", |
| 2937 |
> |
errptr); |
| 2938 |
|
break; |
| 2939 |
|
} |
| 2940 |
|
|
| 2941 |
|
yy_conf = make_conf_item(RKLINE_TYPE); |
| 2942 |
+ |
yy_aconf = map_to_conf(yy_conf); |
| 2943 |
+ |
|
| 2944 |
|
yy_aconf->regexuser = exp_user; |
| 2945 |
|
yy_aconf->regexhost = exp_host; |
| 2946 |
|
|
| 2993 |
|
{ |
| 2994 |
|
if (ypass == 2) |
| 2995 |
|
{ |
| 2996 |
< |
char *user = NULL, *host = NULL; |
| 2936 |
< |
|
| 2937 |
< |
split_nuh(yylval.string, NULL, &user, &host); |
| 2996 |
> |
struct split_nuh_item nuh; |
| 2997 |
|
|
| 2998 |
< |
strlcpy(userbuf, user, sizeof(userbuf)); |
| 2999 |
< |
strlcpy(hostbuf, host, sizeof(hostbuf)); |
| 2998 |
> |
nuh.nuhmask = yylval.string; |
| 2999 |
> |
nuh.nickptr = NULL; |
| 3000 |
> |
nuh.userptr = userbuf; |
| 3001 |
> |
nuh.hostptr = hostbuf; |
| 3002 |
> |
|
| 3003 |
> |
nuh.nicksize = 0; |
| 3004 |
> |
nuh.usersize = sizeof(userbuf); |
| 3005 |
> |
nuh.hostsize = sizeof(hostbuf); |
| 3006 |
|
|
| 3007 |
< |
MyFree(user); |
| 2943 |
< |
MyFree(host); |
| 3007 |
> |
split_nuh(&nuh); |
| 3008 |
|
} |
| 3009 |
|
}; |
| 3010 |
|
|
| 3109 |
|
|
| 3110 |
|
if (!(exp_p = ircd_pcre_compile(gecos_name, &errptr))) |
| 3111 |
|
{ |
| 3112 |
< |
ilog(L_ERROR, "Failed to add regular expression based X-Line: %s", errptr); |
| 3112 |
> |
ilog(L_ERROR, "Failed to add regular expression based X-Line: %s", |
| 3113 |
> |
errptr); |
| 3114 |
|
break; |
| 3115 |
|
} |
| 3116 |
|
|
| 3191 |
|
general_disable_auth | general_burst_away | |
| 3192 |
|
general_tkline_expire_notices | general_gline_min_cidr | |
| 3193 |
|
general_gline_min_cidr6 | general_use_whois_actually | |
| 3194 |
< |
general_reject_hold_time | |
| 3194 |
> |
general_reject_hold_time | general_stats_e_disabled | |
| 3195 |
|
error; |
| 3196 |
|
|
| 3197 |
|
|
| 3322 |
|
ConfigFileEntry.warn_no_nline = yylval.number; |
| 3323 |
|
}; |
| 3324 |
|
|
| 3325 |
+ |
general_stats_e_disabled: STATS_E_DISABLED '=' TBOOL ';' |
| 3326 |
+ |
{ |
| 3327 |
+ |
ConfigFileEntry.stats_e_disabled = yylval.number; |
| 3328 |
+ |
}; |
| 3329 |
+ |
|
| 3330 |
|
general_stats_o_oper_only: STATS_O_OPER_ONLY '=' TBOOL ';' |
| 3331 |
|
{ |
| 3332 |
|
ConfigFileEntry.stats_o_oper_only = yylval.number; |
| 3519 |
|
} | T_CCONN |
| 3520 |
|
{ |
| 3521 |
|
ConfigFileEntry.oper_umodes |= UMODE_CCONN; |
| 3522 |
+ |
} | T_CCONN_FULL |
| 3523 |
+ |
{ |
| 3524 |
+ |
ConfigFileEntry.oper_umodes |= UMODE_CCONN_FULL; |
| 3525 |
|
} | T_DEAF |
| 3526 |
|
{ |
| 3527 |
|
ConfigFileEntry.oper_umodes |= UMODE_DEAF; |
| 3727 |
|
{ |
| 3728 |
|
if (ypass == 2) |
| 3729 |
|
{ |
| 3730 |
< |
struct CollectItem *yy_tmp = NULL; |
| 3730 |
> |
struct split_nuh_item nuh; |
| 3731 |
> |
|
| 3732 |
> |
nuh.nuhmask = yylval.string; |
| 3733 |
> |
nuh.nickptr = NULL; |
| 3734 |
> |
nuh.userptr = userbuf; |
| 3735 |
> |
nuh.hostptr = hostbuf; |
| 3736 |
> |
|
| 3737 |
> |
nuh.nicksize = 0; |
| 3738 |
> |
nuh.usersize = sizeof(userbuf); |
| 3739 |
> |
nuh.hostsize = sizeof(hostbuf); |
| 3740 |
> |
|
| 3741 |
> |
split_nuh(&nuh); |
| 3742 |
|
|
| 3743 |
|
if (yy_aconf->user == NULL) |
| 3744 |
|
{ |
| 3745 |
< |
split_nuh(yylval.string, NULL, &yy_aconf->user, &yy_aconf->host); |
| 3745 |
> |
DupString(yy_aconf->user, userbuf); |
| 3746 |
> |
DupString(yy_aconf->host, hostbuf); |
| 3747 |
|
} |
| 3748 |
|
else |
| 3749 |
|
{ |
| 3750 |
< |
yy_tmp = MyMalloc(sizeof(struct CollectItem)); |
| 3751 |
< |
split_nuh(yylval.string, NULL, &yy_tmp->user, &yy_tmp->host); |
| 3750 |
> |
struct CollectItem *yy_tmp = MyMalloc(sizeof(struct CollectItem)); |
| 3751 |
> |
|
| 3752 |
> |
DupString(yy_tmp->user, userbuf); |
| 3753 |
> |
DupString(yy_tmp->host, hostbuf); |
| 3754 |
> |
|
| 3755 |
|
dlinkAdd(yy_tmp, &yy_tmp->node, &col_conf_list); |
| 3756 |
|
} |
| 3757 |
|
} |
| 3843 |
|
channel_no_create_on_split | channel_restrict_channels | |
| 3844 |
|
channel_no_join_on_split | channel_burst_topicwho | |
| 3845 |
|
channel_jflood_count | channel_jflood_time | |
| 3846 |
< |
error; |
| 3846 |
> |
channel_disable_fake_channels | error; |
| 3847 |
> |
|
| 3848 |
> |
channel_disable_fake_channels: DISABLE_FAKE_CHANNELS '=' TBOOL ';' |
| 3849 |
> |
{ |
| 3850 |
> |
ConfigChannel.disable_fake_channels = yylval.number; |
| 3851 |
> |
}; |
| 3852 |
|
|
| 3853 |
|
channel_restrict_channels: RESTRICT_CHANNELS '=' TBOOL ';' |
| 3854 |
|
{ |