]> jfr.im git - irc/quakenet/snircd-patchqueue.git/blob - chanmodeM
nickgline: include nick! bit in gline loggin
[irc/quakenet/snircd-patchqueue.git] / chanmodeM
1 # HG changeset patch
2 # Parent c623cb9153f1b130586509af13b05e4e63880c7d
3
4 diff -r c623cb9153f1 include/channel.h
5 --- a/include/channel.h Fri Jul 19 20:29:32 2013 +0100
6 +++ b/include/channel.h Fri Jul 19 20:31:50 2013 +0100
7 @@ -118,12 +118,15 @@
8 * pending */
9 #define MODE_NOQUITPARTS 0x800000
10
11 +#define MODE_NOMULTITARGET 0x1000000 /**< +T No multiple targets */
12 +#define MODE_MODERATENOREG 0x2000000 /**< +M Moderate unauthed users */
13 +
14 /** mode flags which take another parameter (With PARAmeterS)
15 */
16 #define MODE_WPARAS (MODE_CHANOP|MODE_VOICE|MODE_BAN|MODE_KEY|MODE_LIMIT|MODE_APASS|MODE_UPASS)
17
18 /** Available Channel modes */
19 -#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AbiklmnopstUvrDdRcCNu" : "biklmnopstvrDdRcCNu"
20 +#define infochanmodes feature_bool(FEAT_OPLEVELS) ? "AbiklmnopstUvrDdRcCNuMT" : "biklmnopstvrDdRcCNuMT"
21 /** Available Channel modes that take parameters */
22 #define infochanmodeswithparams feature_bool(FEAT_OPLEVELS) ? "AbkloUv" : "bklov"
23
24 diff -r c623cb9153f1 include/ircd_features.h
25 --- a/include/ircd_features.h Fri Jul 19 20:29:32 2013 +0100
26 +++ b/include/ircd_features.h Fri Jul 19 20:31:50 2013 +0100
27 @@ -165,6 +165,7 @@
28 FEAT_HIS_SERVERINFO,
29 FEAT_HIS_URLSERVERS,
30 FEAT_HIS_USERGLINE,
31 + FEAT_HIS_LUSERS_ME,
32
33 /* Misc. random stuff */
34 FEAT_NETWORK,
35 diff -r c623cb9153f1 include/ircd_relay.h
36 --- a/include/ircd_relay.h Fri Jul 19 20:29:32 2013 +0100
37 +++ b/include/ircd_relay.h Fri Jul 19 20:31:50 2013 +0100
38 @@ -29,8 +29,8 @@
39
40 struct Client;
41
42 -extern void relay_channel_message(struct Client* sptr, const char* name, const char* text);
43 -extern void relay_channel_notice(struct Client* sptr, const char* name, const char* text);
44 +extern void relay_channel_message(struct Client* sptr, const char* name, const char* text, const int count);
45 +extern void relay_channel_notice(struct Client* sptr, const char* name, const char* text, const int count);
46 extern void relay_directed_message(struct Client* sptr, char* name, char* server, const char* text);
47 extern void relay_directed_notice(struct Client* sptr, char* name, char* server, const char* text);
48 extern void relay_masked_message(struct Client* sptr, const char* mask, const char* text);
49 diff -r c623cb9153f1 include/supported.h
50 --- a/include/supported.h Fri Jul 19 20:29:32 2013 +0100
51 +++ b/include/supported.h Fri Jul 19 20:31:50 2013 +0100
52 @@ -65,7 +65,7 @@
53 #define FEATURESVALUES2 NICKLEN, TOPICLEN, AWAYLEN, TOPICLEN, \
54 feature_int(FEAT_CHANNELLEN), CHANNELLEN, \
55 (feature_bool(FEAT_LOCAL_CHANNELS) ? "#&" : "#"), "(ov)@+", "@+", \
56 - (feature_bool(FEAT_OPLEVELS) ? "b,AkU,l,imnpstrDdRucCN" : "b,k,l,imnpstrDdRucCN"), \
57 + (feature_bool(FEAT_OPLEVELS) ? "b,AkU,l,imnpstrDdRucCNMT" : "b,k,l,imnpstrDdRucCNMT"), \
58 "rfc1459", feature_str(FEAT_NETWORK)
59
60 #endif /* INCLUDED_supported_h */
61 diff -r c623cb9153f1 ircd/channel.c
62 --- a/ircd/channel.c Fri Jul 19 20:29:32 2013 +0100
63 +++ b/ircd/channel.c Fri Jul 19 20:31:50 2013 +0100
64 @@ -708,7 +708,7 @@
65 return 0;
66
67 /* If only logged in users may join and you're not one, you can't speak. */
68 - if (member->channel->mode.mode & MODE_REGONLY && !IsAccount(member->user))
69 + if (member->channel->mode.mode & (MODE_MODERATENOREG|MODE_REGONLY) && !IsAccount(member->user))
70 return 0;
71
72 /* If you're banned then you can't speak either. */
73 @@ -754,7 +754,7 @@
74 */
75 if (!member) {
76 if ((chptr->mode.mode & (MODE_NOPRIVMSGS|MODE_MODERATED)) ||
77 - ((chptr->mode.mode & MODE_REGONLY) && !IsAccount(cptr)))
78 + ((chptr->mode.mode & (MODE_REGONLY|MODE_MODERATENOREG)) && !IsAccount(cptr)))
79 return 0;
80 else
81 return !find_ban(cptr, chptr->banlist);
82 @@ -780,7 +780,7 @@
83 if (IsVoicedOrOpped(member))
84 continue;
85 if ((member->channel->mode.mode & MODE_MODERATED)
86 - || (member->channel->mode.mode & MODE_REGONLY && !IsAccount(cptr))
87 + || (member->channel->mode.mode & (MODE_MODERATENOREG|MODE_REGONLY) && !IsAccount(cptr))
88 || is_banned(member))
89 return member->channel->chname;
90 }
91 @@ -838,6 +838,10 @@
92 *mbuf++ = 'u';
93 if (chptr->mode.mode & MODE_DELJOINS)
94 *mbuf++ = 'D';
95 + if (chptr->mode.mode & MODE_NOMULTITARGET)
96 + *mbuf++ = 'T';
97 + if (chptr->mode.mode & MODE_MODERATENOREG)
98 + *mbuf++ = 'M';
99 else if (MyUser(cptr) && (chptr->mode.mode & MODE_WASDELJOINS))
100 *mbuf++ = 'd';
101 if (chptr->mode.mode & MODE_REGISTERED)
102 @@ -1292,7 +1296,9 @@
103 MODE_NOCTCP, 'C',
104 MODE_NONOTICE, 'N',
105 MODE_DELJOINS, 'D',
106 - MODE_NOQUITPARTS, 'u'
107 + MODE_NOQUITPARTS, 'u',
108 + MODE_NOMULTITARGET, 'T',
109 + MODE_MODERATENOREG, 'M'
110 };
111
112 unsigned int *flag_p;
113 @@ -1593,6 +1599,8 @@
114 MODE_NOCOLOUR, 'c',
115 MODE_NOCTCP, 'C',
116 MODE_NONOTICE, 'N',
117 + MODE_NOMULTITARGET, 'T',
118 + MODE_MODERATENOREG, 'M',
119 0x0, 0x0
120 };
121 static int local_flags[] = {
122 @@ -2018,8 +2026,8 @@
123
124 mode &= (MODE_ADD | MODE_DEL | MODE_PRIVATE | MODE_SECRET | MODE_MODERATED |
125 MODE_TOPICLIMIT | MODE_INVITEONLY | MODE_NOPRIVMSGS | MODE_REGONLY |
126 - MODE_DELJOINS | MODE_WASDELJOINS | MODE_REGISTERED | MODE_NOQUITPARTS |
127 - MODE_NOCOLOUR | MODE_NOCTCP | MODE_NONOTICE);
128 + MODE_DELJOINS | MODE_WASDELJOINS | MODE_REGISTERED | MODE_NOQUITPARTS | MODE_NOCOLOUR |
129 + MODE_NOCTCP | MODE_NONOTICE | MODE_NOMULTITARGET | MODE_MODERATENOREG );
130
131 if (!(mode & ~(MODE_ADD | MODE_DEL))) /* don't add empty modes... */
132 return;
133 @@ -2156,6 +2164,8 @@
134 MODE_NOCOLOUR, 'c',
135 MODE_NOCTCP, 'C',
136 MODE_NONOTICE, 'N',
137 + MODE_NOMULTITARGET, 'T',
138 + MODE_MODERATENOREG, 'M',
139 0x0, 0x0
140 };
141 unsigned int add;
142 @@ -3312,6 +3322,8 @@
143 MODE_NOCOLOUR, 'c',
144 MODE_NOCTCP, 'C',
145 MODE_NONOTICE, 'N',
146 + MODE_NOMULTITARGET, 'T',
147 + MODE_MODERATENOREG, 'M',
148 MODE_ADD, '+',
149 MODE_DEL, '-',
150 0x0, 0x0
151 diff -r c623cb9153f1 ircd/ircd_features.c
152 --- a/ircd/ircd_features.c Fri Jul 19 20:29:32 2013 +0100
153 +++ b/ircd/ircd_features.c Fri Jul 19 20:31:50 2013 +0100
154 @@ -404,10 +404,10 @@
155 F_B(HIS_STATS_s, 0, 1, 0),
156 F_B(HIS_STATS_t, 0, 1, 0),
157 F_B(HIS_STATS_T, 0, 1, 0),
158 - F_B(HIS_STATS_u, 0, 0, 0),
159 + F_B(HIS_STATS_u, 0, 1, 0),
160 F_B(HIS_STATS_U, 0, 1, 0),
161 F_B(HIS_STATS_v, 0, 1, 0),
162 - F_B(HIS_STATS_w, 0, 0, 0),
163 + F_B(HIS_STATS_w, 0, 1, 0),
164 F_B(HIS_STATS_x, 0, 1, 0),
165 F_B(HIS_STATS_y, 0, 1, 0),
166 F_B(HIS_STATS_z, 0, 1, 0),
167 @@ -430,6 +430,7 @@
168 F_S(HIS_SERVERINFO, 0, "The Undernet Underworld", feature_notify_serverinfo),
169 F_S(HIS_URLSERVERS, 0, "http://www.undernet.org/servers.php", 0),
170 F_B(HIS_USERGLINE, 0, 1, 0),
171 + F_B(HIS_LUSERS_ME, 0, 0, 0),
172
173 /* Misc. random stuff */
174 F_S(NETWORK, 0, "UnderNet", 0),
175 diff -r c623cb9153f1 ircd/ircd_relay.c
176 --- a/ircd/ircd_relay.c Fri Jul 19 20:29:32 2013 +0100
177 +++ b/ircd/ircd_relay.c Fri Jul 19 20:31:50 2013 +0100
178 @@ -82,8 +82,9 @@
179 * @param[in] sptr Client that originated the message.
180 * @param[in] name Name of target channel.
181 * @param[in] text %Message to relay.
182 + * @param[in] targetc Count of channels we're sending the message to.
183 */
184 -void relay_channel_message(struct Client* sptr, const char* name, const char* text)
185 +void relay_channel_message(struct Client* sptr, const char* name, const char* text, const int targetc)
186 {
187 struct Channel* chptr;
188 const char *ch;
189 @@ -106,6 +107,12 @@
190 check_target_limit(sptr, chptr, chptr->chname, 0))
191 return;
192
193 + /* +T check */
194 + if ((chptr->mode.mode & MODE_NOMULTITARGET) && (targetc > 1)) {
195 + send_reply(sptr, ERR_CANNOTSENDTOCHAN, chptr->chname);
196 + return;
197 + }
198 +
199 /* +cC checks */
200 if (chptr->mode.mode & MODE_NOCOLOUR)
201 for (ch=text;*ch;ch++)
202 @@ -131,8 +138,9 @@
203 * @param[in] sptr Client that originated the message.
204 * @param[in] name Name of target channel.
205 * @param[in] text %Message to relay.
206 + * @param[in] targetc Count of channels we're sending the notice to.
207 */
208 -void relay_channel_notice(struct Client* sptr, const char* name, const char* text)
209 +void relay_channel_notice(struct Client* sptr, const char* name, const char* text, const int targetc)
210 {
211 struct Channel* chptr;
212 const char *ch;
213 @@ -155,6 +163,10 @@
214 if ((chptr->mode.mode & MODE_NONOTICE))
215 return;
216
217 + /* +T check */
218 + if ((chptr->mode.mode & MODE_NOMULTITARGET) && (targetc > 1))
219 + return;
220 +
221 /* +cC checks */
222 if (chptr->mode.mode & MODE_NOCOLOUR)
223 for (ch=text;*ch;ch++)
224 diff -r c623cb9153f1 ircd/m_clearmode.c
225 --- a/ircd/m_clearmode.c Fri Jul 19 20:29:32 2013 +0100
226 +++ b/ircd/m_clearmode.c Fri Jul 19 20:31:50 2013 +0100
227 @@ -128,6 +128,8 @@
228 MODE_NOCOLOUR, 'c',
229 MODE_NOCTCP, 'C',
230 MODE_NONOTICE, 'N',
231 + MODE_NOMULTITARGET, 'T',
232 + MODE_MODERATENOREG, 'M',
233 0x0, 0x0
234 };
235 int *flag_p;
236 diff -r c623cb9153f1 ircd/m_lusers.c
237 --- a/ircd/m_lusers.c Fri Jul 19 20:29:32 2013 +0100
238 +++ b/ircd/m_lusers.c Fri Jul 19 20:31:50 2013 +0100
239 @@ -106,6 +106,7 @@
240 */
241 int m_lusers(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
242 {
243 + int his;
244 int longoutput = MyUser(sptr) || IsOper(sptr);
245 if (parc > 2)
246 if (hunt_server_cmd(sptr, CMD_LUSERS, cptr, feature_int(FEAT_HIS_REMOTE),
247 @@ -123,12 +124,13 @@
248 send_reply(sptr, RPL_LUSERUNKNOWN, UserStats.unknowns);
249 if (longoutput && UserStats.channels > 0)
250 send_reply(sptr, RPL_LUSERCHANNELS, UserStats.channels);
251 - send_reply(sptr, RPL_LUSERME, UserStats.local_clients,
252 - UserStats.local_servers);
253 + his = (feature_bool(FEAT_HIS_LUSERS_ME) && !IsOper(sptr));
254 + send_reply(sptr, RPL_LUSERME, his ? 1 : UserStats.local_clients,
255 + his ? 1 : UserStats.local_servers);
256
257 sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :Highest connection count: "
258 - "%d (%d clients)", sptr, max_connection_count,
259 - max_client_count);
260 + "%d (%d clients)", sptr, his ? 2 : max_connection_count,
261 + his ? 1 : max_client_count);
262
263 return 0;
264 }
265 diff -r c623cb9153f1 ircd/m_notice.c
266 --- a/ircd/m_notice.c Fri Jul 19 20:29:32 2013 +0100
267 +++ b/ircd/m_notice.c Fri Jul 19 20:31:50 2013 +0100
268 @@ -108,6 +108,7 @@
269 char* server;
270 int i;
271 int count;
272 + int chancount;
273 char* vector[MAXTARGETS];
274
275 assert(0 != cptr);
276 @@ -128,13 +129,21 @@
277
278 count = unique_name_vector(parv[1], ',', vector, MAXTARGETS);
279
280 + chancount = 0;
281 + for (i = 0; i < count; ++i) {
282 + name = vector[i];
283 +
284 + if (IsChannelPrefix(*name))
285 + chancount++;
286 + }
287 +
288 for (i = 0; i < count; ++i) {
289 name = vector[i];
290 /*
291 * channel msg?
292 */
293 if (IsChannelPrefix(*name)) {
294 - relay_channel_notice(sptr, name, parv[parc - 1]);
295 + relay_channel_notice(sptr, name, parv[parc - 1], chancount);
296 }
297 /*
298 * we have to check for the '@' at least once no matter what we do
299 @@ -199,6 +208,7 @@
300 char* server;
301 int i;
302 int count;
303 + int chancount;
304 char* vector[MAXTARGETS];
305 assert(0 != cptr);
306 assert(cptr == sptr);
307 @@ -218,13 +228,21 @@
308
309 count = unique_name_vector(parv[1], ',', vector, MAXTARGETS);
310
311 + chancount = 0;
312 + for (i = 0; i < count; ++i) {
313 + name = vector[i];
314 +
315 + if (IsChannelPrefix(*name))
316 + chancount++;
317 + }
318 +
319 for (i = 0; i < count; ++i) {
320 name = vector[i];
321 /*
322 * channel msg?
323 */
324 if (IsChannelPrefix(*name))
325 - relay_channel_notice(sptr, name, parv[parc - 1]);
326 + relay_channel_notice(sptr, name, parv[parc - 1], chancount);
327
328 else if (*name == '$')
329 relay_masked_notice(sptr, name, parv[parc - 1]);
330 diff -r c623cb9153f1 ircd/m_privmsg.c
331 --- a/ircd/m_privmsg.c Fri Jul 19 20:29:32 2013 +0100
332 +++ b/ircd/m_privmsg.c Fri Jul 19 20:31:50 2013 +0100
333 @@ -106,6 +106,7 @@
334 char* server;
335 int i;
336 int count;
337 + int chancount;
338 char* vector[MAXTARGETS];
339
340 assert(0 != cptr);
341 @@ -125,13 +126,21 @@
342
343 count = unique_name_vector(parv[1], ',', vector, MAXTARGETS);
344
345 + chancount = 0;
346 + for (i = 0; i < count; ++i) {
347 + name = vector[i];
348 +
349 + if (IsChannelPrefix(*name))
350 + chancount++;
351 + }
352 +
353 for (i = 0; i < count; ++i) {
354 name = vector[i];
355 /*
356 * channel msg?
357 */
358 if (IsChannelPrefix(*name)) {
359 - relay_channel_message(sptr, name, parv[parc - 1]);
360 + relay_channel_message(sptr, name, parv[parc - 1], chancount);
361 }
362 /*
363 * we have to check for the '@' at least once no matter what we do
364 @@ -197,6 +206,7 @@
365 char* server;
366 int i;
367 int count;
368 + int chancount;
369 char* vector[MAXTARGETS];
370 assert(0 != cptr);
371 assert(cptr == sptr);
372 @@ -215,13 +225,21 @@
373
374 count = unique_name_vector(parv[1], ',', vector, MAXTARGETS);
375
376 + chancount = 0;
377 + for (i = 0; i < count; ++i) {
378 + name = vector[i];
379 +
380 + if (IsChannelPrefix(*name))
381 + chancount++;
382 + }
383 +
384 for (i = 0; i < count; ++i) {
385 name = vector[i];
386 /*
387 * channel msg?
388 */
389 if (IsChannelPrefix(*name))
390 - relay_channel_message(sptr, name, parv[parc - 1]);
391 + relay_channel_message(sptr, name, parv[parc - 1], chancount);
392
393 else if (*name == '$')
394 relay_masked_message(sptr, name, parv[parc - 1]);