This is designed to stop the spam bots which sit outside a channel, while a spy sits inside, preventing channel operators dealing with the problem.
We currently also block invites, this might not be such a good idea, but these days everyone can get Q.
-diff -r 3825aab95440 include/channel.h
---- a/include/channel.h Mon Aug 10 14:18:18 2009 +0100
-+++ b/include/channel.h Mon Aug 10 14:18:25 2009 +0100
+diff -r 956791aea86c include/channel.h
+--- a/include/channel.h Sat Jul 20 14:57:18 2013 +0100
++++ b/include/channel.h Sat Jul 20 14:57:59 2013 +0100
@@ -463,5 +463,6 @@
extern void free_ban(struct Ban *ban);
+extern int common_chan_count(struct Client *a, struct Client *b, int max);
#endif /* INCLUDED_channel_h */
-diff -r 3825aab95440 include/client.h
---- a/include/client.h Mon Aug 10 14:18:18 2009 +0100
-+++ b/include/client.h Mon Aug 10 14:18:25 2009 +0100
+diff -r 956791aea86c include/client.h
+--- a/include/client.h Sat Jul 20 14:57:18 2013 +0100
++++ b/include/client.h Sat Jul 20 14:57:59 2013 +0100
@@ -90,7 +90,7 @@
#define FlagClr(set,flag) ((set)->bits[FLAGSET_INDEX(flag)] &= ~FLAGSET_MASK(flag))
/** String containing valid user modes, in no particular order. */
--#define infousermodes "dioOswkgxRXInP"
-+#define infousermodes "dioOswkgxRXInPq"
+-#define infousermodes "diOoswkghxRXInP"
++#define infousermodes "diOoswkghxRXInPq"
/** Character to indicate no oper name available */
#define NOOPERNAMECHARACTER '-'
-@@ -194,7 +194,8 @@
+@@ -191,6 +191,8 @@
+ FLAG_NOCHAN, /**< user's channels are hidden */
FLAG_NOIDLE, /**< user's idletime is hidden */
FLAG_XTRAOP, /**< oper has special powers */
- FLAG_OPERNAME, /**< Server sends oper name in mode string */
--
+ FLAG_COMMONCHANSONLY, /**< SNIRCD_q: hide privmsgs/notices if in no
+ common channels (with +ok exceptions) */
+
FLAG_LAST_FLAG, /**< number of flags */
FLAG_LOCAL_UMODES = FLAG_LOCOP, /**< First local mode flag */
- FLAG_GLOBAL_UMODES = FLAG_OPER /**< First global mode flag */
-@@ -626,6 +627,8 @@
+@@ -625,6 +627,8 @@
#define IsParanoid(x) HasFlag(x, FLAG_PARANOID)
/** Return non-zero if the server should send opername information */
#define IsSendOperName(x) HasFlag(x, FLAG_OPERNAME)
/** Return non-zero if the client has operator or server privileges. */
#define IsPrivileged(x) (IsAnOper(x) || IsServer(x))
-@@ -689,6 +692,8 @@
+@@ -691,6 +695,8 @@
#define SetAccountOnly(x) SetFlag(x, FLAG_ACCOUNTONLY)
/** Mark a client as having mode +P (paranoid). */
#define SetParanoid(x) SetFlag(x, FLAG_PARANOID)
/** Return non-zero if \a sptr sees \a acptr as an operator. */
#define SeeOper(sptr,acptr) (IsAnOper(acptr) && (HasPriv(acptr, PRIV_DISPLAY) \
-@@ -736,6 +741,8 @@
+@@ -740,6 +746,8 @@
#define ClearAccountOnly(x) ClrFlag(x, FLAG_ACCOUNTONLY)
/** Remove mode +P (paranoid) from a client */
#define ClearParanoid(x) ClrFlag(x, FLAG_PARANOID)
/* free flags */
#define FREEFLAG_SOCKET 0x0001 /**< socket needs to be freed */
-diff -r 3825aab95440 include/numeric.h
---- a/include/numeric.h Mon Aug 10 14:18:18 2009 +0100
-+++ b/include/numeric.h Mon Aug 10 14:18:25 2009 +0100
-@@ -421,6 +421,7 @@
+diff -r 956791aea86c include/numeric.h
+--- a/include/numeric.h Sat Jul 20 14:57:18 2013 +0100
++++ b/include/numeric.h Sat Jul 20 14:57:59 2013 +0100
+@@ -420,6 +420,7 @@
/* ERR_HTMDISABLED 486 unreal */
#define ERR_ACCOUNTONLY 486 /* QuakeNet/ASUKA extension */
/* ERR_CHANTOORECENT 487 IRCnet extension (?) */
/* ERR_TSLESSCHAN 488 IRCnet extension (?) */
#define ERR_VOICENEEDED 489 /* Undernet extension */
-diff -r 3825aab95440 ircd/channel.c
---- a/ircd/channel.c Mon Aug 10 14:18:18 2009 +0100
-+++ b/ircd/channel.c Mon Aug 10 14:18:25 2009 +0100
-@@ -3804,3 +3804,39 @@
+diff -r 956791aea86c ircd/channel.c
+--- a/ircd/channel.c Sat Jul 20 14:57:18 2013 +0100
++++ b/ircd/channel.c Sat Jul 20 14:57:59 2013 +0100
+@@ -3819,3 +3819,39 @@
return marker;
}
+
+ return count;
+}
-diff -r 3825aab95440 ircd/ircd_relay.c
---- a/ircd/ircd_relay.c Mon Aug 10 14:18:18 2009 +0100
-+++ b/ircd/ircd_relay.c Mon Aug 10 14:18:25 2009 +0100
-@@ -309,6 +309,10 @@
+diff -r 956791aea86c ircd/ircd_relay.c
+--- a/ircd/ircd_relay.c Sat Jul 20 14:57:18 2013 +0100
++++ b/ircd/ircd_relay.c Sat Jul 20 14:57:59 2013 +0100
+@@ -310,6 +310,10 @@
if (IsAccountOnly(acptr) && !IsAccount(sptr) && !IsXtraOp(sptr))
- return;
+ return;
+ /* slug: same applies here, since only opers can be +k */
+ if (IsCommonChansOnly(acptr) && !IsXtraOp(sptr) && !common_chan_count(acptr, sptr, 1))
if (!(is_silenced(sptr, acptr)))
sendcmdto_one(sptr, CMD_PRIVATE, acptr, "%s :%s", name, text);
}
-@@ -361,6 +365,9 @@
+@@ -362,6 +366,9 @@
if (IsAccountOnly(acptr) && !IsAccount(sptr) && !IsXtraOp(sptr))
return;
if (!(is_silenced(sptr, acptr)))
sendcmdto_one(sptr, CMD_NOTICE, acptr, "%s :%s", name, text);
}
-@@ -400,6 +407,11 @@
+@@ -401,6 +408,11 @@
return;
}
/*
* send away message if user away
*/
-@@ -444,6 +456,9 @@
+@@ -445,6 +457,9 @@
if (IsAccountOnly(acptr) && !IsAccount(sptr) && !IsXtraOp(sptr))
return;
/*
* deliver the message
*/
-diff -r 3825aab95440 ircd/m_invite.c
---- a/ircd/m_invite.c Mon Aug 10 14:18:18 2009 +0100
-+++ b/ircd/m_invite.c Mon Aug 10 14:18:25 2009 +0100
+diff -r 956791aea86c ircd/m_invite.c
+--- a/ircd/m_invite.c Sat Jul 20 14:57:18 2013 +0100
++++ b/ircd/m_invite.c Sat Jul 20 14:57:59 2013 +0100
@@ -171,6 +171,9 @@
return 0;
}
if (check_target_limit(sptr, acptr, cli_name(acptr), 0))
return 0;
-diff -r 3825aab95440 ircd/s_err.c
---- a/ircd/s_err.c Mon Aug 10 14:18:18 2009 +0100
-+++ b/ircd/s_err.c Mon Aug 10 14:18:25 2009 +0100
+diff -r 956791aea86c ircd/s_err.c
+--- a/ircd/s_err.c Sat Jul 20 14:57:18 2013 +0100
++++ b/ircd/s_err.c Sat Jul 20 14:57:59 2013 +0100
@@ -1006,7 +1006,7 @@
/* 486 */
{ ERR_ACCOUNTONLY, "%s :You must be authed in order to message this user -- For details of how to obtain an account visit %s", "486" },
/* 488 */
{ 0 },
/* 489 */
-diff -r 3825aab95440 ircd/s_user.c
---- a/ircd/s_user.c Mon Aug 10 14:18:18 2009 +0100
-+++ b/ircd/s_user.c Mon Aug 10 14:18:25 2009 +0100
-@@ -546,7 +546,8 @@
+diff -r 956791aea86c ircd/s_user.c
+--- a/ircd/s_user.c Sat Jul 20 14:57:18 2013 +0100
++++ b/ircd/s_user.c Sat Jul 20 14:57:59 2013 +0100
+@@ -540,7 +540,8 @@
{ FLAG_NOCHAN, 'n' },
{ FLAG_NOIDLE, 'I' },
{ FLAG_SETHOST, 'h' },
};
/** Length of #userModeList. */
-@@ -857,7 +858,9 @@
+@@ -851,7 +852,9 @@
send_reply(source, ERR_ACCOUNTONLY, cli_name(dest), feature_str(FEAT_URLREG));
return 0;
}
if (is_notice)
sendcmdto_one(source, CMD_NOTICE, dest, "%C :%s", dest, text);
else
-@@ -1429,6 +1432,12 @@
+@@ -1319,6 +1322,12 @@
else
ClearParanoid(sptr);
break;