]> jfr.im git - irc/quakenet/snircd-patchqueue.git/blob - ischannelservice.patch
whonoidle: hide idle time of users with mode +I in non-HIS setup in WHO
[irc/quakenet/snircd-patchqueue.git] / ischannelservice.patch
1 Added new define in include/client.h
2 IsRealChannelService() - client has usermode +k and is on a services server (+s flag)
3
4 Function ms_invite did not return an error when the source was a channel service,
5 that should only be for a real channel service.
6
7 diff -r 48ace0dc0261 include/client.h
8 --- a/include/client.h Wed Mar 17 14:34:56 2010 +0100
9 +++ b/include/client.h Wed Mar 17 14:50:51 2010 +0100
10 @@ -568,6 +568,8 @@
11 #define IsBurstOrBurstAck(x) (HasFlag(x, FLAG_BURST) || HasFlag(x, FLAG_BURST_ACK))
12 /** Return non-zero if the client has set mode +k (channel service). */
13 #define IsChannelService(x) HasFlag(x, FLAG_CHSERV)
14 +/** Return non-zero if the client has set mode +k (channel service) and is on a service server */
15 +#define IsRealChannelService(x) (IsChannelService(x) && IsService(cli_user(x)->server))
16 /** Return non-zero if the client's socket is disconnected. */
17 #define IsDead(x) HasFlag(x, FLAG_DEADSOCKET)
18 /** Return non-zero if the client has set mode +d (deaf). */
19 diff -r 48ace0dc0261 ircd/channel.c
20 --- a/ircd/channel.c Wed Mar 17 14:34:56 2010 +0100
21 +++ b/ircd/channel.c Wed Mar 17 14:50:51 2010 +0100
22 @@ -180,7 +180,7 @@
23 * however there are typically no more than 1000 people in a channel
24 * at a time.
25 */
26 - if (IsChannelService(cptr)) {
27 + if (IsRealChannelService(cptr)) {
28 m = chptr->members;
29 while (m) {
30 assert(m->channel == chptr);
31 @@ -3176,7 +3176,7 @@
32 * Allow +X'ed users to mess with +k'ed.
33 * --Bigfoot
34 */
35 - if ((IsChannelService(state->cli_change[i].client) && IsService(cli_user(state->cli_change[i].client)->server)) || (IsChannelService(state->cli_change[i].client) && !IsXtraOp(state->sptr))) {
36 + if ((IsRealChannelService(state->cli_change[i].client)) || (IsChannelService(state->cli_change[i].client) && !IsXtraOp(state->sptr))) {
37 if (state->flags & MODE_PARSE_FORCE) /* it was forced */
38 sendto_opmask_butone(0, SNO_HACK4, "Deop of +k user on %H by %s",
39 state->chptr,
40 @@ -3184,7 +3184,7 @@
41 cli_name((cli_user(state->sptr))->server)));
42
43 else if (MyUser(state->sptr) && state->flags & MODE_PARSE_SET && (state->sptr != state->cli_change[i].client)) {
44 - if(IsService(cli_user(state->cli_change[i].client)->server) && IsChannelService(state->cli_change[i].client)){
45 + if(IsRealChannelService(state->cli_change[i].client)){
46 send_reply(state->sptr, ERR_ISREALSERVICE,
47 cli_name(state->cli_change[i].client),
48 state->chptr->chname);
49 @@ -3641,7 +3641,7 @@
50 if (!(flags & (CHFL_ZOMBIE | CHFL_DELAYED)))
51 sendcmdto_channel_butserv_butone(jbuf->jb_source, CMD_PART, chan, NULL, 0,
52 ((flags & CHFL_BANNED) || ((chan->mode.mode & MODE_NOQUITPARTS)
53 - && !IsChannelService(member->user)) || !jbuf->jb_comment) ?
54 + && !IsRealChannelService(member->user)) || !jbuf->jb_comment) ?
55 "%H" : "%H :%s", chan, jbuf->jb_comment);
56 else if (MyUser(jbuf->jb_source))
57 sendcmdto_one(jbuf->jb_source, CMD_PART, jbuf->jb_source,
58 diff -r 48ace0dc0261 ircd/ircd_relay.c
59 --- a/ircd/ircd_relay.c Wed Mar 17 14:34:56 2010 +0100
60 +++ b/ircd/ircd_relay.c Wed Mar 17 14:50:51 2010 +0100
61 @@ -205,7 +205,7 @@
62 * This first: Almost never a server/service
63 * Servers may have channel services, need to check for it here
64 */
65 - if (client_can_send_to_channel(sptr, chptr, 1) || IsChannelService(sptr)) {
66 + if (client_can_send_to_channel(sptr, chptr, 1) || IsRealChannelService(sptr)) {
67 sendcmdto_channel_butone(sptr, CMD_PRIVATE, chptr, cli_from(sptr),
68 SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text);
69 }
70 @@ -233,7 +233,7 @@
71 * This first: Almost never a server/service
72 * Servers may have channel services, need to check for it here
73 */
74 - if (client_can_send_to_channel(sptr, chptr, 1) || IsChannelService(sptr)) {
75 + if (client_can_send_to_channel(sptr, chptr, 1) || IsRealChannelService(sptr)) {
76 sendcmdto_channel_butone(sptr, CMD_NOTICE, chptr, cli_from(sptr),
77 SKIP_DEAF | SKIP_BURST, "%H :%s", chptr, text);
78 }
79 @@ -290,7 +290,7 @@
80 */
81 if (!(acptr = FindUser(name)) || !MyUser(acptr) ||
82 (!EmptyString(host) && 0 != match(host, cli_user(acptr)->host)) ||
83 - !IsChannelService(acptr))
84 + !IsRealChannelService(acptr))
85 {
86 /*
87 * By this stage we might as well not bother because they will
88 @@ -385,7 +385,7 @@
89 send_reply(sptr, ERR_NOSUCHNICK, name);
90 return;
91 }
92 - if ((!IsChannelService(acptr) &&
93 + if ((!IsRealChannelService(acptr) &&
94 check_target_limit(sptr, acptr, cli_name(acptr), 0)) ||
95 is_silenced(sptr, acptr))
96 return;
97 @@ -431,7 +431,7 @@
98
99 if (0 == (acptr = FindUser(name)))
100 return;
101 - if ((!IsChannelService(acptr) &&
102 + if ((!IsRealChannelService(acptr) &&
103 check_target_limit(sptr, acptr, cli_name(acptr), 0)) ||
104 is_silenced(sptr, acptr))
105 return;
106 diff -r 48ace0dc0261 ircd/m_invite.c
107 --- a/ircd/m_invite.c Wed Mar 17 14:34:56 2010 +0100
108 +++ b/ircd/m_invite.c Wed Mar 17 14:50:51 2010 +0100
109 @@ -271,7 +271,7 @@
110 } else if (IsBurstOrBurstAck(cptr))
111 return 0;
112
113 - if (!IsChannelService(sptr) && !find_channel_member(sptr, chptr)) {
114 + if (!IsRealChannelService(sptr) && !find_channel_member(sptr, chptr)) {
115 send_reply(sptr, ERR_NOTONCHANNEL, chptr->chname);
116 return 0;
117 }
118 diff -r 48ace0dc0261 ircd/m_kick.c
119 --- a/ircd/m_kick.c Wed Mar 17 14:34:56 2010 +0100
120 +++ b/ircd/m_kick.c Wed Mar 17 14:50:51 2010 +0100
121 @@ -136,17 +136,14 @@
122 * Allow +X'ed users to kick +k'ed, but not U-lined services.
123 * --Bigfoot
124 */
125 - if (IsChannelService(who)) {
126 - if (IsService(cli_user(who)->server))
127 - return send_reply(sptr, ERR_ISREALSERVICE, cli_name(who), chptr->chname);
128 + if (IsRealChannelService(who))
129 + return send_reply(sptr, ERR_ISREALSERVICE, cli_name(who), chptr->chname);
130
131 - if (!IsXtraOp(sptr) && (who!=sptr)) {
132 - /* the victim is paranoid AND on the channel but not a zombie - wiebe */
133 - if (IsParanoid(who) && (member = find_member_link(chptr, who)) && !IsZombie(member)) {
134 - sendcmdto_one(&me, CMD_NOTICE, who, "%C :kick: %s tried to /KICK you from %s.", who, cli_name(sptr), chptr->chname);
135 - }
136 - return send_reply(sptr, ERR_ISCHANSERVICE, cli_name(who), chptr->chname);
137 - }
138 + if (IsChannelService(who) && !IsXtraOp(sptr) && (who!=sptr)) {
139 + /* the victim is paranoid AND on the channel but not a zombie */
140 + if (IsParanoid(who) && (member = find_member_link(chptr, who)) && !IsZombie(member))
141 + sendcmdto_one(&me, CMD_NOTICE, who, "%C :kick: %s tried to /KICK you from %s.", who, cli_name(sptr), chptr->chname);
142 + return send_reply(sptr, ERR_ISCHANSERVICE, cli_name(who), chptr->chname);
143 }
144
145 /* Prevent kicking opers from local channels -DM- */
146 diff -r 48ace0dc0261 ircd/m_kill.c
147 --- a/ircd/m_kill.c Wed Mar 17 14:34:56 2010 +0100
148 +++ b/ircd/m_kill.c Wed Mar 17 14:50:51 2010 +0100
149 @@ -293,7 +293,7 @@
150 * Allow +X'ed users to kill +k'ed, but not U-lined services.
151 * --Bigfoot
152 */
153 - if (IsChannelService(victim) && IsService(cli_user(victim)->server))
154 + if (IsRealChannelService(victim))
155 return send_reply(sptr, ERR_ISREALSERVICE, "KILL", cli_name(victim));
156
157 if (IsChannelService(victim) && !IsXtraOp(sptr) && !(victim==sptr))
158 diff -r 48ace0dc0261 ircd/m_silence.c
159 --- a/ircd/m_silence.c Wed Mar 17 14:34:56 2010 +0100
160 +++ b/ircd/m_silence.c Wed Mar 17 14:50:51 2010 +0100
161 @@ -289,7 +289,7 @@
162 /* See if the user is requesting a silence list. */
163 acptr = sptr;
164 if (parc < 2 || EmptyString(parv[1]) || (acptr = FindUser(parv[1]))) {
165 - if (cli_user(acptr) && ((acptr == sptr) || IsChannelService(acptr))) {
166 + if (cli_user(acptr) && ((acptr == sptr) || IsRealChannelService(acptr))) {
167 for (sile = cli_user(acptr)->silence; sile; sile = sile->next) {
168 send_reply(sptr, RPL_SILELIST, cli_name(acptr),
169 (sile->flags & BAN_EXCEPTION ? "~" : ""), sile->banstr);