Add check_one_kline, expose notify_banned_client
This commit is contained in:
parent
c87c8e5bfe
commit
10df26d08f
2 changed files with 75 additions and 7 deletions
|
@ -578,9 +578,16 @@ struct ListClient
|
|||
#define SHOW_IP 1
|
||||
#define MASK_IP 2
|
||||
|
||||
enum
|
||||
{
|
||||
D_LINED,
|
||||
K_LINED
|
||||
};
|
||||
|
||||
extern void check_banned_lines(void);
|
||||
extern void check_klines_event(void *unused);
|
||||
extern void check_klines(void);
|
||||
extern void check_one_kline(struct ConfItem *kline);
|
||||
extern void check_dlines(void);
|
||||
extern void check_xlines(void);
|
||||
extern void resv_nick_fnc(const char *mask, const char *reason, int temp_time);
|
||||
|
@ -592,6 +599,7 @@ extern void init_client(void);
|
|||
extern struct Client *make_client(struct Client *from);
|
||||
extern void free_pre_client(struct Client *client);
|
||||
|
||||
extern void notify_banned_client(struct Client *, struct ConfItem *, int ban);
|
||||
extern int exit_client(struct Client *, struct Client *, struct Client *, const char *);
|
||||
|
||||
extern void error_exit_client(struct Client *, int);
|
||||
|
|
|
@ -80,12 +80,6 @@ static uint32_t current_connid = 0;
|
|||
|
||||
rb_dictionary *nd_dict = NULL;
|
||||
|
||||
enum
|
||||
{
|
||||
D_LINED,
|
||||
K_LINED
|
||||
};
|
||||
|
||||
rb_dlink_list dead_list;
|
||||
#ifdef DEBUG_EXITED_CLIENTS
|
||||
static rb_dlink_list dead_remote_list;
|
||||
|
@ -487,7 +481,7 @@ check_unknowns_list(rb_dlink_list * list)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
notify_banned_client(struct Client *client_p, struct ConfItem *aconf, int ban)
|
||||
{
|
||||
static const char conn_closed[] = "Connection closed";
|
||||
|
@ -587,6 +581,72 @@ check_klines(void)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
/* check_one_kline()
|
||||
*
|
||||
* inputs - pointer to kline to check
|
||||
* outputs -
|
||||
* side effects - all clients will be checked against given kline
|
||||
*/
|
||||
void
|
||||
check_one_kline(struct ConfItem *kline)
|
||||
{
|
||||
struct Client *client_p;
|
||||
rb_dlink_node *ptr;
|
||||
rb_dlink_node *next_ptr;
|
||||
|
||||
RB_DLINK_FOREACH_SAFE(ptr, next_ptr, lclient_list.head)
|
||||
{
|
||||
client_p = ptr->data;
|
||||
|
||||
if(IsMe(client_p) || !IsPerson(client_p))
|
||||
continue;
|
||||
|
||||
if(!match(kline->user, client_p->username))
|
||||
continue;
|
||||
|
||||
/* match one kline */
|
||||
{
|
||||
int matched = 0;
|
||||
int masktype;
|
||||
int bits;
|
||||
struct rb_sockaddr_storage sockaddr;
|
||||
|
||||
masktype = parse_netmask(kline->host, (struct sockaddr *)&sockaddr, &bits);
|
||||
|
||||
switch (masktype) {
|
||||
case HM_IPV4:
|
||||
case HM_IPV6:
|
||||
if(comp_with_mask_sock((struct sockaddr *)&client_p->localClient->ip,
|
||||
(struct sockaddr *)&sockaddr, bits))
|
||||
matched = 1;
|
||||
case HM_HOST:
|
||||
if (match(kline->host, client_p->orighost))
|
||||
matched = 1;
|
||||
}
|
||||
|
||||
if (!matched)
|
||||
continue;
|
||||
}
|
||||
|
||||
if(IsExemptKline(client_p))
|
||||
{
|
||||
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
|
||||
"KLINE over-ruled for %s, client is kline_exempt [%s@%s]",
|
||||
get_client_name(client_p, HIDE_IP),
|
||||
kline->user, kline->host);
|
||||
continue;
|
||||
}
|
||||
|
||||
sendto_realops_snomask(SNO_GENERAL, L_ALL,
|
||||
"KLINE active for %s",
|
||||
get_client_name(client_p, HIDE_IP));
|
||||
|
||||
notify_banned_client(client_p, kline, K_LINED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* check_dlines()
|
||||
*
|
||||
* inputs -
|
||||
|
|
Loading…
Reference in a new issue