Make KICK and INVITE send snotes on override.
This commit is contained in:
parent
220c9db54d
commit
fbd2e5da56
|
@ -37,6 +37,7 @@
|
|||
#include "hash.h"
|
||||
#include "packet.h"
|
||||
#include "s_serv.h"
|
||||
#include "s_conf.h"
|
||||
#include "hook.h"
|
||||
|
||||
static int m_kick(struct Client *, struct Client *, int, const char **);
|
||||
|
@ -69,6 +70,7 @@ m_kick(struct Client *client_p, struct Client *source_p, int parc, const char *p
|
|||
char *p = NULL;
|
||||
const char *user;
|
||||
static char buf[BUFSIZE];
|
||||
int is_override = 0;
|
||||
|
||||
if(MyClient(source_p) && !IsFloodDone(source_p))
|
||||
flood_endgrace(source_p);
|
||||
|
@ -104,17 +106,22 @@ m_kick(struct Client *client_p, struct Client *source_p, int parc, const char *p
|
|||
return 0;
|
||||
}
|
||||
|
||||
if(!can_kick_deop(msptr, find_channel_membership(chptr, who)) && !IsOverride(source_p))
|
||||
if(!can_kick_deop(msptr, find_channel_membership(chptr, who)))
|
||||
{
|
||||
if(MyConnect(source_p))
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
|
||||
me.name, source_p->name, name);
|
||||
return 0;
|
||||
if(IsOverride(source_p))
|
||||
is_override = 1;
|
||||
else
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
|
||||
me.name, source_p->name, name);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* If its a TS 0 channel, do it the old way */
|
||||
if(chptr->channelts == 0)
|
||||
else if(chptr->channelts == 0)
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
|
||||
get_id(&me, source_p), get_id(source_p, source_p), name);
|
||||
|
@ -185,6 +192,11 @@ m_kick(struct Client *client_p, struct Client *source_p, int parc, const char *p
|
|||
if(strlen(comment) > (size_t) REASONLEN)
|
||||
comment[REASONLEN] = '\0';
|
||||
|
||||
if(is_override)
|
||||
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
|
||||
"%s is overriding KICK [%s] on [%s] [%s]",
|
||||
get_oper_name(source_p), who->name, chptr->chname, comment);
|
||||
|
||||
/* jdc
|
||||
* - In the case of a server kicking a user (i.e. CLEARCHAN),
|
||||
* the kick should show up as coming from the server which did
|
||||
|
|
|
@ -145,12 +145,19 @@ m_invite(struct Client *client_p, struct Client *source_p, int parc, const char
|
|||
|
||||
/* unconditionally require ops, unless the channel is +g */
|
||||
/* treat remote clients as chanops */
|
||||
if(MyClient(source_p) && !is_any_op(msptr) && !IsOverride(source_p) &&
|
||||
if(MyClient(source_p) && !is_any_op(msptr) &&
|
||||
!(chptr->mode.mode & MODE_FREEINVITE))
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
|
||||
me.name, source_p->name, parv[2]);
|
||||
return 0;
|
||||
if(IsOverride(source_p))
|
||||
sendto_realops_snomask(SNO_GENERAL, L_NETWIDE,
|
||||
"%s is overriding INVITE [%s] on [%s]",
|
||||
get_oper_name(source_p), target_p->name, chptr->chname);
|
||||
else
|
||||
{
|
||||
sendto_one(source_p, form_str(ERR_CHANOPRIVSNEEDED),
|
||||
me.name, source_p->name, parv[2]);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (IsSetNoInvite(target_p))
|
||||
|
|
Loading…
Reference in New Issue