]> jfr.im git - irc/quakenet/snircd-patchqueue.git/blame - glinedestroy.patch
Remove topic_reveal.patch. This has been fixed in IRCU and ircu patch is correct...
[irc/quakenet/snircd-patchqueue.git] / glinedestroy.patch
CommitLineData
2c14f172 1# HG changeset patch
b528e2af 2# Parent e5696ca6af7ca3b62663f4891d4f570b3e66356e
2c14f172 3
4Add % prefix for gline allowing a global gline to be destroyed (removed from memory)
5instead of being kept in memory in a deactivated state until it expires.
6
7This prefix should only be used when there are no servers split that have the gline,
8because during a netmerge, if the other end has this gline,
9it will be reintroduced to our side of the network.
10
11Syntax:
12
13P10 (Uworld gline, no lastmod)
14"<source numeric> GL * %-<mask>"
15
16P10 (normal gline, lastmod)
17"<source numeric> GL * %-<mask> <expire> <lastmod> :<reason>"
18
19Oper
20"GLINE %-<mask> * <expire> :<reason>"
21
b528e2af 22diff -r e5696ca6af7c include/gline.h
23--- a/include/gline.h Sun Jul 21 09:54:48 2013 +0200
24+++ b/include/gline.h Sun Jul 21 10:10:30 2013 +0200
2c14f172 25@@ -83,6 +83,7 @@
26 #define GLINE_LASTMOD 0x0200 /**< Find only G-lines with non-zero lastmod. */
27 #define GLINE_OPERFORCE 0x0400 /**< Oper forcing G-line to be set. */
28 #define GLINE_REALNAME 0x0800 /**< G-line matches only the realname field. */
29+#define GLINE_DESTROY 0x1000 /**< G-line is to be destroyed, removed from memory - snircd */
30
31 #define GLINE_EXPIRE 0x1000 /**< Expiration time update */
32 #define GLINE_LIFETIME 0x2000 /**< Record lifetime update */
33@@ -110,6 +111,8 @@
34 #define GlineIsBadChan(g) ((g)->gl_flags & GLINE_BADCHAN)
35 /** Test whether \a g is local to this server. */
36 #define GlineIsLocal(g) ((g)->gl_flags & GLINE_LOCAL)
37+/** Test whether \a g is to be destroyed - snircd */
38+#define GlineIsDestroy(g) ((g)->gl_flags & GLINE_DESTROY)
39
40 /** Return nick mask of a G-line. */
41 #define GlineNick(g) ((g)->gl_nick)
b528e2af 42diff -r e5696ca6af7c ircd/gline.c
43--- a/ircd/gline.c Sun Jul 21 09:54:48 2013 +0200
44+++ b/ircd/gline.c Sun Jul 21 10:10:30 2013 +0200
2c14f172 45@@ -388,7 +388,8 @@
46
47 assert(gline->gl_lastmod);
48
49- sendcmdto_serv_butone(sptr, CMD_GLINE, cptr, "* %c%s%s%s%s%s %Tu %Tu %Tu :%s",
50+ sendcmdto_serv_butone(sptr, CMD_GLINE, cptr, "* %s%c%s%s%s%s%s %Tu %Tu %Tu :%s",
51+ GlineIsDestroy(gline) ? "%" : "",
52 GlineIsRemActive(gline) ? '+' : '-',
53 GlineIsBadChan(gline)|GlineIsRealName(gline) ? "" : gline->gl_nick,
54 GlineIsBadChan(gline)|GlineIsRealName(gline) ? "" : "!",
55@@ -725,7 +726,14 @@
56 msg = "removing global";
57 gline->gl_flags &= ~GLINE_ACTIVE; /* propagate a -<mask> */
58 } else {
59- msg = "deactivating global";
60+
61+ /* destroy gline - snircd */
62+ if (flags & GLINE_DESTROY) {
63+ msg = "destroying global";
64+ gline->gl_flags |= GLINE_DESTROY;
65+ }
66+ else
67+ msg = "deactivating global";
68
69 if (flags & GLINE_LOCAL)
70 gline->gl_flags |= GLINE_LDEACT;
71@@ -740,7 +748,7 @@
72 }
73 }
74
75- if ((saveflags & GLINE_ACTMASK) != GLINE_ACTIVE)
76+ if ((saveflags & GLINE_ACTMASK) != GLINE_ACTIVE && !(flags & GLINE_DESTROY))
77 return 0; /* was inactive to begin with */
78 }
79
80@@ -771,7 +779,8 @@
81 gline_propagate(cptr, sptr, gline);
82
83 /* if it's a local gline or a Uworld gline (and not locally deactivated).. */
84- if (GlineIsLocal(gline) || (!gline->gl_lastmod && !(flags & GLINE_LOCAL)))
85+ if (GlineIsLocal(gline) || (!gline->gl_lastmod && !(flags & GLINE_LOCAL)) ||
86+ (flags & GLINE_DESTROY)) /* destroy gline - snircd */
87 gline_free(gline); /* get rid of it */
88
89 return 0;
b528e2af 90diff -r e5696ca6af7c ircd/m_gline.c
91--- a/ircd/m_gline.c Sun Jul 21 09:54:48 2013 +0200
92+++ b/ircd/m_gline.c Sun Jul 21 10:10:30 2013 +0200
93@@ -143,6 +143,9 @@
94 if (*mask == '!') {
2c14f172 95 mask++;
96 flags |= GLINE_OPERFORCE; /* assume oper had WIDE_GLINE */
b528e2af 97+ } else if (*mask == '%') { /* destroy gline - snircd */
2c14f172 98+ mask++;
99+ flags |= GLINE_DESTROY;
b528e2af 100 }
2c14f172 101
102 switch (*mask) { /* handle +, -, <, and > */
b528e2af 103@@ -238,8 +241,17 @@
104 lifetime, flags | GLINE_ACTIVE);
105 }
106 } else if (IsMe(acptr)) { /* destroying a local G-line */
107- if (!agline) /* G-line doesn't exist, so let's complain... */
108- return send_reply(sptr, ERR_NOSUCHGLINE, mask);
109+ if (!agline) {
110+ /* manually propagate destroy for a global gline we dont have - snircd */
111+ if ((flags & GLINE_DESTROY) && !(flags & (GLINE_ACTIVE|GLINE_LOCAL))) {
112+ sendcmdto_serv_butone(sptr, CMD_GLINE, cptr, "* %%-%s %Tu %Tu %Tu :%s",
113+ mask, expire, lastmod, lifetime, reason);
114+ return 0;
115+ } else {
116+ /* G-line doesn't exist, so let's complain... */
117+ return send_reply(sptr, ERR_NOSUCHGLINE, mask);
118+ }
119+ }
120
121 /* Let's now destroy the G-line */;
122 Debug((DEBUG_DEBUG, "I am destroying a local G-line here; target %s, "
123@@ -398,6 +410,9 @@
2c14f172 124
2c14f172 125 if (HasPriv(sptr, PRIV_WIDE_GLINE))
126 flags |= GLINE_OPERFORCE;
b528e2af 127+ } else if (*mask == '%') { /* destroy gline - snircd */
2c14f172 128+ mask++;
129+ flags |= GLINE_DESTROY;
b528e2af 130 }
2c14f172 131
132 switch (*mask) { /* handle +, -, <, and > */