Function ms_invite did not return an error when the source was a channel service,
that should only be for a real channel service.
-Some places the IsChannelService() check is not changed because it is changed in some of the
-other patches later in the queue.
-
-TODO: keep the side effect of usermode +k that channels are hidden, or leave that soley to usermode +n?
-That is, keep IsChannelService() in whois/who or use IsRealChannelService().
-
-diff -r 979639f84630 include/client.h
---- a/include/client.h Fri Jan 30 15:56:19 2009 +0100
-+++ b/include/client.h Fri Jan 30 16:38:40 2009 +0100
+diff -r 48ace0dc0261 include/client.h
+--- a/include/client.h Wed Mar 17 14:34:56 2010 +0100
++++ b/include/client.h Wed Mar 17 14:50:51 2010 +0100
@@ -568,6 +568,8 @@
#define IsBurstOrBurstAck(x) (HasFlag(x, FLAG_BURST) || HasFlag(x, FLAG_BURST_ACK))
/** Return non-zero if the client has set mode +k (channel service). */
/** Return non-zero if the client's socket is disconnected. */
#define IsDead(x) HasFlag(x, FLAG_DEADSOCKET)
/** Return non-zero if the client has set mode +d (deaf). */
-diff -r 979639f84630 ircd/channel.c
---- a/ircd/channel.c Fri Jan 30 15:56:19 2009 +0100
-+++ b/ircd/channel.c Fri Jan 30 16:38:40 2009 +0100
+diff -r 48ace0dc0261 ircd/channel.c
+--- a/ircd/channel.c Wed Mar 17 14:34:56 2010 +0100
++++ b/ircd/channel.c Wed Mar 17 14:50:51 2010 +0100
@@ -180,7 +180,7 @@
* however there are typically no more than 1000 people in a channel
* at a time.
m = chptr->members;
while (m) {
assert(m->channel == chptr);
-@@ -3190,7 +3190,7 @@
+@@ -3176,7 +3176,7 @@
* Allow +X'ed users to mess with +k'ed.
* --Bigfoot
*/
if (state->flags & MODE_PARSE_FORCE) /* it was forced */
sendto_opmask_butone(0, SNO_HACK4, "Deop of +k user on %H by %s",
state->chptr,
-@@ -3198,7 +3198,7 @@
+@@ -3184,7 +3184,7 @@
cli_name((cli_user(state->sptr))->server)));
else if (MyUser(state->sptr) && state->flags & MODE_PARSE_SET && (state->sptr != state->cli_change[i].client)) {
send_reply(state->sptr, ERR_ISREALSERVICE,
cli_name(state->cli_change[i].client),
state->chptr->chname);
-diff -r 979639f84630 ircd/m_invite.c
---- a/ircd/m_invite.c Fri Jan 30 15:56:19 2009 +0100
-+++ b/ircd/m_invite.c Fri Jan 30 16:38:40 2009 +0100
+@@ -3641,7 +3641,7 @@
+ if (!(flags & (CHFL_ZOMBIE | CHFL_DELAYED)))
+ sendcmdto_channel_butserv_butone(jbuf->jb_source, CMD_PART, chan, NULL, 0,
+ ((flags & CHFL_BANNED) || ((chan->mode.mode & MODE_NOQUITPARTS)
+- && !IsChannelService(member->user)) || !jbuf->jb_comment) ?
++ && !IsRealChannelService(member->user)) || !jbuf->jb_comment) ?
+ "%H" : "%H :%s", chan, jbuf->jb_comment);
+ else if (MyUser(jbuf->jb_source))
+ sendcmdto_one(jbuf->jb_source, CMD_PART, jbuf->jb_source,
+diff -r 48ace0dc0261 ircd/ircd_relay.c
+--- a/ircd/ircd_relay.c Wed Mar 17 14:34:56 2010 +0100
++++ b/ircd/ircd_relay.c Wed Mar 17 14:50:51 2010 +0100
+@@ -205,7 +205,7 @@
+ * This first: Almost never a server/service
+ * Servers may have channel services, need to check for it here
+ */
+- if (client_can_send_to_channel(sptr, chptr, 1) || IsChannelService(sptr)) {
++ if (client_can_send_to_channel(sptr, chptr, 1) || IsRealChannelService(sptr)) {
+ sendcmdto_channel_butone(sptr, CMD_PRIVATE, chptr, cli_from(sptr),
+ SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text);
+ }
+@@ -233,7 +233,7 @@
+ * This first: Almost never a server/service
+ * Servers may have channel services, need to check for it here
+ */
+- if (client_can_send_to_channel(sptr, chptr, 1) || IsChannelService(sptr)) {
++ if (client_can_send_to_channel(sptr, chptr, 1) || IsRealChannelService(sptr)) {
+ sendcmdto_channel_butone(sptr, CMD_NOTICE, chptr, cli_from(sptr),
+ SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text);
+ }
+@@ -290,7 +290,7 @@
+ */
+ if (!(acptr = FindUser(name)) || !MyUser(acptr) ||
+ (!EmptyString(host) && 0 != match(host, cli_user(acptr)->host)) ||
+- !IsChannelService(acptr))
++ !IsRealChannelService(acptr))
+ {
+ /*
+ * By this stage we might as well not bother because they will
+@@ -385,7 +385,7 @@
+ send_reply(sptr, ERR_NOSUCHNICK, name);
+ return;
+ }
+- if ((!IsChannelService(acptr) &&
++ if ((!IsRealChannelService(acptr) &&
+ check_target_limit(sptr, acptr, cli_name(acptr), 0)) ||
+ is_silenced(sptr, acptr))
+ return;
+@@ -431,7 +431,7 @@
+
+ if (0 == (acptr = FindUser(name)))
+ return;
+- if ((!IsChannelService(acptr) &&
++ if ((!IsRealChannelService(acptr) &&
+ check_target_limit(sptr, acptr, cli_name(acptr), 0)) ||
+ is_silenced(sptr, acptr))
+ return;
+diff -r 48ace0dc0261 ircd/m_invite.c
+--- a/ircd/m_invite.c Wed Mar 17 14:34:56 2010 +0100
++++ b/ircd/m_invite.c Wed Mar 17 14:50:51 2010 +0100
@@ -271,7 +271,7 @@
} else if (IsBurstOrBurstAck(cptr))
return 0;
send_reply(sptr, ERR_NOTONCHANNEL, chptr->chname);
return 0;
}
-diff -r 979639f84630 ircd/m_kick.c
---- a/ircd/m_kick.c Fri Jan 30 15:56:19 2009 +0100
-+++ b/ircd/m_kick.c Fri Jan 30 16:38:40 2009 +0100
+diff -r 48ace0dc0261 ircd/m_kick.c
+--- a/ircd/m_kick.c Wed Mar 17 14:34:56 2010 +0100
++++ b/ircd/m_kick.c Wed Mar 17 14:50:51 2010 +0100
@@ -136,17 +136,14 @@
* Allow +X'ed users to kick +k'ed, but not U-lined services.
* --Bigfoot
}
/* Prevent kicking opers from local channels -DM- */
-diff -r 979639f84630 ircd/m_kill.c
---- a/ircd/m_kill.c Fri Jan 30 15:56:19 2009 +0100
-+++ b/ircd/m_kill.c Fri Jan 30 16:38:40 2009 +0100
+diff -r 48ace0dc0261 ircd/m_kill.c
+--- a/ircd/m_kill.c Wed Mar 17 14:34:56 2010 +0100
++++ b/ircd/m_kill.c Wed Mar 17 14:50:51 2010 +0100
@@ -293,7 +293,7 @@
* Allow +X'ed users to kill +k'ed, but not U-lined services.
* --Bigfoot
return send_reply(sptr, ERR_ISREALSERVICE, "KILL", cli_name(victim));
if (IsChannelService(victim) && !IsXtraOp(sptr) && !(victim==sptr))
-diff -r 979639f84630 ircd/m_whois.c
---- a/ircd/m_whois.c Fri Jan 30 15:56:19 2009 +0100
-+++ b/ircd/m_whois.c Fri Jan 30 16:38:40 2009 +0100
-@@ -143,8 +143,13 @@
- send_reply(sptr, RPL_WHOISUSER, name, user->username, user->host,
- cli_info(acptr));
-
-+ /* TODO: IsChannelService or IsRealChannelService?
-+ * we have usermode +n to hide channels already, so could go with the IsReal.. version
-+ * if an oper wants to hide channels too, they can set +n
-+ * in that case also remove || (acptr==sptr)
-+ */
- /* Display the channels this user is on. */
-- if ((!IsChannelService(acptr) && !IsNoChan(acptr)) || (acptr==sptr))
-+ if ((!IsRealChannelService(acptr) && !IsNoChan(acptr)) || (acptr==sptr))
- {
- struct Membership* chan;
- mlen = strlen(cli_name(&me)) + strlen(cli_name(sptr)) + 12 + strlen(name);
-diff -r 979639f84630 ircd/whocmds.c
---- a/ircd/whocmds.c Fri Jan 30 15:56:19 2009 +0100
-+++ b/ircd/whocmds.c Fri Jan 30 16:38:40 2009 +0100
-@@ -94,8 +94,9 @@
- {
- chan = find_channel_member(acptr, repchan);
- }
-+ /* TODO: use IsRealChannelService or IsChannelService? */
- else if ((!fields || (fields & (WHO_FIELD_CHA | WHO_FIELD_FLA)))
-- && !IsChannelService(acptr) && !IsNoChan(acptr))
-+ && !IsRealChannelService(acptr) && !IsNoChan(acptr))
- {
- for (chan = cli_user(acptr)->channel; chan; chan = chan->next_channel)
- if (PubChannel(chan->channel) &&
+diff -r 48ace0dc0261 ircd/m_silence.c
+--- a/ircd/m_silence.c Wed Mar 17 14:34:56 2010 +0100
++++ b/ircd/m_silence.c Wed Mar 17 14:50:51 2010 +0100
+@@ -289,7 +289,7 @@
+ /* See if the user is requesting a silence list. */
+ acptr = sptr;
+ if (parc < 2 || EmptyString(parv[1]) || (acptr = FindUser(parv[1]))) {
+- if (cli_user(acptr) && ((acptr == sptr) || IsChannelService(acptr))) {
++ if (cli_user(acptr) && ((acptr == sptr) || IsRealChannelService(acptr))) {
+ for (sile = cli_user(acptr)->silence; sile; sile = sile->next) {
+ send_reply(sptr, RPL_SILELIST, cli_name(acptr),
+ (sile->flags & BAN_EXCEPTION ? "~" : ""), sile->banstr);