summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>2013-04-14 19:54:48 +0000
committermichael <michael@82007160-df01-0410-b94d-b575c5fd34c7>2013-04-14 19:54:48 +0000
commit186e3840dc0e313bf4bd2f91555a2dc5b7649ef6 (patch)
tree940a6e2b82a530751b91cbfffcd9e37002a6d709 /src
parent08deca61eee50077726f8633b92f8d0e49ac17dd (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.c18
-rw-r--r--src/conf_db.c4
-rw-r--r--src/conf_parser.c4
-rw-r--r--src/conf_parser.y4
-rw-r--r--src/resv.c49
5 files changed, 17 insertions, 62 deletions
diff --git a/src/conf.c b/src/conf.c
index 3d30a86..af5c662 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -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;
diff --git a/src/resv.c b/src/resv.c
index ccb5c11..3ac0490 100644
--- a/src/resv.c
+++ b/src/resv.c
@@ -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;
}