X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/c88cdb00957d1bafae4587343b5ab7df14b75f8b..133755685ef38d8f9ac79ac27c4505b9e96f81fd:/modules/m_rehash.c diff --git a/modules/m_rehash.c b/modules/m_rehash.c index e4e66ab..80333d1 100644 --- a/modules/m_rehash.c +++ b/modules/m_rehash.c @@ -21,22 +21,20 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: m_rehash.c 3161 2007-01-25 07:23:01Z nenolod $ */ #include "stdinc.h" #include "client.h" #include "channel.h" #include "common.h" -#include "irc_string.h" +#include "match.h" #include "ircd.h" -#include "s_gline.h" #include "s_serv.h" #include "numeric.h" #include "res.h" #include "s_conf.h" #include "s_newconf.h" -#include "s_log.h" +#include "logger.h" #include "send.h" #include "msg.h" #include "parse.h" @@ -68,6 +66,8 @@ rehash_bans_loc(struct Client *source_p) { sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is rehashing bans", get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; rehash_bans(0); } @@ -77,6 +77,8 @@ rehash_dns(struct Client *source_p) { sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is rehashing DNS", get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; /* reread /etc/resolv.conf and reopen res socket */ restart_resolver(); @@ -88,9 +90,10 @@ rehash_motd(struct Client *source_p) sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is forcing re-reading of MOTD file", get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; - free_cachefile(user_motd); - user_motd = cache_file(MPATH, "ircd.motd", 0); + cache_user_motd(); } static void @@ -99,68 +102,33 @@ rehash_omotd(struct Client *source_p) sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is forcing re-reading of OPER MOTD file", get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; free_cachefile(oper_motd); oper_motd = cache_file(OPATH, "opers.motd", 0); } -static void -rehash_glines(struct Client *source_p) -{ - struct ConfItem *aconf; - dlink_node *ptr, *next_ptr; - - sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing G-lines", - get_oper_name(source_p)); - - DLINK_FOREACH_SAFE(ptr, next_ptr, glines.head) - { - aconf = ptr->data; - - delete_one_address_conf(aconf->host, aconf); - dlinkDestroy(ptr, &glines); - } -} - -static void -rehash_pglines(struct Client *source_p) -{ - struct gline_pending *glp_ptr; - dlink_node *ptr; - dlink_node *next_ptr; - - sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing pending glines", - get_oper_name(source_p)); - - DLINK_FOREACH_SAFE(ptr, next_ptr, pending_glines.head) - { - glp_ptr = ptr->data; - - MyFree(glp_ptr->reason1); - MyFree(glp_ptr->reason2); - MyFree(glp_ptr); - dlinkDestroy(ptr, &pending_glines); - } -} - static void rehash_tklines(struct Client *source_p) { struct ConfItem *aconf; - dlink_node *ptr, *next_ptr; + rb_dlink_node *ptr, *next_ptr; int i; sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing temp klines", get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; for(i = 0; i < LAST_TEMP_TYPE; i++) { - DLINK_FOREACH_SAFE(ptr, next_ptr, temp_klines[i].head) + RB_DLINK_FOREACH_SAFE(ptr, next_ptr, temp_klines[i].head) { aconf = ptr->data; delete_one_address_conf(aconf->host, aconf); - dlinkDestroy(ptr, &temp_klines[i]); + rb_dlinkDestroy(ptr, &temp_klines[i]); } } } @@ -169,20 +137,22 @@ static void rehash_tdlines(struct Client *source_p) { struct ConfItem *aconf; - dlink_node *ptr, *next_ptr; + rb_dlink_node *ptr, *next_ptr; int i; sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing temp dlines", get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; for(i = 0; i < LAST_TEMP_TYPE; i++) { - DLINK_FOREACH_SAFE(ptr, next_ptr, temp_dlines[i].head) + RB_DLINK_FOREACH_SAFE(ptr, next_ptr, temp_dlines[i].head) { aconf = ptr->data; delete_one_address_conf(aconf->host, aconf); - dlinkDestroy(ptr, &temp_dlines[i]); + rb_dlinkDestroy(ptr, &temp_dlines[i]); } } } @@ -191,21 +161,23 @@ static void rehash_txlines(struct Client *source_p) { struct ConfItem *aconf; - dlink_node *ptr; - dlink_node *next_ptr; + rb_dlink_node *ptr; + rb_dlink_node *next_ptr; sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing temp xlines", get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; - DLINK_FOREACH_SAFE(ptr, next_ptr, xline_conf_list.head) + RB_DLINK_FOREACH_SAFE(ptr, next_ptr, xline_conf_list.head) { aconf = ptr->data; - if(!aconf->hold) + if(!aconf->hold || aconf->lifetime) continue; free_conf(aconf); - dlinkDestroy(ptr, &xline_conf_list); + rb_dlinkDestroy(ptr, &xline_conf_list); } } @@ -213,34 +185,36 @@ static void rehash_tresvs(struct Client *source_p) { struct ConfItem *aconf; - dlink_node *ptr; - dlink_node *next_ptr; + rb_dlink_node *ptr; + rb_dlink_node *next_ptr; int i; sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing temp resvs", get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; HASH_WALK_SAFE(i, R_MAX, ptr, next_ptr, resvTable) { aconf = ptr->data; - if(!aconf->hold) + if(!aconf->hold || aconf->lifetime) continue; free_conf(aconf); - dlinkDestroy(ptr, &resvTable[i]); + rb_dlinkDestroy(ptr, &resvTable[i]); } HASH_WALK_END - DLINK_FOREACH_SAFE(ptr, next_ptr, resv_conf_list.head) + RB_DLINK_FOREACH_SAFE(ptr, next_ptr, resv_conf_list.head) { aconf = ptr->data; - if(!aconf->hold) + if(!aconf->hold || aconf->lifetime) continue; free_conf(aconf); - dlinkDestroy(ptr, &resv_conf_list); + rb_dlinkDestroy(ptr, &resv_conf_list); } } @@ -249,17 +223,31 @@ rehash_rejectcache(struct Client *source_p) { sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing reject cache", get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; flush_reject(); } +static void +rehash_throttles(struct Client *source_p) +{ + sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing throttles", + get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; + flush_throttle(); + +} + static void rehash_help(struct Client *source_p) { sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is forcing re-reading of HELP files", get_oper_name(source_p)); - clear_help_hash(); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; load_help(); } @@ -267,14 +255,16 @@ static void rehash_nickdelay(struct Client *source_p) { struct nd_entry *nd; - dlink_node *ptr; - dlink_node *safe_ptr; + rb_dlink_node *ptr; + rb_dlink_node *safe_ptr; sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is clearing the nick delay table", get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; - DLINK_FOREACH_SAFE(ptr, safe_ptr, nd_list.head) + RB_DLINK_FOREACH_SAFE(ptr, safe_ptr, nd_list.head) { nd = ptr->data; @@ -289,13 +279,12 @@ static struct hash_commands rehash_commands[] = {"DNS", rehash_dns }, {"MOTD", rehash_motd }, {"OMOTD", rehash_omotd }, - {"GLINES", rehash_glines }, - {"PGLINES", rehash_pglines }, {"TKLINES", rehash_tklines }, {"TDLINES", rehash_tdlines }, {"TXLINES", rehash_txlines }, {"TRESVS", rehash_tresvs }, {"REJECTCACHE", rehash_rejectcache }, + {"THROTTLES", rehash_throttles }, {"HELP", rehash_help }, {"NICKDELAY", rehash_nickdelay }, {NULL, NULL } @@ -317,9 +306,10 @@ do_rehash(struct Client *source_p, const char *type) { sendto_one(source_p, form_str(RPL_REHASHING), me.name, source_p->name, rehash_commands[x].cmd); - rehash_commands[x].handler(source_p); ilog(L_MAIN, "REHASH %s From %s[%s]", type, get_oper_name(source_p), source_p->sockhost); + rehash_commands[x].handler(source_p); + remote_rehash_oper_p = NULL; return; } } @@ -329,8 +319,8 @@ do_rehash(struct Client *source_p, const char *type) for (x = 0; rehash_commands[x].cmd != NULL && rehash_commands[x].handler != NULL; x++) { - strlcat(cmdbuf, " ", sizeof(cmdbuf)); - strlcat(cmdbuf, rehash_commands[x].cmd, sizeof(cmdbuf)); + rb_strlcat(cmdbuf, " ", sizeof(cmdbuf)); + rb_strlcat(cmdbuf, rehash_commands[x].cmd, sizeof(cmdbuf)); } sendto_one_notice(source_p, ":rehash one of:%s", cmdbuf); } @@ -340,9 +330,12 @@ do_rehash(struct Client *source_p, const char *type) ConfigFileEntry.configfile); sendto_realops_snomask(SNO_GENERAL, L_ALL, "%s is rehashing server config file", get_oper_name(source_p)); + if (!MyConnect(source_p)) + remote_rehash_oper_p = source_p; ilog(L_MAIN, "REHASH From %s[%s]", get_oper_name(source_p), source_p->sockhost); rehash(0); + remote_rehash_oper_p = NULL; } }