When checking if a nick resv or xline already exists, match exact not wild.
This is important because masks containing @ or # do not match themselves.
This commit is contained in:
parent
c0bc9fe39a
commit
0fdb257090
5 changed files with 41 additions and 5 deletions
|
@ -237,7 +237,9 @@ extern void set_server_conf_autoconn(struct Client *source_p, char *name,
|
||||||
|
|
||||||
|
|
||||||
extern struct ConfItem *find_xline(const char *, int);
|
extern struct ConfItem *find_xline(const char *, int);
|
||||||
|
extern struct ConfItem *find_xline_mask(const char *);
|
||||||
extern struct ConfItem *find_nick_resv(const char *name);
|
extern struct ConfItem *find_nick_resv(const char *name);
|
||||||
|
extern struct ConfItem *find_nick_resv_mask(const char *name);
|
||||||
|
|
||||||
extern int valid_wild_card_simple(const char *);
|
extern int valid_wild_card_simple(const char *);
|
||||||
extern int clean_resv_nick(const char *);
|
extern int clean_resv_nick(const char *);
|
||||||
|
|
|
@ -264,7 +264,7 @@ parse_resv(struct Client *source_p, const char *name,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(find_nick_resv(name))
|
if(find_nick_resv_mask(name))
|
||||||
{
|
{
|
||||||
sendto_one_notice(source_p,
|
sendto_one_notice(source_p,
|
||||||
":A RESV has already been placed on nick: %s",
|
":A RESV has already been placed on nick: %s",
|
||||||
|
|
|
@ -156,7 +156,7 @@ mo_xline(struct Client *client_p, struct Client *source_p, int parc, const char
|
||||||
else if(dlink_list_length(&cluster_conf_list) > 0)
|
else if(dlink_list_length(&cluster_conf_list) > 0)
|
||||||
cluster_xline(source_p, temp_time, name, reason);
|
cluster_xline(source_p, temp_time, name, reason);
|
||||||
|
|
||||||
if((aconf = find_xline(name, 0)) != NULL)
|
if((aconf = find_xline_mask(name)) != NULL)
|
||||||
{
|
{
|
||||||
sendto_one(source_p, ":%s NOTICE %s :[%s] already X-Lined by [%s] - %s",
|
sendto_one(source_p, ":%s NOTICE %s :[%s] already X-Lined by [%s] - %s",
|
||||||
me.name, source_p->name, parv[1], aconf->name, aconf->passwd);
|
me.name, source_p->name, parv[1], aconf->name, aconf->passwd);
|
||||||
|
@ -220,7 +220,7 @@ handle_remote_xline(struct Client *source_p, int temp_time,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* already xlined */
|
/* already xlined */
|
||||||
if((aconf = find_xline(name, 0)) != NULL)
|
if((aconf = find_xline_mask(name)) != NULL)
|
||||||
{
|
{
|
||||||
sendto_one_notice(source_p, ":[%s] already X-Lined by [%s] - %s", name, aconf->name, aconf->passwd);
|
sendto_one_notice(source_p, ":[%s] already X-Lined by [%s] - %s", name, aconf->name, aconf->passwd);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -177,7 +177,7 @@ parse_x_file(FILE * file)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* sanity checking */
|
/* sanity checking */
|
||||||
if((find_xline(gecos_field, 0) != NULL) ||
|
if((find_xline_mask(gecos_field) != NULL) ||
|
||||||
(strchr(reason_field, ':') != NULL))
|
(strchr(reason_field, ':') != NULL))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -231,7 +231,7 @@ parse_resv_file(FILE * file)
|
||||||
}
|
}
|
||||||
else if(clean_resv_nick(host_field))
|
else if(clean_resv_nick(host_field))
|
||||||
{
|
{
|
||||||
if(find_nick_resv(host_field))
|
if(find_nick_resv_mask(host_field))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
aconf = make_conf();
|
aconf = make_conf();
|
||||||
|
|
|
@ -528,6 +528,23 @@ find_xline(const char *gecos, int counter)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ConfItem *
|
||||||
|
find_xline_mask(const char *gecos)
|
||||||
|
{
|
||||||
|
struct ConfItem *aconf;
|
||||||
|
dlink_node *ptr;
|
||||||
|
|
||||||
|
DLINK_FOREACH(ptr, xline_conf_list.head)
|
||||||
|
{
|
||||||
|
aconf = ptr->data;
|
||||||
|
|
||||||
|
if(!irccmp(aconf->name, gecos))
|
||||||
|
return aconf;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
struct ConfItem *
|
struct ConfItem *
|
||||||
find_nick_resv(const char *name)
|
find_nick_resv(const char *name)
|
||||||
{
|
{
|
||||||
|
@ -548,6 +565,23 @@ find_nick_resv(const char *name)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ConfItem *
|
||||||
|
find_nick_resv_mask(const char *name)
|
||||||
|
{
|
||||||
|
struct ConfItem *aconf;
|
||||||
|
dlink_node *ptr;
|
||||||
|
|
||||||
|
DLINK_FOREACH(ptr, resv_conf_list.head)
|
||||||
|
{
|
||||||
|
aconf = ptr->data;
|
||||||
|
|
||||||
|
if(!irccmp(aconf->name, name))
|
||||||
|
return aconf;
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* clean_resv_nick()
|
/* clean_resv_nick()
|
||||||
*
|
*
|
||||||
* inputs - nick
|
* inputs - nick
|
||||||
|
|
Loading…
Reference in a new issue