]>
Commit | Line | Data |
---|---|---|
1 | SNO_GLINE and SNO_AUTO | |
2 | ||
3 | Add = mask prefix to glines to be used by services | |
4 | so their gline actions end up in SNO_AUTO, | |
5 | freeing SNO_GLINE from spam | |
6 | ||
7 | Services can do add this prefix before the mask for | |
8 | automated hits, but not add them for glines manually | |
9 | set by an oper on the service. | |
10 | ||
11 | <source> GL <target> [=][!][+-<>]<mask> .. | |
12 | ||
13 | Oper is not allowed to use = prefix in /GLINE, | |
14 | as that would be cheating :-) | |
15 | ||
16 | *** important *** | |
17 | This prefix must not be used until the entire network | |
18 | and services are upgraded to handle it! | |
19 | ||
20 | diff -r a9d96ac08a2c include/gline.h | |
21 | --- a/include/gline.h Fri Jan 30 18:28:17 2009 +0100 | |
22 | +++ b/include/gline.h Fri Jan 30 18:52:10 2009 +0100 | |
23 | @@ -88,8 +88,10 @@ | |
24 | #define GLINE_LIFETIME 0x2000 /**< Record lifetime update */ | |
25 | #define GLINE_REASON 0x4000 /**< Reason update */ | |
26 | ||
27 | +#define GLINE_AUTO 0x8000 /**< G-line set auto by service */ | |
28 | + | |
29 | /** Controllable flags that can be set on an actual G-line. */ | |
30 | -#define GLINE_MASK (GLINE_ACTIVE | GLINE_BADCHAN | GLINE_LOCAL | GLINE_REALNAME) | |
31 | +#define GLINE_MASK (GLINE_ACTIVE | GLINE_BADCHAN | GLINE_LOCAL | GLINE_REALNAME | GLINE_AUTO) | |
32 | /** Mask for G-line activity flags. */ | |
33 | #define GLINE_ACTMASK (GLINE_ACTIVE | GLINE_LDEACT) | |
34 | ||
35 | @@ -110,6 +112,8 @@ | |
36 | #define GlineIsBadChan(g) ((g)->gl_flags & GLINE_BADCHAN) | |
37 | /** Test whether \a g is local to this server. */ | |
38 | #define GlineIsLocal(g) ((g)->gl_flags & GLINE_LOCAL) | |
39 | +/** Test whether \a g is auto set by service */ | |
40 | +#define GlineIsAuto(g) ((g)->gl_flags & GLINE_AUTO) | |
41 | ||
42 | /** Return nick mask of a G-line. */ | |
43 | #define GlineNick(g) ((g)->gl_nick) | |
44 | diff -r a9d96ac08a2c ircd/gline.c | |
45 | --- a/ircd/gline.c Fri Jan 30 18:28:17 2009 +0100 | |
46 | +++ b/ircd/gline.c Fri Jan 30 18:52:10 2009 +0100 | |
47 | @@ -278,7 +278,7 @@ | |
48 | gline->gl_reason); | |
49 | ||
50 | /* let the ops know about it */ | |
51 | - sendto_opmask_butone(0, SNO_GLINE, "G-line active for %s", | |
52 | + sendto_opmask_butone(0, GlineIsAuto(gline) ? SNO_AUTO : SNO_GLINE, "G-line active for %s", | |
53 | get_client_name(acptr, SHOW_IP)); | |
54 | ||
55 | /* and get rid of him */ | |
56 | @@ -378,7 +378,8 @@ | |
57 | return 0; | |
58 | ||
59 | assert(gline->gl_lastmod); | |
60 | - sendcmdto_serv_butone(sptr, CMD_GLINE, cptr, "* %c%s%s%s%s%s %Tu %Tu %Tu :%s", | |
61 | + sendcmdto_serv_butone(sptr, CMD_GLINE, cptr, "* %s%c%s%s%s%s%s %Tu %Tu %Tu :%s", | |
62 | + GlineIsAuto(gline) ? "=" : "", | |
63 | GlineIsRemActive(gline) ? '+' : '-', | |
64 | GlineIsBadChan(gline)|GlineIsRealName(gline) ? "" : gline->gl_nick, | |
65 | GlineIsBadChan(gline)|GlineIsRealName(gline) ? "" : "!", | |
66 | @@ -555,8 +556,8 @@ | |
67 | /* lifetime is already an absolute timestamp */ | |
68 | ||
69 | /* Inform ops... */ | |
70 | - sendto_opmask_butone(0, ircd_strncmp(reason, "AUTO", 4) ? SNO_GLINE : | |
71 | - SNO_AUTO, "%s adding %s %s for %s%s%s%s%s, expiring at " | |
72 | + sendto_opmask_butone(0, (flags & GLINE_AUTO) ? SNO_AUTO : SNO_GLINE, | |
73 | + "%s adding %s %s for %s%s%s%s%s, expiring at " | |
74 | "%Tu: %s", | |
75 | (feature_bool(FEAT_HIS_SNOTICES) || IsServer(sptr)) ? | |
76 | cli_name(sptr) : | |
77 | @@ -630,7 +631,8 @@ | |
78 | return 0; /* was active to begin with */ | |
79 | ||
80 | /* Inform ops and log it */ | |
81 | - sendto_opmask_butone(0, SNO_GLINE, "%s activating global %s for %s%s%s%s%s, " | |
82 | + sendto_opmask_butone(0, GlineIsAuto(gline) ? SNO_AUTO : SNO_GLINE, | |
83 | + "%s activating global %s for %s%s%s%s%s, " | |
84 | "expiring at %Tu: %s", | |
85 | (feature_bool(FEAT_HIS_SNOTICES) || IsServer(sptr)) ? | |
86 | cli_name(sptr) : | |
87 | @@ -756,7 +758,8 @@ | |
88 | lifetime = expire; | |
89 | ||
90 | /* Inform ops and log it */ | |
91 | - sendto_opmask_butone(0, SNO_GLINE, "%s %s GLINE for %s, expiring at %Tu", | |
92 | + sendto_opmask_butone(0, (flags & GLINE_AUTO) ? SNO_AUTO : SNO_GLINE, | |
93 | + "%s %s GLINE for %s, expiring at %Tu", | |
94 | (feature_bool(FEAT_HIS_SNOTICES) || IsServer(sptr)) ? | |
95 | cli_name(sptr) : cli_name((cli_user(sptr))->server), | |
96 | msg, userhost, expire + TSoffset); | |
97 | @@ -765,7 +768,8 @@ | |
98 | "%#C %s GLINE for %s, expiring at %Tu", sptr, msg, userhost, | |
99 | expire); | |
100 | ||
101 | - sendcmdto_serv_butone(sptr, CMD_GLINE, cptr, "* -%s %Tu %Tu %Tu", | |
102 | + sendcmdto_serv_butone(sptr, CMD_GLINE, cptr, "* %s-%s %Tu %Tu %Tu", | |
103 | + (flags & GLINE_AUTO) ? "=" : "", | |
104 | userhost, expire, lastmod, lifetime); | |
105 | ||
106 | return 0; | |
107 | @@ -912,6 +916,12 @@ | |
108 | break; | |
109 | } | |
110 | ||
111 | + /* Handle the change of auto or manual G-line */ | |
112 | + if ((flags & GLINE_AUTO) && !GlineIsAuto(gline)) | |
113 | + gline->gl_flags |= GLINE_AUTO; /* mark as auto */ | |
114 | + else if (!(flags & GLINE_AUTO) && GlineIsAuto(gline)) | |
115 | + gline->gl_flags &= ~GLINE_AUTO; /* mark as manual */ | |
116 | + | |
117 | /* Handle expiration changes... */ | |
118 | if (flags & GLINE_EXPIRE) { | |
119 | gline->gl_expire = expire; /* save new expiration time */ | |
120 | @@ -944,7 +954,8 @@ | |
121 | } | |
122 | ||
123 | /* All right, inform ops... */ | |
124 | - sendto_opmask_butone(0, SNO_GLINE, "%s modifying global %s for %s%s%s%s%s:%s", | |
125 | + sendto_opmask_butone(0, flags & GLINE_AUTO ? SNO_GLINE : SNO_GLINE, | |
126 | + "%s modifying global %s for %s%s%s%s%s:%s", | |
127 | (feature_bool(FEAT_HIS_SNOTICES) || IsServer(sptr)) ? | |
128 | cli_name(sptr) : cli_name((cli_user(sptr))->server), | |
129 | GlineIsBadChan(gline) ? "BADCHAN" : "GLINE", | |
130 | @@ -965,7 +976,8 @@ | |
131 | */ | |
132 | if (action != GLINE_LOCAL_ACTIVATE && action != GLINE_LOCAL_DEACTIVATE) | |
133 | sendcmdto_serv_butone(sptr, CMD_GLINE, cptr, | |
134 | - "* %s%s%s%s%s%s%s %Tu %Tu %Tu :%s", | |
135 | + "* %s%s%s%s%s%s%s%s %Tu %Tu %Tu :%s", | |
136 | + (flags & GLINE_AUTO) ? "=" : "", | |
137 | flags & GLINE_OPERFORCE ? "!" : "", op, | |
138 | GlineIsBadChan(gline)|GlineIsRealName(gline) ? "" : gline->gl_nick, | |
139 | GlineIsBadChan(gline)|GlineIsRealName(gline) ? "" : "!", | |
140 | @@ -1179,8 +1191,9 @@ | |
141 | ||
142 | gliter(GlobalGlineList, gline, sgline) { | |
143 | if (!GlineIsLocal(gline) && gline->gl_lastmod) | |
144 | - sendcmdto_one(&me, CMD_GLINE, cptr, "* %c%s%s%s%s%s %Tu %Tu %Tu :%s", | |
145 | - GlineIsRemActive(gline) ? '+' : '-', | |
146 | + sendcmdto_one(&me, CMD_GLINE, cptr, "* %s%c%s%s%s%s%s %Tu %Tu %Tu :%s", | |
147 | + GlineIsAuto(gline) ? "=" : "", | |
148 | + GlineIsRemActive(gline) ? '+' : '-', | |
149 | gline->gl_nick ? gline->gl_nick : "", | |
150 | gline->gl_nick ? "!" : "", | |
151 | gline->gl_user, | |
152 | @@ -1192,7 +1205,8 @@ | |
153 | ||
154 | gliter(BadChanGlineList, gline, sgline) { | |
155 | if (!GlineIsLocal(gline) && gline->gl_lastmod) | |
156 | - sendcmdto_one(&me, CMD_GLINE, cptr, "* %c%s %Tu %Tu %Tu :%s", | |
157 | + sendcmdto_one(&me, CMD_GLINE, cptr, "* %s%c%s %Tu %Tu %Tu :%s", | |
158 | + GlineIsAuto(gline) ? "=" : "", | |
159 | GlineIsRemActive(gline) ? '+' : '-', gline->gl_user, | |
160 | gline->gl_expire - CurrentTime, gline->gl_lastmod, | |
161 | gline->gl_lifetime, gline->gl_reason); | |
162 | @@ -1210,7 +1224,8 @@ | |
163 | if (GlineIsLocal(gline) || !gline->gl_lastmod) | |
164 | return 0; | |
165 | ||
166 | - sendcmdto_one(&me, CMD_GLINE, cptr, "* %c%s%s%s%s%s %Tu %Tu %Tu :%s", | |
167 | + sendcmdto_one(&me, CMD_GLINE, cptr, "* %s%c%s%s%s%s%s %Tu %Tu %Tu :%s", | |
168 | + GlineIsAuto(gline) ? "=" : "", | |
169 | GlineIsRemActive(gline) ? '+' : '-', | |
170 | GlineIsBadChan(gline)|GlineIsRealName(gline) ? "" : gline->gl_nick, | |
171 | GlineIsBadChan(gline)|GlineIsRealName(gline) ? "" : "!", | |
172 | @@ -1249,6 +1264,7 @@ | |
173 | gline->gl_expire + TSoffset, gline->gl_lastmod, | |
174 | gline->gl_lifetime + TSoffset, | |
175 | GlineIsLocal(gline) ? cli_name(&me) : "*", | |
176 | + GlineIsAuto(gline) && IsAnOper(sptr) ? "=" : "", | |
177 | gline->gl_state == GLOCAL_ACTIVATED ? ">" : | |
178 | (gline->gl_state == GLOCAL_DEACTIVATED ? "<" : ""), | |
179 | GlineIsRemActive(gline) ? '+' : '-', gline->gl_reason); | |
180 | @@ -1263,6 +1279,7 @@ | |
181 | gline->gl_expire + TSoffset, gline->gl_lastmod, | |
182 | gline->gl_lifetime + TSoffset, | |
183 | GlineIsLocal(gline) ? cli_name(&me) : "*", | |
184 | + GlineIsAuto(gline) && IsAnOper(sptr) ? "=" : "", | |
185 | gline->gl_state == GLOCAL_ACTIVATED ? ">" : | |
186 | (gline->gl_state == GLOCAL_DEACTIVATED ? "<" : ""), | |
187 | GlineIsRemActive(gline) ? '+' : '-', gline->gl_reason); | |
188 | @@ -1273,6 +1290,7 @@ | |
189 | gline->gl_expire + TSoffset, gline->gl_lastmod, | |
190 | gline->gl_lifetime + TSoffset, | |
191 | GlineIsLocal(gline) ? cli_name(&me) : "*", | |
192 | + GlineIsAuto(gline) && IsAnOper(sptr) ? "=" : "", | |
193 | gline->gl_state == GLOCAL_ACTIVATED ? ">" : | |
194 | (gline->gl_state == GLOCAL_DEACTIVATED ? "<" : ""), | |
195 | GlineIsRemActive(gline) ? '+' : '-', gline->gl_reason); | |
196 | @@ -1308,6 +1326,7 @@ | |
197 | gline->gl_host ? gline->gl_host : "", | |
198 | gline->gl_expire + TSoffset, gline->gl_lastmod, | |
199 | gline->gl_lifetime + TSoffset, | |
200 | + GlineIsAuto(gline) && IsAnOper(sptr) ? "=" : "", | |
201 | gline->gl_state == GLOCAL_ACTIVATED ? ">" : | |
202 | (gline->gl_state == GLOCAL_DEACTIVATED ? "<" : ""), | |
203 | GlineIsRemActive(gline) ? '+' : '-', | |
204 | @@ -1318,6 +1337,7 @@ | |
205 | send_reply(sptr, RPL_STATSGLINE, 'G', gline->gl_user, "", "", "", "", | |
206 | gline->gl_expire + TSoffset, gline->gl_lastmod, | |
207 | gline->gl_lifetime + TSoffset, | |
208 | + GlineIsAuto(gline) && IsAnOper(sptr) ? "=" : "", | |
209 | gline->gl_state == GLOCAL_ACTIVATED ? ">" : | |
210 | (gline->gl_state == GLOCAL_DEACTIVATED ? "<" : ""), | |
211 | GlineIsRemActive(gline) ? '+' : '-', gline->gl_reason); | |
212 | diff -r a9d96ac08a2c ircd/m_gline.c | |
213 | --- a/ircd/m_gline.c Fri Jan 30 18:28:17 2009 +0100 | |
214 | +++ b/ircd/m_gline.c Fri Jan 30 18:52:10 2009 +0100 | |
215 | @@ -140,6 +140,11 @@ | |
216 | if (IsServer(sptr)) | |
217 | flags |= GLINE_FORCE; | |
218 | ||
219 | + if (*mask == '=') { | |
220 | + mask++; | |
221 | + flags |= GLINE_AUTO; /* auto G-line action by service */ | |
222 | + } | |
223 | + | |
224 | if (*mask == '!') { | |
225 | mask++; | |
226 | flags |= GLINE_OPERFORCE; /* assume oper had WIDE_GLINE */ | |
227 | @@ -183,11 +188,14 @@ | |
228 | if ((action == GLINE_LOCAL_ACTIVATE || action == GLINE_LOCAL_DEACTIVATE) && | |
229 | !IsMe(acptr)) { | |
230 | Debug((DEBUG_DEBUG, "I am forwarding a local change to a global gline " | |
231 | - "to a remote server; target %s, mask %s, operforce %s, action %c", | |
232 | - target, mask, flags & GLINE_OPERFORCE ? "YES" : "NO", | |
233 | + "to a remote server; target %s, mask %s, auto %s, operforce %s, action %c", | |
234 | + target, mask, | |
235 | + flags & GLINE_AUTO ? "YES" : "NO", | |
236 | + flags & GLINE_OPERFORCE ? "YES" : "NO", | |
237 | action == GLINE_LOCAL_ACTIVATE ? '>' : '<')); | |
238 | ||
239 | - sendcmdto_one(sptr, CMD_GLINE, acptr, "%C %s%c%s", acptr, | |
240 | + sendcmdto_one(sptr, CMD_GLINE, acptr, "%C %s%s%c%s", acptr, | |
241 | + flags & GLINE_AUTO ? "=" : "", | |
242 | flags & GLINE_OPERFORCE ? "!" : "", | |
243 | action == GLINE_LOCAL_ACTIVATE ? '>' : '<', mask); | |
244 | ||
245 | @@ -226,8 +234,10 @@ | |
246 | ||
247 | /* OK, create the local G-line */ | |
248 | Debug((DEBUG_DEBUG, "I am creating a local G-line here; target %s, " | |
249 | - "mask %s, operforce %s, action %s, expire %Tu, reason: %s", | |
250 | - target, mask, flags & GLINE_OPERFORCE ? "YES" : "NO", | |
251 | + "mask %s, auto %s, operforce %s, action %s, expire %Tu, reason: %s", | |
252 | + target, mask, | |
253 | + flags & GLINE_AUTO ? "YES" : "NO", | |
254 | + flags & GLINE_OPERFORCE ? "YES" : "NO", | |
255 | action == GLINE_ACTIVATE ? "+" : "-", expire, reason)); | |
256 | ||
257 | return gline_add(cptr, sptr, mask, reason, expire, lastmod, | |
258 | @@ -239,7 +249,8 @@ | |
259 | ||
260 | /* Let's now destroy the G-line */; | |
261 | Debug((DEBUG_DEBUG, "I am destroying a local G-line here; target %s, " | |
262 | - "mask %s, operforce %s, action %s", target, mask, | |
263 | + "mask %s, auto %s, operforce %s, action %s", target, mask, | |
264 | + flags & GLINE_AUTO ? "YES" : "NO", | |
265 | flags & GLINE_OPERFORCE ? "YES" : "NO", | |
266 | action == GLINE_ACTIVATE ? "+" : "-")); | |
267 | ||
268 | @@ -255,14 +266,17 @@ | |
269 | assert(!IsMe(acptr)); | |
270 | ||
271 | Debug((DEBUG_DEBUG, "I am forwarding a local G-line to a remote server; " | |
272 | - "target %s, mask %s, operforce %s, action %c, expire %Tu, " | |
273 | + "target %s, mask %s, auto %s, operforce %s, action %c, expire %Tu, " | |
274 | "lastmod %Tu, reason: %s", target, mask, | |
275 | + flags & GLINE_AUTO ? "YES" : "NO", | |
276 | flags & GLINE_OPERFORCE ? "YES" : "NO", | |
277 | action == GLINE_ACTIVATE ? '+' : '-', expire, CurrentTime, | |
278 | reason)); | |
279 | ||
280 | - sendcmdto_one(sptr, CMD_GLINE, acptr, "%C %s%c%s %Tu %Tu :%s", | |
281 | - acptr, flags & GLINE_OPERFORCE ? "!" : "", | |
282 | + sendcmdto_one(sptr, CMD_GLINE, acptr, "%C %s%s%c%s %Tu %Tu :%s", | |
283 | + acptr, | |
284 | + flags & GLINE_AUTO ? "=" : "", | |
285 | + flags & GLINE_OPERFORCE ? "!" : "", | |
286 | action == GLINE_ACTIVATE ? '+' : '-', mask, | |
287 | expire - CurrentTime, CurrentTime, reason); | |
288 | ||
289 | @@ -323,9 +337,10 @@ | |
290 | return need_more_params(sptr, "GLINE"); | |
291 | ||
292 | Debug((DEBUG_DEBUG, "I have a global G-line I am acting upon now; " | |
293 | - "target %s, mask %s, operforce %s, action %s, expire %Tu, " | |
294 | + "target %s, mask %s, auto %s, operforce %s, action %s, expire %Tu, " | |
295 | "lastmod %Tu, lifetime %Tu, reason: %s; gline %s! (fields " | |
296 | "present: %s %s %s)", target, mask, | |
297 | + flags & GLINE_AUTO ? "YES" : "NO", | |
298 | flags & GLINE_OPERFORCE ? "YES" : "NO", | |
299 | action == GLINE_ACTIVATE ? "+" : | |
300 | (action == GLINE_DEACTIVATE ? "-" : | |
301 | @@ -353,7 +368,8 @@ | |
302 | action == GLINE_ACTIVATE ? "activation" : "deactivation")); | |
303 | ||
304 | /* propagate the G-line, even though we don't have it */ | |
305 | - sendcmdto_serv_butone(sptr, CMD_GLINE, cptr, "* %c%s %Tu", | |
306 | + sendcmdto_serv_butone(sptr, CMD_GLINE, cptr, "* %s%c%s %Tu", | |
307 | + flags & GLINE_AUTO ? "=" : "", | |
308 | action == GLINE_ACTIVATE ? '+' : '-', | |
309 | mask, lastmod); | |
310 | ||
311 | @@ -389,6 +405,10 @@ | |
312 | return gline_list(sptr, 0); | |
313 | } | |
314 | ||
315 | + /* ignore auto prefix from oper */ | |
316 | + if (*mask == '=') | |
317 | + mask++; | |
318 | + | |
319 | if (*mask == '!') { | |
320 | mask++; | |
321 | ||
322 | diff -r a9d96ac08a2c ircd/s_err.c | |
323 | --- a/ircd/s_err.c Fri Jan 30 18:28:17 2009 +0100 | |
324 | +++ b/ircd/s_err.c Fri Jan 30 18:52:10 2009 +0100 | |
325 | @@ -526,7 +526,7 @@ | |
326 | /* 246 */ | |
327 | { RPL_STATSTLINE, "%c %s %s", "246" }, | |
328 | /* 247 */ | |
329 | - { RPL_STATSGLINE, "%c %s%s%s%s%s %Tu %Tu %Tu %s%c :%s", "247" }, | |
330 | + { RPL_STATSGLINE, "%c %s%s%s%s%s %Tu %Tu %Tu %s%s%c :%s", "247" }, | |
331 | /* 248 */ | |
332 | { RPL_STATSULINE, "U %s", "248" }, | |
333 | /* 249 */ | |
334 | @@ -592,7 +592,7 @@ | |
335 | /* 279 */ | |
336 | { 0 }, | |
337 | /* 280 */ | |
338 | - { RPL_GLIST, "%s%s%s%s%s %Tu %Tu %Tu %s %s%c :%s", "280" }, | |
339 | + { RPL_GLIST, "%s%s%s%s%s %Tu %Tu %Tu %s %s%s%c :%s", "280" }, | |
340 | /* 281 */ | |
341 | { RPL_ENDOFGLIST, ":End of G-line List", "281" }, | |
342 | /* 282 */ |