diff options
author | michael <michael@82007160-df01-0410-b94d-b575c5fd34c7> | 2013-04-14 19:54:48 +0000 |
---|---|---|
committer | michael <michael@82007160-df01-0410-b94d-b575c5fd34c7> | 2013-04-14 19:54:48 +0000 |
commit | 186e3840dc0e313bf4bd2f91555a2dc5b7649ef6 (patch) | |
tree | 940a6e2b82a530751b91cbfffcd9e37002a6d709 /src | |
parent | 08deca61eee50077726f8633b92f8d0e49ac17dd (diff) |
- Quarantined/reserved channels may now contain wildcards
git-svn-id: svn://svn.ircd-hybrid.org/svnroot/ircd-hybrid/trunk@1825 82007160-df01-0410-b94d-b575c5fd34c7
Diffstat (limited to 'src')
-rw-r--r-- | src/conf.c | 18 | ||||
-rw-r--r-- | src/conf_db.c | 4 | ||||
-rw-r--r-- | src/conf_parser.c | 4 | ||||
-rw-r--r-- | src/conf_parser.y | 4 | ||||
-rw-r--r-- | src/resv.c | 49 |
5 files changed, 17 insertions, 62 deletions
@@ -1036,6 +1036,8 @@ map_to_list(enum maskitem_type type) case CONF_NRESV: return(&nresv_items); break; + case CONF_CRESV: + return(&resv_channel_list); case CONF_OPER: return(&oconf_items); break; @@ -1100,6 +1102,7 @@ find_matching_name_conf(enum maskitem_type type, const char *name, const char *u case CONF_XLINE: case CONF_ULINE: case CONF_NRESV: + case CONF_CRESV: DLINK_FOREACH(ptr, list_p->head) { conf = ptr->data; @@ -1161,6 +1164,7 @@ find_exact_name_conf(enum maskitem_type type, const struct Client *who, const ch case CONF_XLINE: case CONF_ULINE: case CONF_NRESV: + case CONF_CRESV: DLINK_FOREACH(ptr, list_p->head) { @@ -1628,20 +1632,13 @@ expire_tklines(dlink_list *tklist) "Temporary X-line for [%s] expired", conf->name); conf_free(conf); } - else if (conf->type == CONF_NRESV) + else if (conf->type == CONF_NRESV || conf->type == CONF_CRESV) { if (ConfigFileEntry.tkline_expire_notices) sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, "Temporary RESV for [%s] expired", conf->name); conf_free(conf); } - else if (conf->type == CONF_CRESV) - { - if (ConfigFileEntry.tkline_expire_notices) - sendto_realops_flags(UMODE_ALL, L_ALL, SEND_NOTICE, - "Temporary RESV for [%s] expired", conf->name); - delete_channel_resv(conf); - } } } @@ -1816,7 +1813,7 @@ clear_out_old_conf(void) dlink_list *free_items [] = { &server_items, &oconf_items, &uconf_items, &xconf_items, &rxconf_items, &rkconf_items, - &nresv_items, &cluster_items, &service_items, NULL + &nresv_items, &cluster_items, &service_items, &resv_channel_list, NULL }; dlink_list ** iterator = free_items; /* C is dumb */ @@ -1891,9 +1888,6 @@ clear_out_old_conf(void) SSL_OP_NO_TLSv1); #endif - /* clean out old resvs from the conf */ - clear_conf_resv(); - /* clean out AdminInfo */ MyFree(AdminInfo.name); AdminInfo.name = NULL; diff --git a/src/conf_db.c b/src/conf_db.c index 798fd14..5fb74da 100644 --- a/src/conf_db.c +++ b/src/conf_db.c @@ -909,7 +909,7 @@ load_resv_database(void) if (IsChanPrefix(*name)) { - if ((conf = create_channel_resv(name, reason, 0)) == NULL) + if ((conf = create_channel_resv(name, reason)) == NULL) continue; conf->setat = tmp64_setat; @@ -918,7 +918,7 @@ load_resv_database(void) } else { - if ((conf = create_nick_resv(name, reason, 0)) == NULL) + if ((conf = create_nick_resv(name, reason)) == NULL) continue; conf->setat = tmp64_setat; diff --git a/src/conf_parser.c b/src/conf_parser.c index ce63850..07c3b10 100644 --- a/src/conf_parser.c +++ b/src/conf_parser.c @@ -4990,9 +4990,9 @@ yyreduce: #line 1714 "conf_parser.y" { if (IsChanPrefix(block_state.name.buf[0])) - create_channel_resv(block_state.name.buf, block_state.rpass.buf, 1); + create_channel_resv(block_state.name.buf, block_state.rpass.buf); else if (block_state.name.buf[0]) - create_nick_resv(block_state.name.buf, block_state.rpass.buf, 1); + create_nick_resv(block_state.name.buf, block_state.rpass.buf); } break; diff --git a/src/conf_parser.y b/src/conf_parser.y index 750a200..4f1a4db 100644 --- a/src/conf_parser.y +++ b/src/conf_parser.y @@ -1713,9 +1713,9 @@ resv_entry: RESV } '{' resv_items '}' ';' { if (IsChanPrefix(block_state.name.buf[0])) - create_channel_resv(block_state.name.buf, block_state.rpass.buf, 1); + create_channel_resv(block_state.name.buf, block_state.rpass.buf); else if (block_state.name.buf[0]) - create_nick_resv(block_state.name.buf, block_state.rpass.buf, 1); + create_nick_resv(block_state.name.buf, block_state.rpass.buf); }; resv_items: resv_items resv_item | resv_item; @@ -49,23 +49,20 @@ dlink_list resv_channel_list = { NULL, NULL, 0 }; * side effects - */ struct MaskItem * -create_channel_resv(char *name, char *reason, int in_conf) +create_channel_resv(const char *name, const char *reason) { struct MaskItem *conf = NULL; if (name == NULL || reason == NULL) return NULL; - if (hash_find_resv(name)) + if (find_exact_name_conf(CONF_CRESV, NULL, name, NULL, NULL)) return NULL; conf = conf_make(CONF_CRESV); conf->name = xstrdup(name); conf->reason = xstrndup(reason, IRCD_MIN(strlen(reason), REASONLEN)); - dlinkAdd(conf, &conf->node, &resv_channel_list); - hash_add_resv(conf); - return conf; } @@ -78,14 +75,14 @@ create_channel_resv(char *name, char *reason, int in_conf) * side effects - */ struct MaskItem * -create_nick_resv(char *name, char *reason, int in_conf) +create_nick_resv(const char *name, const char *reason) { struct MaskItem *conf = NULL; if (name == NULL || reason == NULL) return NULL; - if (find_matching_name_conf(CONF_NRESV, name, NULL, NULL, 0)) + if (find_exact_name_conf(CONF_NRESV, NULL, name, NULL, NULL)) return NULL; conf = conf_make(CONF_NRESV); @@ -95,42 +92,6 @@ create_nick_resv(char *name, char *reason, int in_conf) return conf; } -/* clear_conf_resv() - * - * inputs - none - * output - none - * side effects - All resvs are cleared out - */ -void -clear_conf_resv(void) -{ - dlink_node *ptr = NULL, *next_ptr = NULL; - - DLINK_FOREACH_SAFE(ptr, next_ptr, resv_channel_list.head) - { - struct MaskItem *conf = ptr->data; - - if (!IsConfDatabase(conf)) - delete_channel_resv(conf); - } -} - -/* delete_channel_resv() - * - * inputs - pointer to channel resv to delete - * output - none - * side effects - given struct ResvChannel * is removed - */ -int -delete_channel_resv(struct MaskItem *conf) -{ - hash_del_resv(conf); - dlinkDelete(&conf->node, &resv_channel_list); - conf_free(conf); - - return 1; -} - /* match_find_resv() * * inputs - pointer to name @@ -150,7 +111,7 @@ match_find_resv(const char *name) { struct MaskItem *conf = ptr->data; - if (!match(name, conf->name)) + if (!match(conf->name, name)) return conf; } |