| 55 |
|
#include "conf_class.h" |
| 56 |
|
#include "motd.h" |
| 57 |
|
#include "ipcache.h" |
| 58 |
+ |
#include "isupport.h" |
| 59 |
|
|
| 60 |
|
|
| 61 |
|
struct config_channel_entry ConfigChannel; |
| 70 |
|
dlink_list service_items; |
| 71 |
|
dlink_list server_items; |
| 72 |
|
dlink_list cluster_items; |
| 73 |
< |
dlink_list oconf_items; |
| 74 |
< |
dlink_list uconf_items; |
| 75 |
< |
dlink_list xconf_items; |
| 73 |
> |
dlink_list operator_items; |
| 74 |
> |
dlink_list shared_items; |
| 75 |
> |
dlink_list gecos_items; |
| 76 |
|
dlink_list nresv_items; |
| 77 |
|
dlink_list cresv_items; |
| 78 |
|
|
| 137 |
|
switch (type) |
| 138 |
|
{ |
| 139 |
|
case CONF_XLINE: |
| 140 |
< |
return &xconf_items; |
| 140 |
> |
return &gecos_items; |
| 141 |
|
break; |
| 142 |
< |
case CONF_ULINE: |
| 143 |
< |
return &uconf_items; |
| 142 |
> |
case CONF_SHARED: |
| 143 |
> |
return &shared_items; |
| 144 |
|
break; |
| 145 |
|
case CONF_NRESV: |
| 146 |
|
return &nresv_items; |
| 149 |
|
return &cresv_items; |
| 150 |
|
break; |
| 151 |
|
case CONF_OPER: |
| 152 |
< |
return &oconf_items; |
| 152 |
> |
return &operator_items; |
| 153 |
|
break; |
| 154 |
|
case CONF_SERVER: |
| 155 |
|
return &server_items; |
| 260 |
|
ip_found->count++; |
| 261 |
|
AddFlag(client_p, FLAGS_IPHASH); |
| 262 |
|
|
| 263 |
< |
count_user_host(client_p->username, client_p->host, |
| 264 |
< |
&global, &local, &ident); |
| 263 |
> |
userhost_count(client_p->username, client_p->host, |
| 264 |
> |
&global, &local, &ident); |
| 265 |
|
|
| 266 |
|
/* XXX blah. go down checking the various silly limits |
| 267 |
|
* setting a_limit_reached if any limit is reached. |
| 302 |
|
{ |
| 303 |
|
struct MaskItem *conf = NULL; |
| 304 |
|
|
| 305 |
< |
if (IsGotId(client_p)) |
| 305 |
> |
if (HasFlag(client_p, FLAGS_GOTID)) |
| 306 |
|
{ |
| 307 |
|
conf = find_address_conf(client_p->host, client_p->username, |
| 308 |
|
&client_p->connection->ip, |
| 338 |
|
if (IsConfDoSpoofIp(conf)) |
| 339 |
|
{ |
| 340 |
|
if (IsConfSpoofNotice(conf)) |
| 341 |
< |
sendto_realops_flags(UMODE_ALL, L_ADMIN, SEND_NOTICE, "%s spoofing: %s as %s", |
| 341 |
> |
sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, "%s spoofing: %s as %s", |
| 342 |
|
client_p->name, client_p->host, conf->name); |
| 343 |
|
|
| 344 |
|
strlcpy(client_p->host, conf->name, sizeof(client_p->host)); |
| 589 |
|
break; |
| 590 |
|
|
| 591 |
|
case CONF_XLINE: |
| 592 |
< |
case CONF_ULINE: |
| 592 |
> |
case CONF_SHARED: |
| 593 |
|
case CONF_NRESV: |
| 594 |
|
case CONF_CRESV: |
| 595 |
|
DLINK_FOREACH(node, list->head) |
| 650 |
|
switch(type) |
| 651 |
|
{ |
| 652 |
|
case CONF_XLINE: |
| 653 |
< |
case CONF_ULINE: |
| 653 |
> |
case CONF_SHARED: |
| 654 |
|
case CONF_NRESV: |
| 655 |
|
case CONF_CRESV: |
| 656 |
|
|
| 779 |
|
|
| 780 |
|
SSL_CTX_set_cipher_list(ConfigServerInfo.server_ctx, "EECDH+HIGH:EDH+HIGH:HIGH:!aNULL"); |
| 781 |
|
ConfigServerInfo.message_digest_algorithm = EVP_sha256(); |
| 781 |
– |
ConfigServerInfo.rsa_private_key = NULL; |
| 782 |
– |
ConfigServerInfo.rsa_private_key_file = NULL; |
| 782 |
|
#endif |
| 783 |
|
|
| 785 |
– |
/* ConfigServerInfo.name is not rehashable */ |
| 786 |
– |
/* ConfigServerInfo.name = ConfigServerInfo.name; */ |
| 787 |
– |
ConfigServerInfo.description = NULL; |
| 784 |
|
ConfigServerInfo.network_name = xstrdup(NETWORK_NAME_DEFAULT); |
| 785 |
|
ConfigServerInfo.network_desc = xstrdup(NETWORK_DESC_DEFAULT); |
| 786 |
|
|
| 794 |
|
ConfigServerInfo.max_topic_length = 80; |
| 795 |
|
ConfigServerInfo.hub = 0; |
| 796 |
|
|
| 801 |
– |
ConfigAdminInfo.name = NULL; |
| 802 |
– |
ConfigAdminInfo.email = NULL; |
| 803 |
– |
ConfigAdminInfo.description = NULL; |
| 804 |
– |
|
| 797 |
|
log_del_all(); |
| 798 |
|
|
| 799 |
|
ConfigLog.use_logging = 1; |
| 801 |
|
ConfigChannel.disable_fake_channels = 0; |
| 802 |
|
ConfigChannel.invite_client_count = 10; |
| 803 |
|
ConfigChannel.invite_client_time = 300; |
| 804 |
+ |
ConfigChannel.invite_delay_channel = 5; |
| 805 |
|
ConfigChannel.knock_client_count = 1; |
| 806 |
|
ConfigChannel.knock_client_time = 300; |
| 807 |
|
ConfigChannel.knock_delay_channel = 60; |
| 809 |
|
ConfigChannel.max_bans = 25; |
| 810 |
|
ConfigChannel.default_join_flood_count = 18; |
| 811 |
|
ConfigChannel.default_join_flood_time = 6; |
| 819 |
– |
ConfigChannel.default_split_user_count = 0; |
| 820 |
– |
ConfigChannel.default_split_server_count = 0; |
| 821 |
– |
ConfigChannel.no_join_on_split = 0; |
| 822 |
– |
ConfigChannel.no_create_on_split = 0; |
| 812 |
|
|
| 813 |
|
ConfigServerHide.flatten_links = 0; |
| 814 |
< |
ConfigServerHide.links_delay = 300; |
| 814 |
> |
ConfigServerHide.flatten_links_delay = 300; |
| 815 |
|
ConfigServerHide.hidden = 0; |
| 816 |
|
ConfigServerHide.hide_servers = 0; |
| 817 |
|
ConfigServerHide.hide_services = 0; |
| 821 |
|
|
| 822 |
|
ConfigGeneral.away_count = 2; |
| 823 |
|
ConfigGeneral.away_time = 10; |
| 824 |
< |
ConfigGeneral.max_watch = WATCHSIZE_DEFAULT; |
| 824 |
> |
ConfigGeneral.max_watch = 50; |
| 825 |
|
ConfigGeneral.cycle_on_host_change = 1; |
| 826 |
|
ConfigGeneral.dline_min_cidr = 16; |
| 827 |
|
ConfigGeneral.dline_min_cidr6 = 48; |
| 837 |
|
ConfigGeneral.dots_in_ident = 0; |
| 838 |
|
ConfigGeneral.min_nonwildcard = 4; |
| 839 |
|
ConfigGeneral.min_nonwildcard_simple = 3; |
| 840 |
< |
ConfigGeneral.max_accept = 20; |
| 840 |
> |
ConfigGeneral.max_accept = 50; |
| 841 |
|
ConfigGeneral.anti_nick_flood = 0; |
| 842 |
|
ConfigGeneral.max_nick_time = 20; |
| 843 |
|
ConfigGeneral.max_nick_changes = 5; |
| 859 |
|
ConfigGeneral.short_motd = 0; |
| 860 |
|
ConfigGeneral.ping_cookie = 0; |
| 861 |
|
ConfigGeneral.no_oper_flood = 0; |
| 873 |
– |
ConfigGeneral.oper_pass_resv = 1; |
| 862 |
|
ConfigGeneral.max_targets = MAX_TARGETS_DEFAULT; |
| 863 |
|
ConfigGeneral.oper_only_umodes = UMODE_DEBUG | UMODE_LOCOPS | UMODE_HIDDEN | UMODE_FARCONNECT | |
| 864 |
|
UMODE_UNAUTH | UMODE_EXTERNAL | UMODE_BOTS | UMODE_NCHANGE | |
| 882 |
|
|
| 883 |
|
if (EmptyString(ConfigServerInfo.network_desc)) |
| 884 |
|
ConfigServerInfo.network_desc = xstrdup(NETWORK_DESC_DEFAULT); |
| 897 |
– |
|
| 898 |
– |
ConfigGeneral.max_watch = IRCD_MAX(ConfigGeneral.max_watch, WATCHSIZE_MIN); |
| 885 |
|
} |
| 886 |
|
|
| 887 |
|
/* read_conf() |
| 918 |
|
conf_rehash(int sig) |
| 919 |
|
{ |
| 920 |
|
if (sig) |
| 921 |
< |
sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, |
| 921 |
> |
sendto_realops_flags(UMODE_SERVNOTICE, L_ALL, SEND_NOTICE, |
| 922 |
|
"Got signal SIGHUP, reloading configuration file(s)"); |
| 923 |
|
|
| 924 |
|
restart_resolver(); |
| 979 |
|
conf_connect_allowed(struct irc_ssaddr *addr, int aftype) |
| 980 |
|
{ |
| 981 |
|
struct ip_entry *ip_found = NULL; |
| 982 |
< |
struct MaskItem *const conf = find_dline_conf(addr, aftype); |
| 997 |
< |
|
| 998 |
< |
/* DLINE exempt also gets you out of static limits/pacing... */ |
| 999 |
< |
if (conf && (conf->type == CONF_EXEMPT)) |
| 1000 |
< |
return 0; |
| 982 |
> |
const struct MaskItem *conf = find_dline_conf(addr, aftype); |
| 983 |
|
|
| 984 |
|
if (conf) |
| 985 |
+ |
{ |
| 986 |
+ |
/* DLINE exempt also gets you out of static limits/pacing... */ |
| 987 |
+ |
if (conf->type == CONF_EXEMPT) |
| 988 |
+ |
return 0; |
| 989 |
|
return BANNED_CLIENT; |
| 990 |
+ |
} |
| 991 |
|
|
| 992 |
|
ip_found = ipcache_find_or_add_address(addr); |
| 993 |
|
|
| 1023 |
|
if (!conf->until || conf->until > CurrentTime) |
| 1024 |
|
continue; |
| 1025 |
|
|
| 1026 |
< |
if (conf->type == CONF_XLINE) |
| 1027 |
< |
{ |
| 1028 |
< |
if (ConfigGeneral.tkline_expire_notices) |
| 1029 |
< |
sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, |
| 1043 |
< |
"Temporary X-line for [%s] expired", conf->name); |
| 1044 |
< |
conf_free(conf); |
| 1045 |
< |
} |
| 1046 |
< |
else if (conf->type == CONF_NRESV || conf->type == CONF_CRESV) |
| 1047 |
< |
{ |
| 1048 |
< |
if (ConfigGeneral.tkline_expire_notices) |
| 1049 |
< |
sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, |
| 1050 |
< |
"Temporary RESV for [%s] expired", conf->name); |
| 1051 |
< |
conf_free(conf); |
| 1052 |
< |
} |
| 1026 |
> |
if (ConfigGeneral.tkline_expire_notices) |
| 1027 |
> |
sendto_realops_flags(UMODE_SERVNOTICE, L_ALL, SEND_NOTICE, "Temporary %s for [%s] expired", |
| 1028 |
> |
(conf->type == CONF_XLINE) ? "X-line" : "RESV", conf->name); |
| 1029 |
> |
conf_free(conf); |
| 1030 |
|
} |
| 1031 |
|
} |
| 1032 |
|
|
| 1041 |
|
cleanup_tklines(void *unused) |
| 1042 |
|
{ |
| 1043 |
|
hostmask_expire_temporary(); |
| 1044 |
< |
expire_tklines(&xconf_items); |
| 1044 |
> |
expire_tklines(&gecos_items); |
| 1045 |
|
expire_tklines(&nresv_items); |
| 1046 |
|
expire_tklines(&cresv_items); |
| 1047 |
|
} |
| 1058 |
|
const unsigned char c; |
| 1059 |
|
} flag_list[] = { |
| 1060 |
|
{ OPER_FLAG_ADMIN, 'A' }, |
| 1061 |
< |
{ OPER_FLAG_REMOTEBAN, 'B' }, |
| 1062 |
< |
{ OPER_FLAG_DIE, 'D' }, |
| 1063 |
< |
{ OPER_FLAG_REHASH, 'H' }, |
| 1061 |
> |
{ OPER_FLAG_CLOSE, 'B' }, |
| 1062 |
> |
{ OPER_FLAG_CONNECT, 'C' }, |
| 1063 |
> |
{ OPER_FLAG_CONNECT_REMOTE, 'D' }, |
| 1064 |
> |
{ OPER_FLAG_DIE, 'E' }, |
| 1065 |
> |
{ OPER_FLAG_DLINE, 'F' }, |
| 1066 |
> |
{ OPER_FLAG_GLOBOPS, 'G' }, |
| 1067 |
> |
{ OPER_FLAG_JOIN_RESV, 'H' }, |
| 1068 |
> |
{ OPER_FLAG_KILL, 'I' }, |
| 1069 |
> |
{ OPER_FLAG_KILL_REMOTE, 'J' }, |
| 1070 |
|
{ OPER_FLAG_KLINE, 'K' }, |
| 1071 |
< |
{ OPER_FLAG_KILL, 'N' }, |
| 1072 |
< |
{ OPER_FLAG_KILL_REMOTE, 'O' }, |
| 1073 |
< |
{ OPER_FLAG_CONNECT, 'P' }, |
| 1074 |
< |
{ OPER_FLAG_CONNECT_REMOTE, 'Q' }, |
| 1075 |
< |
{ OPER_FLAG_SQUIT, 'R' }, |
| 1076 |
< |
{ OPER_FLAG_SQUIT_REMOTE, 'S' }, |
| 1077 |
< |
{ OPER_FLAG_UNKLINE, 'U' }, |
| 1078 |
< |
{ OPER_FLAG_XLINE, 'X' }, |
| 1071 |
> |
{ OPER_FLAG_LOCOPS, 'L' }, |
| 1072 |
> |
{ OPER_FLAG_MODULE, 'M' }, |
| 1073 |
> |
{ OPER_FLAG_NICK_RESV, 'N' }, |
| 1074 |
> |
{ OPER_FLAG_OPME, 'O' }, |
| 1075 |
> |
{ OPER_FLAG_REHASH, 'P' }, |
| 1076 |
> |
{ OPER_FLAG_REMOTEBAN, 'Q' }, |
| 1077 |
> |
{ OPER_FLAG_RESTART, 'R' }, |
| 1078 |
> |
{ OPER_FLAG_RESV, 'S' }, |
| 1079 |
> |
{ OPER_FLAG_SET, 'T' }, |
| 1080 |
> |
{ OPER_FLAG_SQUIT, 'U' }, |
| 1081 |
> |
{ OPER_FLAG_SQUIT_REMOTE, 'V' }, |
| 1082 |
> |
{ OPER_FLAG_UNDLINE, 'W' }, |
| 1083 |
> |
{ OPER_FLAG_UNKLINE, 'X' }, |
| 1084 |
> |
{ OPER_FLAG_UNRESV, 'Y' }, |
| 1085 |
> |
{ OPER_FLAG_UNXLINE, 'Z' }, |
| 1086 |
> |
{ OPER_FLAG_WALLOPS, 'a' }, |
| 1087 |
> |
{ OPER_FLAG_XLINE, 'b' }, |
| 1088 |
|
{ 0, '\0' } |
| 1089 |
|
}; |
| 1090 |
|
|
| 1095 |
|
char *privs_ptr = privs_out; |
| 1096 |
|
|
| 1097 |
|
for (const struct oper_privs *opriv = flag_list; opriv->flag; ++opriv) |
| 1106 |
– |
{ |
| 1098 |
|
if (port & opriv->flag) |
| 1099 |
|
*privs_ptr++ = opriv->c; |
| 1100 |
< |
else |
| 1101 |
< |
*privs_ptr++ = ToLower(opriv->c); |
| 1102 |
< |
} |
| 1100 |
> |
|
| 1101 |
> |
if (privs_ptr == privs_out) |
| 1102 |
> |
*privs_ptr++ = '0'; |
| 1103 |
|
|
| 1104 |
|
*privs_ptr = '\0'; |
| 1105 |
|
|
| 1159 |
|
{ |
| 1160 |
|
dlink_node *node = NULL, *node_next = NULL; |
| 1161 |
|
dlink_list *free_items [] = { |
| 1162 |
< |
&server_items, &oconf_items, |
| 1163 |
< |
&uconf_items, &xconf_items, |
| 1162 |
> |
&server_items, &operator_items, |
| 1163 |
> |
&shared_items, &gecos_items, |
| 1164 |
|
&nresv_items, &cluster_items, &service_items, &cresv_items, NULL |
| 1165 |
|
}; |
| 1166 |
|
|
| 1177 |
|
struct MaskItem *conf = node->data; |
| 1178 |
|
|
| 1179 |
|
conf->active = 0; |
| 1189 |
– |
dlinkDelete(&conf->node, *iterator); |
| 1180 |
|
|
| 1181 |
< |
/* XXX This is less than pretty */ |
| 1192 |
< |
if (conf->type == CONF_SERVER || conf->type == CONF_OPER) |
| 1181 |
> |
if (!IsConfDatabase(conf)) |
| 1182 |
|
{ |
| 1183 |
+ |
dlinkDelete(&conf->node, *iterator); |
| 1184 |
+ |
|
| 1185 |
|
if (!conf->ref_count) |
| 1186 |
|
conf_free(conf); |
| 1187 |
|
} |
| 1197 |
– |
else if (conf->type == CONF_XLINE) |
| 1198 |
– |
{ |
| 1199 |
– |
if (!conf->until) |
| 1200 |
– |
conf_free(conf); |
| 1201 |
– |
} |
| 1202 |
– |
else |
| 1203 |
– |
conf_free(conf); |
| 1188 |
|
} |
| 1189 |
|
} |
| 1190 |
|
|
| 1229 |
|
MyFree(ConfigAdminInfo.description); |
| 1230 |
|
ConfigAdminInfo.description = NULL; |
| 1231 |
|
|
| 1232 |
+ |
MyFree(ConfigServerHide.flatten_links_file); |
| 1233 |
+ |
ConfigServerHide.flatten_links_file = NULL; |
| 1234 |
+ |
|
| 1235 |
|
/* Clean out listeners */ |
| 1236 |
< |
close_listeners(); |
| 1236 |
> |
listener_close_marked(); |
| 1237 |
|
} |
| 1238 |
|
|
| 1239 |
|
/* read_conf_files() |
| 1266 |
|
{ |
| 1267 |
|
ilog(LOG_TYPE_IRCD, "Unable to read configuration file '%s': %s", |
| 1268 |
|
filename, strerror(errno)); |
| 1269 |
< |
exit(-1); |
| 1269 |
> |
exit(EXIT_FAILURE); |
| 1270 |
|
} |
| 1271 |
|
else |
| 1272 |
|
{ |
| 1273 |
< |
sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, |
| 1273 |
> |
sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, |
| 1274 |
|
"Unable to read configuration file '%s': %s", |
| 1275 |
|
filename, strerror(errno)); |
| 1276 |
|
return; |
| 1285 |
|
|
| 1286 |
|
log_reopen_all(); |
| 1287 |
|
|
| 1288 |
< |
add_isupport("NICKLEN", NULL, ConfigServerInfo.max_nick_length); |
| 1289 |
< |
add_isupport("NETWORK", ConfigServerInfo.network_name, -1); |
| 1288 |
> |
isupport_add("NICKLEN", NULL, ConfigServerInfo.max_nick_length); |
| 1289 |
> |
isupport_add("NETWORK", ConfigServerInfo.network_name, -1); |
| 1290 |
|
|
| 1291 |
< |
snprintf(chanmodes, sizeof(chanmodes), "beI:%d", ConfigChannel.max_bans); |
| 1292 |
< |
add_isupport("MAXLIST", chanmodes, -1); |
| 1293 |
< |
add_isupport("MAXTARGETS", NULL, ConfigGeneral.max_targets); |
| 1294 |
< |
add_isupport("CHANTYPES", "#", -1); |
| 1291 |
> |
snprintf(chanmodes, sizeof(chanmodes), "beI:%u", ConfigChannel.max_bans); |
| 1292 |
> |
isupport_add("MAXLIST", chanmodes, -1); |
| 1293 |
> |
isupport_add("MAXTARGETS", NULL, ConfigGeneral.max_targets); |
| 1294 |
> |
isupport_add("CHANTYPES", "#", -1); |
| 1295 |
|
|
| 1296 |
< |
snprintf(chanlimit, sizeof(chanlimit), "#:%d", |
| 1296 |
> |
snprintf(chanlimit, sizeof(chanlimit), "#:%u", |
| 1297 |
|
ConfigChannel.max_channels); |
| 1298 |
< |
add_isupport("CHANLIMIT", chanlimit, -1); |
| 1298 |
> |
isupport_add("CHANLIMIT", chanlimit, -1); |
| 1299 |
|
snprintf(chanmodes, sizeof(chanmodes), "%s", "beI,k,l,cimnprstCMORS"); |
| 1300 |
< |
add_isupport("CHANNELLEN", NULL, CHANNELLEN); |
| 1301 |
< |
add_isupport("TOPICLEN", NULL, ConfigServerInfo.max_topic_length); |
| 1302 |
< |
add_isupport("CHANMODES", chanmodes, -1); |
| 1300 |
> |
isupport_add("CHANNELLEN", NULL, CHANNELLEN); |
| 1301 |
> |
isupport_add("TOPICLEN", NULL, ConfigServerInfo.max_topic_length); |
| 1302 |
> |
isupport_add("CHANMODES", chanmodes, -1); |
| 1303 |
|
|
| 1304 |
|
/* |
| 1305 |
|
* message_locale may have changed. rebuild isupport since it relies |
| 1306 |
|
* on strlen(form_str(RPL_ISUPPORT)) |
| 1307 |
|
*/ |
| 1308 |
< |
rebuild_isupport_message_line(); |
| 1308 |
> |
isupport_rebuild(); |
| 1309 |
|
} |
| 1310 |
|
|
| 1311 |
|
/* conf_add_class_to_conf() |
| 1322 |
|
conf->class = class_default; |
| 1323 |
|
|
| 1324 |
|
if (conf->type == CONF_CLIENT || conf->type == CONF_OPER) |
| 1325 |
< |
sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, |
| 1325 |
> |
sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, |
| 1326 |
|
"Warning *** Defaulting to default class for %s@%s", |
| 1327 |
|
conf->user, conf->host); |
| 1328 |
|
else |
| 1329 |
< |
sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, |
| 1329 |
> |
sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, |
| 1330 |
|
"Warning *** Defaulting to default class for %s", |
| 1331 |
|
conf->name); |
| 1332 |
|
} |
| 1347 |
|
return; |
| 1348 |
|
|
| 1349 |
|
strip_tabs(newlinebuf, linebuf, sizeof(newlinebuf)); |
| 1350 |
< |
sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, |
| 1350 |
> |
sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, |
| 1351 |
|
"\"%s\", line %u: %s: %s", |
| 1352 |
|
conffilebuf, lineno + 1, msg, newlinebuf); |
| 1353 |
|
ilog(LOG_TYPE_IRCD, "\"%s\", line %u: %s: %s", |
| 1360 |
|
char newlinebuf[IRCD_BUFSIZE]; |
| 1361 |
|
|
| 1362 |
|
strip_tabs(newlinebuf, linebuf, sizeof(newlinebuf)); |
| 1363 |
< |
sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, |
| 1363 |
> |
sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, |
| 1364 |
|
"\"%s\", line %u: %s: %s", |
| 1365 |
|
conffilebuf, lineno + 1, msg, newlinebuf); |
| 1366 |
|
ilog(LOG_TYPE_IRCD, "\"%s\", line %u: %s: %s", |
| 1427 |
|
{ |
| 1428 |
|
const unsigned char *p = (const unsigned char *)data; |
| 1429 |
|
unsigned char tmpch = '\0'; |
| 1430 |
< |
unsigned int nonwild = 0; |
| 1430 |
> |
unsigned int nonwild = 0, wild = 0; |
| 1431 |
|
|
| 1432 |
|
while ((tmpch = *p++)) |
| 1433 |
|
{ |
| 1442 |
|
if (++nonwild >= ConfigGeneral.min_nonwildcard_simple) |
| 1443 |
|
return 1; |
| 1444 |
|
} |
| 1445 |
+ |
else |
| 1446 |
+ |
++wild; |
| 1447 |
|
} |
| 1448 |
|
|
| 1449 |
< |
return 0; |
| 1449 |
> |
return !wild; |
| 1450 |
|
} |
| 1451 |
|
|
| 1452 |
|
/* valid_wild_card() |
| 1565 |
|
find_chasing(source_p, user_host_or_nick)) == NULL) |
| 1566 |
|
return 0; /* find_chasing sends ERR_NOSUCHNICK */ |
| 1567 |
|
|
| 1568 |
< |
if (IsExemptKline(target_p)) |
| 1568 |
> |
if (HasFlag(target_p, FLAGS_EXEMPTKLINE)) |
| 1569 |
|
{ |
| 1570 |
|
if (IsClient(source_p)) |
| 1571 |
|
sendto_one_notice(source_p, &me, ":%s is E-lined", target_p->name); |
| 1581 |
|
if (target_p->username[0] == '~') |
| 1582 |
|
luser[0] = '*'; |
| 1583 |
|
|
| 1584 |
< |
if (!strcmp(target_p->sockhost, "0")) |
| 1596 |
< |
strlcpy(lhost, target_p->host, HOSTLEN*4 + 1); |
| 1597 |
< |
else |
| 1598 |
< |
strlcpy(lhost, target_p->sockhost, HOSTLEN*4 + 1); |
| 1584 |
> |
strlcpy(lhost, target_p->sockhost, HOSTLEN*4 + 1); |
| 1585 |
|
return 1; |
| 1586 |
|
} |
| 1587 |
|
|
| 1625 |
|
char **target_server, char **reason) |
| 1626 |
|
{ |
| 1627 |
|
int found_tkline_time=0; |
| 1628 |
< |
static char def_reason[] = CONF_NOREASON; |
| 1628 |
> |
static char default_reason[] = CONF_NOREASON; |
| 1629 |
|
static char user[USERLEN*4+1]; |
| 1630 |
|
static char host[HOSTLEN*4+1]; |
| 1631 |
|
|
| 1675 |
|
parc--; |
| 1676 |
|
parv++; |
| 1677 |
|
|
| 1692 |
– |
if (target_server == NULL) |
| 1693 |
– |
{ |
| 1694 |
– |
sendto_one_notice(source_p, &me, ":ON server not supported by %s", cmd); |
| 1695 |
– |
return 0; |
| 1696 |
– |
} |
| 1697 |
– |
|
| 1678 |
|
if (!HasOFlag(source_p, OPER_FLAG_REMOTEBAN)) |
| 1679 |
|
{ |
| 1680 |
|
sendto_one_numeric(source_p, &me, ERR_NOPRIVS, "remoteban"); |
| 1719 |
|
if (reason) |
| 1720 |
|
{ |
| 1721 |
|
if (parc && !EmptyString(*parv)) |
| 1742 |
– |
{ |
| 1722 |
|
*reason = *parv; |
| 1744 |
– |
|
| 1745 |
– |
if (!valid_comment(source_p, *reason, 1)) |
| 1746 |
– |
return 0; |
| 1747 |
– |
} |
| 1723 |
|
else |
| 1724 |
< |
*reason = def_reason; |
| 1724 |
> |
*reason = default_reason; |
| 1725 |
|
} |
| 1726 |
|
|
| 1727 |
|
return 1; |
| 1728 |
|
} |
| 1729 |
|
|
| 1755 |
– |
/* valid_comment() |
| 1756 |
– |
* |
| 1757 |
– |
* inputs - pointer to client |
| 1758 |
– |
* - pointer to comment |
| 1759 |
– |
* output - 0 if no valid comment, |
| 1760 |
– |
* - 1 if valid |
| 1761 |
– |
* side effects - truncates reason where necessary |
| 1762 |
– |
*/ |
| 1763 |
– |
int |
| 1764 |
– |
valid_comment(struct Client *source_p, char *comment, int warn) |
| 1765 |
– |
{ |
| 1766 |
– |
if (strlen(comment) > REASONLEN) |
| 1767 |
– |
comment[REASONLEN-1] = '\0'; |
| 1768 |
– |
|
| 1769 |
– |
return 1; |
| 1770 |
– |
} |
| 1771 |
– |
|
| 1730 |
|
/* match_conf_password() |
| 1731 |
|
* |
| 1732 |
|
* inputs - pointer to given password |
| 1755 |
|
* |
| 1756 |
|
* inputs - client sending the cluster |
| 1757 |
|
* - command name "KLINE" "XLINE" etc. |
| 1758 |
< |
* - capab -- CAP_KLN etc. from server.h |
| 1758 |
> |
* - capab -- CAPAB_KLN etc. from server.h |
| 1759 |
|
* - cluster type -- CLUSTER_KLINE etc. from conf.h |
| 1760 |
|
* - pattern and args to send along |
| 1761 |
|
* output - none |
| 1779 |
|
const struct MaskItem *conf = node->data; |
| 1780 |
|
|
| 1781 |
|
if (conf->flags & cluster_type) |
| 1782 |
< |
sendto_match_servs(source_p, conf->name, CAP_CLUSTER | capab, |
| 1782 |
> |
sendto_match_servs(source_p, conf->name, CAPAB_CLUSTER | capab, |
| 1783 |
|
"%s %s %s", command, conf->name, buffer); |
| 1784 |
|
} |
| 1785 |
|
} |