mirror of
https://github.com/matrix-construct/construct
synced 2024-11-29 18:22:50 +01:00
Check +bq against underlying IPv4 as well.
As with k/dlines, exceptions (here +eI) are not checked.
This commit is contained in:
parent
fe74401bf0
commit
1c60de9757
1 changed files with 21 additions and 1 deletions
|
@ -41,6 +41,7 @@
|
||||||
#include "s_conf.h" /* ConfigFileEntry, ConfigChannel */
|
#include "s_conf.h" /* ConfigFileEntry, ConfigChannel */
|
||||||
#include "s_newconf.h"
|
#include "s_newconf.h"
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
|
#include "ipv4_from_ipv6.h"
|
||||||
|
|
||||||
struct config_channel_entry ConfigChannel;
|
struct config_channel_entry ConfigChannel;
|
||||||
rb_dlink_list global_channel_list;
|
rb_dlink_list global_channel_list;
|
||||||
|
@ -531,7 +532,10 @@ is_banned_list(struct Channel *chptr, rb_dlink_list *list,
|
||||||
char src_host[NICKLEN + USERLEN + HOSTLEN + 6];
|
char src_host[NICKLEN + USERLEN + HOSTLEN + 6];
|
||||||
char src_iphost[NICKLEN + USERLEN + HOSTLEN + 6];
|
char src_iphost[NICKLEN + USERLEN + HOSTLEN + 6];
|
||||||
char src_althost[NICKLEN + USERLEN + HOSTLEN + 6];
|
char src_althost[NICKLEN + USERLEN + HOSTLEN + 6];
|
||||||
|
char src_ip4host[NICKLEN + USERLEN + HOSTLEN + 6];
|
||||||
char *s3 = NULL;
|
char *s3 = NULL;
|
||||||
|
char *s4 = NULL;
|
||||||
|
struct sockaddr_in ip4;
|
||||||
rb_dlink_node *ptr;
|
rb_dlink_node *ptr;
|
||||||
struct Ban *actualBan = NULL;
|
struct Ban *actualBan = NULL;
|
||||||
struct Ban *actualExcept = NULL;
|
struct Ban *actualExcept = NULL;
|
||||||
|
@ -564,6 +568,17 @@ is_banned_list(struct Channel *chptr, rb_dlink_list *list,
|
||||||
s3 = src_althost;
|
s3 = src_althost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef RB_IPV6
|
||||||
|
if(who->localClient->ip.ss_family == AF_INET6 &&
|
||||||
|
ipv4_from_ipv6((const struct sockaddr_in6 *)&who->localClient->ip, &ip4))
|
||||||
|
{
|
||||||
|
rb_sprintf(src_ip4host, "%s!%s@", who->name, who->username);
|
||||||
|
s4 = src_ip4host + strlen(src_ip4host);
|
||||||
|
rb_inet_ntop_sock((struct sockaddr *)&ip4,
|
||||||
|
s4, src_ip4host + sizeof src_ip4host - s4);
|
||||||
|
s4 = src_ip4host;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
RB_DLINK_FOREACH(ptr, list->head)
|
RB_DLINK_FOREACH(ptr, list->head)
|
||||||
{
|
{
|
||||||
|
@ -572,7 +587,12 @@ is_banned_list(struct Channel *chptr, rb_dlink_list *list,
|
||||||
match(actualBan->banstr, s2) ||
|
match(actualBan->banstr, s2) ||
|
||||||
match_cidr(actualBan->banstr, s2) ||
|
match_cidr(actualBan->banstr, s2) ||
|
||||||
match_extban(actualBan->banstr, who, chptr, CHFL_BAN) ||
|
match_extban(actualBan->banstr, who, chptr, CHFL_BAN) ||
|
||||||
(s3 != NULL && match(actualBan->banstr, s3)))
|
(s3 != NULL && match(actualBan->banstr, s3))
|
||||||
|
#ifdef RB_IPV6
|
||||||
|
||
|
||||||
|
(s4 != NULL && (match(actualBan->banstr, s4) || match_cidr(actualBan->banstr, s4)))
|
||||||
|
#endif
|
||||||
|
)
|
||||||
break;
|
break;
|
||||||
else
|
else
|
||||||
actualBan = NULL;
|
actualBan = NULL;
|
||||||
|
|
Loading…
Reference in a new issue