X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/62d289465fbe0c51a6a86f642f8b88d7b44bcb47..6abfcc55d0633e93af512c2679dc33a767960334:/src/s_newconf.c diff --git a/src/s_newconf.c b/src/s_newconf.c index c4ba39d..b26be9d 100644 --- a/src/s_newconf.c +++ b/src/s_newconf.c @@ -43,7 +43,6 @@ #include "hostmask.h" #include "newconf.h" #include "hash.h" -#include "sprintf_irc.h" #include "irc_dictionary.h" rb_dlink_list shared_conf_list; @@ -58,18 +57,21 @@ rb_dlink_list tgchange_list; rb_patricia_tree_t *tgchange_tree; -static BlockHeap *nd_heap = NULL; +static rb_bh *nd_heap = NULL; static void expire_temp_rxlines(void *unused); static void expire_nd_entries(void *unused); +struct ev_entry *expire_nd_entries_ev = NULL; +struct ev_entry *expire_temp_rxlines_ev = NULL; + void init_s_newconf(void) { - tgchange_tree = New_Patricia(PATRICIA_BITS); - nd_heap = BlockHeapCreate(sizeof(struct nd_entry), ND_HEAP_SIZE); - eventAddIsh("expire_nd_entries", expire_nd_entries, NULL, 30); - eventAddIsh("expire_temp_rxlines", expire_temp_rxlines, NULL, 60); + tgchange_tree = rb_new_patricia(PATRICIA_BITS); + nd_heap = rb_bh_create(sizeof(struct nd_entry), ND_HEAP_SIZE, "nd_heap"); + expire_nd_entries_ev = rb_event_addish("expire_nd_entries", expire_nd_entries, NULL, 30); + expire_temp_rxlines_ev = rb_event_addish("expire_temp_rxlines", expire_temp_rxlines, NULL, 60); } void @@ -203,7 +205,7 @@ propagate_generic(struct Client *source_p, const char *command, va_list args; va_start(args, format); - ircvsnprintf(buffer, sizeof(buffer), format, args); + rb_vsnprintf(buffer, sizeof(buffer), format, args); va_end(args); sendto_match_servs(source_p, target, cap, NOCAPS, @@ -224,7 +226,7 @@ cluster_generic(struct Client *source_p, const char *command, rb_dlink_node *ptr; va_start(args, format); - ircvsnprintf(buffer, sizeof(buffer), format, args); + rb_vsnprintf(buffer, sizeof(buffer), format, args); va_end(args); RB_DLINK_FOREACH(ptr, cluster_conf_list.head) @@ -281,7 +283,7 @@ struct oper_conf * find_oper_conf(const char *username, const char *host, const char *locip, const char *name) { struct oper_conf *oper_p; - struct irc_sockaddr_storage ip, cip; + struct rb_sockaddr_storage ip, cip; char addr[HOSTLEN+1]; int bits, cbits; rb_dlink_node *ptr; @@ -296,7 +298,7 @@ find_oper_conf(const char *username, const char *host, const char *locip, const if(irccmp(oper_p->name, name) || !match(oper_p->username, username)) continue; - strlcpy(addr, oper_p->host, sizeof(addr)); + rb_strlcpy(addr, oper_p->host, sizeof(addr)); if(parse_netmask(addr, (struct sockaddr *)&ip, &bits) != HM_HOST) { @@ -316,56 +318,6 @@ find_oper_conf(const char *username, const char *host, const char *locip, const return NULL; } -struct oper_flags -{ - int flag; - char has; - char hasnt; -}; -static struct oper_flags oper_flagtable[] = -{ - { OPER_GLINE, 'G', 'g' }, - { OPER_KLINE, 'K', 'k' }, - { OPER_XLINE, 'X', 'x' }, - { OPER_RESV, 'Q', 'q' }, - { OPER_GLOBKILL, 'O', 'o' }, - { OPER_LOCKILL, 'C', 'c' }, - { OPER_REMOTE, 'R', 'r' }, - { OPER_UNKLINE, 'U', 'u' }, - { OPER_REHASH, 'H', 'h' }, - { OPER_DIE, 'D', 'd' }, - { OPER_ADMIN, 'A', 'a' }, - { OPER_NICKS, 'N', 'n' }, - { OPER_OPERWALL, 'L', 'l' }, - { OPER_SPY, 'S', 's' }, - { OPER_INVIS, 'P', 'p' }, - { OPER_REMOTEBAN, 'B', 'b' }, - { OPER_MASSNOTICE, 'M', 'm' }, - { 0, '\0', '\0' } -}; - -const char * -get_oper_privs(int flags) -{ - static char buf[20]; - char *p; - int i; - - p = buf; - - for(i = 0; oper_flagtable[i].flag; i++) - { - if(flags & oper_flagtable[i].flag) - *p++ = oper_flagtable[i].has; - else - *p++ = oper_flagtable[i].hasnt; - } - - *p = '\0'; - - return buf; -} - struct server_conf * make_server_conf(void) { @@ -487,7 +439,7 @@ detach_server_conf(struct Client *client_p) } void -set_server_conf_autoconn(struct Client *source_p, char *name, int newval) +set_server_conf_autoconn(struct Client *source_p, const char *name, int newval) { struct server_conf *server_p; @@ -506,6 +458,24 @@ set_server_conf_autoconn(struct Client *source_p, char *name, int newval) sendto_one_notice(source_p, ":Can't find %s", name); } +void +disable_server_conf_autoconn(const char *name) +{ + struct server_conf *server_p; + + server_p = find_server_conf(name); + if(server_p != NULL && server_p->flags & SERVER_AUTOCONN) + { + server_p->flags &= ~SERVER_AUTOCONN; + + sendto_realops_snomask(SNO_GENERAL, L_ALL, + "Disabling AUTOCONN for %s because of error", + name); + ilog(L_SERVER, "Disabling AUTOCONN for %s because of error", + name); + } +} + struct ConfItem * find_xline(const char *gecos, int counter) { @@ -693,7 +663,7 @@ expire_temp_rxlines(void *unused) { aconf = ptr->data; - if(aconf->hold && aconf->hold <= CurrentTime) + if(aconf->hold && aconf->hold <= rb_current_time()) { if(ConfigFileEntry.tkline_expire_notices) sendto_realops_snomask(SNO_GENERAL, L_ALL, @@ -710,7 +680,7 @@ expire_temp_rxlines(void *unused) { aconf = ptr->data; - if(aconf->hold && aconf->hold <= CurrentTime) + if(aconf->hold && aconf->hold <= rb_current_time()) { if(ConfigFileEntry.tkline_expire_notices) sendto_realops_snomask(SNO_GENERAL, L_ALL, @@ -725,7 +695,7 @@ expire_temp_rxlines(void *unused) { aconf = ptr->data; - if(aconf->hold && aconf->hold <= CurrentTime) + if(aconf->hold && aconf->hold <= rb_current_time()) { if(ConfigFileEntry.tkline_expire_notices) sendto_realops_snomask(SNO_GENERAL, L_ALL, @@ -751,10 +721,10 @@ add_nd_entry(const char *name) if(irc_dictionary_find(nd_dict, name) != NULL) return; - nd = BlockHeapAlloc(nd_heap); + nd = rb_bh_alloc(nd_heap); - strlcpy(nd->name, name, sizeof(nd->name)); - nd->expire = CurrentTime + ConfigFileEntry.nick_delay; + rb_strlcpy(nd->name, name, sizeof(nd->name)); + nd->expire = rb_current_time() + ConfigFileEntry.nick_delay; /* this list is ordered */ rb_dlinkAddTail(nd, &nd->lnode, &nd_list); @@ -768,7 +738,7 @@ free_nd_entry(struct nd_entry *nd) irc_dictionary_delete(nd_dict, nd->name); rb_dlinkDelete(&nd->lnode, &nd_list); - BlockHeapFree(nd_heap, nd); + rb_bh_free(nd_heap, nd); } void @@ -785,7 +755,7 @@ expire_nd_entries(void *unused) /* this list is ordered - we can stop when we hit the first * entry that doesnt expire.. */ - if(nd->expire > CurrentTime) + if(nd->expire > rb_current_time()) return; free_nd_entry(nd); @@ -796,7 +766,7 @@ void add_tgchange(const char *host) { tgchange *target; - patricia_node_t *pnode; + rb_patricia_node_t *pnode; if(find_tgchange(host)) return; @@ -808,7 +778,7 @@ add_tgchange(const char *host) target->pnode = pnode; target->ip = rb_strdup(host); - target->expiry = CurrentTime + (60*60*12); + target->expiry = rb_current_time() + (60*60*12); rb_dlinkAdd(target, &target->node, &tgchange_list); } @@ -816,9 +786,9 @@ add_tgchange(const char *host) tgchange * find_tgchange(const char *host) { - patricia_node_t *pnode; + rb_patricia_node_t *pnode; - if((pnode = match_exact_string(tgchange_tree, host))) + if((pnode = rb_match_exact_string(tgchange_tree, host))) return pnode->data; return NULL;