]>
Commit | Line | Data |
---|---|---|
c8fc5f4b | 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 | ||
78da476d | 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 | |
c8fc5f4b | 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). */ | |
78da476d | 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 | |
c8fc5f4b | 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); | |
78da476d | 31 | @@ -3176,7 +3176,7 @@ |
c8fc5f4b | 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, | |
78da476d | 40 | @@ -3184,7 +3184,7 @@ |
c8fc5f4b | 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); | |
78da476d | 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 | |
c8fc5f4b | 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 | } | |
78da476d | 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 | |
c8fc5f4b | 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- */ | |
78da476d | 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 | |
c8fc5f4b | 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)) | |
78da476d | 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); |