-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathischannelservice.patch
169 lines (161 loc) · 7.82 KB
/
ischannelservice.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
Added new define in include/client.h
IsRealChannelService() - client has usermode +k and is on a services server (+s flag)
Function ms_invite did not return an error when the source was a channel service,
that should only be for a real channel service.
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). */
#define IsChannelService(x) HasFlag(x, FLAG_CHSERV)
+/** Return non-zero if the client has set mode +k (channel service) and is on a service server */
+#define IsRealChannelService(x) (IsChannelService(x) && IsService(cli_user(x)->server))
/** 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 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.
*/
- if (IsChannelService(cptr)) {
+ if (IsRealChannelService(cptr)) {
m = chptr->members;
while (m) {
assert(m->channel == chptr);
@@ -3176,7 +3176,7 @@
* Allow +X'ed users to mess with +k'ed.
* --Bigfoot
*/
- 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))) {
+ if ((IsRealChannelService(state->cli_change[i].client)) || (IsChannelService(state->cli_change[i].client) && !IsXtraOp(state->sptr))) {
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,
@@ -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)) {
- if(IsService(cli_user(state->cli_change[i].client)->server) && IsChannelService(state->cli_change[i].client)){
+ if(IsRealChannelService(state->cli_change[i].client)){
send_reply(state->sptr, ERR_ISREALSERVICE,
cli_name(state->cli_change[i].client),
state->chptr->chname);
@@ -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;
- if (!IsChannelService(sptr) && !find_channel_member(sptr, chptr)) {
+ if (!IsRealChannelService(sptr) && !find_channel_member(sptr, chptr)) {
send_reply(sptr, ERR_NOTONCHANNEL, chptr->chname);
return 0;
}
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
*/
- if (IsChannelService(who)) {
- if (IsService(cli_user(who)->server))
- return send_reply(sptr, ERR_ISREALSERVICE, cli_name(who), chptr->chname);
+ if (IsRealChannelService(who))
+ return send_reply(sptr, ERR_ISREALSERVICE, cli_name(who), chptr->chname);
- if (!IsXtraOp(sptr) && (who!=sptr)) {
- /* the victim is paranoid AND on the channel but not a zombie - wiebe */
- if (IsParanoid(who) && (member = find_member_link(chptr, who)) && !IsZombie(member)) {
- sendcmdto_one(&me, CMD_NOTICE, who, "%C :kick: %s tried to /KICK you from %s.", who, cli_name(sptr), chptr->chname);
- }
- return send_reply(sptr, ERR_ISCHANSERVICE, cli_name(who), chptr->chname);
- }
+ if (IsChannelService(who) && !IsXtraOp(sptr) && (who!=sptr)) {
+ /* the victim is paranoid AND on the channel but not a zombie */
+ if (IsParanoid(who) && (member = find_member_link(chptr, who)) && !IsZombie(member))
+ sendcmdto_one(&me, CMD_NOTICE, who, "%C :kick: %s tried to /KICK you from %s.", who, cli_name(sptr), chptr->chname);
+ return send_reply(sptr, ERR_ISCHANSERVICE, cli_name(who), chptr->chname);
}
/* Prevent kicking opers from local channels -DM- */
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
*/
- if (IsChannelService(victim) && IsService(cli_user(victim)->server))
+ if (IsRealChannelService(victim))
return send_reply(sptr, ERR_ISREALSERVICE, "KILL", cli_name(victim));
if (IsChannelService(victim) && !IsXtraOp(sptr) && !(victim==sptr))
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);