Make KICK and INVITE send snotes on override.

This commit is contained in:
JD Horelick 2010-03-02 13:07:14 -05:00
parent 220c9db54d
commit fbd2e5da56
2 changed files with 28 additions and 9 deletions

View File

@ -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

View File

@ -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))