Move flood_attack_channel to channel.c so it can be used outside m_message.c
This commit is contained in:
parent
ee41c3c6cf
commit
5323ec7352
|
@ -231,6 +231,8 @@ extern void destroy_channel(struct Channel *);
|
||||||
|
|
||||||
extern int can_send(struct Channel *chptr, struct Client *who,
|
extern int can_send(struct Channel *chptr, struct Client *who,
|
||||||
struct membership *);
|
struct membership *);
|
||||||
|
extern int flood_attack_channel(int p_or_n, struct Client *source_p,
|
||||||
|
struct Channel *chptr, char *chname);
|
||||||
extern int is_banned(struct Channel *chptr, struct Client *who,
|
extern int is_banned(struct Channel *chptr, struct Client *who,
|
||||||
struct membership *msptr, const char *, const char *);
|
struct membership *msptr, const char *, const char *);
|
||||||
extern int is_quieted(struct Channel *chptr, struct Client *who,
|
extern int is_quieted(struct Channel *chptr, struct Client *who,
|
||||||
|
|
|
@ -92,8 +92,6 @@ static int build_target_list(int p_or_n, const char *command,
|
||||||
struct Client *source_p, const char *nicks_channels, const char *text);
|
struct Client *source_p, const char *nicks_channels, const char *text);
|
||||||
|
|
||||||
static int flood_attack_client(int p_or_n, struct Client *source_p, struct Client *target_p);
|
static int flood_attack_client(int p_or_n, struct Client *source_p, struct Client *target_p);
|
||||||
static int flood_attack_channel(int p_or_n, struct Client *source_p,
|
|
||||||
struct Channel *chptr, char *chname);
|
|
||||||
|
|
||||||
/* Fifteen seconds should be plenty for a client to reply a ctcp */
|
/* Fifteen seconds should be plenty for a client to reply a ctcp */
|
||||||
#define LARGE_CTCP_TIME 15
|
#define LARGE_CTCP_TIME 15
|
||||||
|
@ -969,63 +967,6 @@ flood_attack_client(int p_or_n, struct Client *source_p, struct Client *target_p
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* flood_attack_channel
|
|
||||||
* inputs - flag 0 if PRIVMSG 1 if NOTICE. RFC
|
|
||||||
* says NOTICE must not auto reply
|
|
||||||
* - pointer to source Client
|
|
||||||
* - pointer to target channel
|
|
||||||
* output - 1 if target is under flood attack
|
|
||||||
* side effects - check for flood attack on target chptr
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
flood_attack_channel(int p_or_n, struct Client *source_p, struct Channel *chptr, char *chname)
|
|
||||||
{
|
|
||||||
int delta;
|
|
||||||
|
|
||||||
if(GlobalSetOptions.floodcount && MyClient(source_p) && (!IsOper(source_p) || !ConfigFileEntry.true_no_oper_flood))
|
|
||||||
{
|
|
||||||
if((chptr->first_received_message_time + 1) < rb_current_time())
|
|
||||||
{
|
|
||||||
delta = rb_current_time() - chptr->first_received_message_time;
|
|
||||||
chptr->received_number_of_privmsgs -= delta;
|
|
||||||
chptr->first_received_message_time = rb_current_time();
|
|
||||||
if(chptr->received_number_of_privmsgs <= 0)
|
|
||||||
{
|
|
||||||
chptr->received_number_of_privmsgs = 0;
|
|
||||||
chptr->flood_noticed = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if((chptr->received_number_of_privmsgs >= GlobalSetOptions.floodcount)
|
|
||||||
|| chptr->flood_noticed)
|
|
||||||
{
|
|
||||||
if(chptr->flood_noticed == 0)
|
|
||||||
{
|
|
||||||
sendto_realops_snomask(SNO_BOTS, *chptr->chname == '&' ? L_ALL : L_NETWIDE,
|
|
||||||
"Possible Flooder %s[%s@%s] on %s target: %s",
|
|
||||||
source_p->name, source_p->username,
|
|
||||||
source_p->orighost,
|
|
||||||
source_p->servptr->name, chptr->chname);
|
|
||||||
chptr->flood_noticed = 1;
|
|
||||||
|
|
||||||
/* Add a bit of penalty */
|
|
||||||
chptr->received_number_of_privmsgs += 2;
|
|
||||||
}
|
|
||||||
if(MyClient(source_p) && (p_or_n != NOTICE))
|
|
||||||
sendto_one(source_p,
|
|
||||||
":%s NOTICE %s :*** Message to %s throttled due to flooding",
|
|
||||||
me.name, source_p->name, chptr->chname);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
chptr->received_number_of_privmsgs++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* handle_special
|
* handle_special
|
||||||
*
|
*
|
||||||
|
|
|
@ -987,6 +987,62 @@ can_send(struct Channel *chptr, struct Client *source_p, struct membership *mspt
|
||||||
return CAN_SEND_NONOP;
|
return CAN_SEND_NONOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* flood_attack_channel
|
||||||
|
* inputs - flag 0 if PRIVMSG 1 if NOTICE. RFC
|
||||||
|
* says NOTICE must not auto reply
|
||||||
|
* - pointer to source Client
|
||||||
|
* - pointer to target channel
|
||||||
|
* output - 1 if target is under flood attack
|
||||||
|
* side effects - check for flood attack on target chptr
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
flood_attack_channel(int p_or_n, struct Client *source_p, struct Channel *chptr, char *chname)
|
||||||
|
{
|
||||||
|
int delta;
|
||||||
|
|
||||||
|
if(GlobalSetOptions.floodcount && MyClient(source_p) && (!IsOper(source_p) || !ConfigFileEntry.true_no_oper_flood))
|
||||||
|
{
|
||||||
|
if((chptr->first_received_message_time + 1) < rb_current_time())
|
||||||
|
{
|
||||||
|
delta = rb_current_time() - chptr->first_received_message_time;
|
||||||
|
chptr->received_number_of_privmsgs -= delta;
|
||||||
|
chptr->first_received_message_time = rb_current_time();
|
||||||
|
if(chptr->received_number_of_privmsgs <= 0)
|
||||||
|
{
|
||||||
|
chptr->received_number_of_privmsgs = 0;
|
||||||
|
chptr->flood_noticed = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if((chptr->received_number_of_privmsgs >= GlobalSetOptions.floodcount)
|
||||||
|
|| chptr->flood_noticed)
|
||||||
|
{
|
||||||
|
if(chptr->flood_noticed == 0)
|
||||||
|
{
|
||||||
|
sendto_realops_snomask(SNO_BOTS, *chptr->chname == '&' ? L_ALL : L_NETWIDE,
|
||||||
|
"Possible Flooder %s[%s@%s] on %s target: %s",
|
||||||
|
source_p->name, source_p->username,
|
||||||
|
source_p->orighost,
|
||||||
|
source_p->servptr->name, chptr->chname);
|
||||||
|
chptr->flood_noticed = 1;
|
||||||
|
|
||||||
|
/* Add a bit of penalty */
|
||||||
|
chptr->received_number_of_privmsgs += 2;
|
||||||
|
}
|
||||||
|
if(MyClient(source_p) && (p_or_n != 1))
|
||||||
|
sendto_one(source_p,
|
||||||
|
":%s NOTICE %s :*** Message to %s throttled due to flooding",
|
||||||
|
me.name, source_p->name, chptr->chname);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
chptr->received_number_of_privmsgs++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* find_bannickchange_channel()
|
/* find_bannickchange_channel()
|
||||||
* Input: client to check
|
* Input: client to check
|
||||||
* Output: channel preventing nick change
|
* Output: channel preventing nick change
|
||||||
|
|
Loading…
Reference in New Issue