generates HACK(4) snomask notice for accountability with oper as source
probably needs some work (for one i simply copied the header from m_kick.c)
-diff -r d7557937c1ab include/handlers.h
---- a/include/handlers.h Mon Jan 26 12:42:49 2009 +0100
-+++ b/include/handlers.h Mon Jan 26 12:47:29 2009 +0100
+diff -r a77bd3d09dec include/client.h
+--- a/include/client.h Tue Feb 03 18:16:21 2009 +0100
++++ b/include/client.h Tue Feb 03 18:40:09 2009 +0100
+@@ -116,6 +116,8 @@
+ PRIV_LOCAL_JUPE, /**< oper can local JUPE */
+ PRIV_OPMODE, /**< oper can OP/CLEARMODE */
+ PRIV_LOCAL_OPMODE, /**< oper can local OP/CLEARMODE */
++ PRIV_OPKICK, /**< oper can OPKICK */
++ PRIV_LOCAL_OPKICK, /**< oper can local OPKICK */
+ PRIV_SET, /**< oper can SET */
+ PRIV_WHOX, /**< oper can use /who x */
+ PRIV_BADCHAN, /**< oper can BADCHAN */
+diff -r a77bd3d09dec include/handlers.h
+--- a/include/handlers.h Tue Feb 03 18:16:21 2009 +0100
++++ b/include/handlers.h Tue Feb 03 18:40:09 2009 +0100
@@ -167,6 +167,7 @@
extern int mo_kill(struct Client*, struct Client*, int, char*[]);
extern int mo_notice(struct Client*, struct Client*, int, char*[]);
extern int ms_opmode(struct Client*, struct Client*, int, char*[]);
extern int ms_part(struct Client*, struct Client*, int, char*[]);
extern int ms_ping(struct Client*, struct Client*, int, char*[]);
-diff -r d7557937c1ab include/ircd_features.h
---- a/include/ircd_features.h Mon Jan 26 12:42:49 2009 +0100
-+++ b/include/ircd_features.h Mon Jan 26 12:47:29 2009 +0100
+diff -r a77bd3d09dec include/ircd_features.h
+--- a/include/ircd_features.h Tue Feb 03 18:16:21 2009 +0100
++++ b/include/ircd_features.h Tue Feb 03 18:40:09 2009 +0100
@@ -105,6 +105,7 @@
/* features that affect all operators */
FEAT_EXTENDED_CHECKCMD,
FEAT_SETHOST,
FEAT_SETHOST_USER,
FEAT_SETHOST_AUTO,
-diff -r d7557937c1ab include/msg.h
---- a/include/msg.h Mon Jan 26 12:42:49 2009 +0100
-+++ b/include/msg.h Mon Jan 26 12:47:29 2009 +0100
+diff -r a77bd3d09dec include/msg.h
+--- a/include/msg.h Tue Feb 03 18:16:21 2009 +0100
++++ b/include/msg.h Tue Feb 03 18:40:09 2009 +0100
@@ -236,6 +236,10 @@
#define TOK_KICK "K"
#define CMD_KICK MSG_KICK, TOK_KICK
#define MSG_USERHOST "USERHOST" /* USER -> USRH */
#define TOK_USERHOST "USERHOST"
#define CMD_USERHOST MSG_USERHOST, TOK_USERHOST
-diff -r d7557937c1ab ircd/Makefile.in
---- a/ircd/Makefile.in Mon Jan 26 12:42:49 2009 +0100
-+++ b/ircd/Makefile.in Mon Jan 26 12:47:29 2009 +0100
+diff -r a77bd3d09dec ircd/Makefile.in
+--- a/ircd/Makefile.in Tue Feb 03 18:16:21 2009 +0100
++++ b/ircd/Makefile.in Tue Feb 03 18:40:09 2009 +0100
@@ -151,6 +151,7 @@
m_nick.c \
m_notice.c \
m_opmode.o: m_opmode.c ../config.h ../include/client.h \
../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \
../include/ircd_events.h ../config.h ../include/ircd_handler.h \
-diff -r d7557937c1ab ircd/ircd_features.c
---- a/ircd/ircd_features.c Mon Jan 26 12:42:49 2009 +0100
-+++ b/ircd/ircd_features.c Mon Jan 26 12:47:29 2009 +0100
+diff -r a77bd3d09dec ircd/client.c
+--- a/ircd/client.c Tue Feb 03 18:16:21 2009 +0100
++++ b/ircd/client.c Tue Feb 03 18:40:09 2009 +0100
+@@ -174,6 +174,7 @@
+ FlagSet(&privs_local, PRIV_LOCAL_GLINE);
+ FlagSet(&privs_local, PRIV_LOCAL_JUPE);
+ FlagSet(&privs_local, PRIV_LOCAL_OPMODE);
++ FlagSet(&privs_local, PRIV_LOCAL_OPKICK);
+ FlagSet(&privs_local, PRIV_WHOX);
+ FlagSet(&privs_local, PRIV_DISPLAY);
+ FlagSet(&privs_local, PRIV_FORCE_LOCAL_OPMODE);
+@@ -222,6 +223,7 @@
+ ClrPriv(client, PRIV_GLINE);
+ ClrPriv(client, PRIV_JUPE);
+ ClrPriv(client, PRIV_OPMODE);
++ ClrPriv(client, PRIV_OPKICK);
+ ClrPriv(client, PRIV_BADCHAN);
+ }
+ }
+@@ -237,7 +239,8 @@
+ P(SHOW_INVIS), P(SHOW_ALL_INVIS), P(UNLIMIT_QUERY), P(KILL),
+ P(LOCAL_KILL), P(REHASH), P(RESTART), P(DIE),
+ P(GLINE), P(LOCAL_GLINE), P(JUPE), P(LOCAL_JUPE),
+- P(OPMODE), P(LOCAL_OPMODE), P(SET), P(WHOX),
++ P(OPMODE), P(LOCAL_OPMODE), P(OPKICK), P(LOCAL_OPKICK),
++ P(SET), P(WHOX),
+ P(BADCHAN), P(LOCAL_BADCHAN), P(SEE_CHAN), P(PROPAGATE),
+ P(DISPLAY), P(SEE_OPERS), P(WIDE_GLINE), P(LIST_CHAN),
+ P(FORCE_OPMODE), P(FORCE_LOCAL_OPMODE), P(APASS_OPMODE),
+diff -r a77bd3d09dec ircd/ircd_features.c
+--- a/ircd/ircd_features.c Tue Feb 03 18:16:21 2009 +0100
++++ b/ircd/ircd_features.c Tue Feb 03 18:40:09 2009 +0100
@@ -359,6 +359,7 @@
/* features that affect all operators */
F_B(EXTENDED_CHECKCMD, 0, 0, 0),
F_B(SETHOST, 0, 0, 0),
F_B(SETHOST_USER, 0, 0, 0),
F_B(SETHOST_AUTO, 0, 0, 0),
-diff -r d7557937c1ab ircd/m_opkick.c
+diff -r a77bd3d09dec ircd/ircd_lexer.l
+--- a/ircd/ircd_lexer.l Tue Feb 03 18:16:21 2009 +0100
++++ b/ircd/ircd_lexer.l Tue Feb 03 18:40:09 2009 +0100
+@@ -132,11 +132,13 @@
+ { "local_jupe", TPRIV_LOCAL_JUPE },
+ { "local_kill", TPRIV_LOCAL_KILL },
+ { "local_opmode", TPRIV_LOCAL_OPMODE },
++ { "local_opkick", TPRIV_LOCAL_OPKICK },
+ { "mb", MBYTES },
+ { "megabytes", MBYTES },
+ { "mode_lchan", TPRIV_MODE_LCHAN },
+ { "operator", OPER },
+ { "opmode", TPRIV_OPMODE },
++ { "opkick", TPRIV_OPKICK },
+ { "password", PASS },
+ { "propagate", TPRIV_PROPAGATE },
+ { "realname", REAL },
+diff -r a77bd3d09dec ircd/ircd_parser.y
+--- a/ircd/ircd_parser.y Tue Feb 03 18:16:21 2009 +0100
++++ b/ircd/ircd_parser.y Tue Feb 03 18:40:09 2009 +0100
+@@ -182,7 +182,8 @@
+ %token TPRIV_CHAN_LIMIT TPRIV_MODE_LCHAN TPRIV_DEOP_LCHAN TPRIV_WALK_LCHAN
+ %token TPRIV_LOCAL_KILL TPRIV_REHASH TPRIV_RESTART TPRIV_DIE
+ %token TPRIV_GLINE TPRIV_LOCAL_GLINE TPRIV_LOCAL_JUPE TPRIV_LOCAL_BADCHAN
+-%token TPRIV_LOCAL_OPMODE TPRIV_OPMODE TPRIV_SET TPRIV_WHOX TPRIV_BADCHAN
++%token TPRIV_LOCAL_OPMODE TPRIV_OPMODE TPRIV_LOCAL_OPKICK TPRIV_OPKICK
++%token TPRIV_SET TPRIV_WHOX TPRIV_BADCHAN
+ %token TPRIV_SEE_CHAN TPRIV_SHOW_INVIS TPRIV_SHOW_ALL_INVIS TPRIV_PROPAGATE
+ %token TPRIV_UNLIMIT_QUERY TPRIV_DISPLAY TPRIV_SEE_OPERS TPRIV_WIDE_GLINE
+ %token TPRIV_FORCE_OPMODE TPRIV_FORCE_LOCAL_OPMODE TPRIV_APASS_OPMODE
+@@ -672,6 +673,8 @@
+ TPRIV_LOCAL_JUPE { $$ = PRIV_LOCAL_JUPE; } |
+ TPRIV_LOCAL_OPMODE { $$ = PRIV_LOCAL_OPMODE; } |
+ TPRIV_OPMODE { $$ = PRIV_OPMODE; }|
++ TPRIV_LOCAL_OPKICK { $$ = PRIV_LOCAL_OPKICK; }|
++ TPRIV_OPKICK { $$ = PRIV_OPKICK; }|
+ TPRIV_SET { $$ = PRIV_SET; } |
+ TPRIV_WHOX { $$ = PRIV_WHOX; } |
+ TPRIV_BADCHAN { $$ = PRIV_BADCHAN; } |
+diff -r a77bd3d09dec ircd/m_opkick.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
-+++ b/ircd/m_opkick.c Mon Jan 26 12:47:29 2009 +0100
++++ b/ircd/m_opkick.c Tue Feb 03 18:40:09 2009 +0100
@@ -0,0 +1,231 @@
+/*
+ * IRC - Internet Relay Chat, ircd/m_opkick.c
+ if (!(chptr = get_channel(sptr, name, CGT_NO_CREATE)))
+ return send_reply(sptr, ERR_NOSUCHCHANNEL, name);
+
-+ if (!HasPriv(sptr, IsLocalChannel(chptr->chname) ? PRIV_LOCAL_OPMODE : PRIV_OPMODE))
++ if (!HasPriv(sptr, IsLocalChannel(chptr->chname) ? PRIV_LOCAL_OPKICK : PRIV_OPKICK))
+ return send_reply(sptr, ERR_NOPRIVILEGES);
+
+ if (!(who = find_chasing(sptr, parv[2], 0, 1)))
+{
+ struct Client *who;
+ struct Channel *chptr;
-+ struct Membership *member = 0, *sptr_link = 0;
++ struct Membership *member = 0;
+ char *name, *comment;
+
+ ClrFlag(sptr, FLAG_TS8);
+ }
+ return 0;
+}
-diff -r d7557937c1ab ircd/parse.c
---- a/ircd/parse.c Mon Jan 26 12:42:49 2009 +0100
-+++ b/ircd/parse.c Mon Jan 26 12:47:29 2009 +0100
+diff -r a77bd3d09dec ircd/parse.c
+--- a/ircd/parse.c Tue Feb 03 18:16:21 2009 +0100
++++ b/ircd/parse.c Tue Feb 03 18:40:09 2009 +0100
@@ -656,6 +656,17 @@
0, MAXPARA, MFLG_SLOW, 0, NULL,
{ m_unregistered, m_not_oper, m_check, m_check, m_ignore }