add 2 more symbols missed from my last commit
[openwrt/svn-archive/archive.git] / package / iptables / patches / 008-chaostables.patch
1 Index: iptables-1.3.8/extensions/.CHAOS-test
2 ===================================================================
3 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
4 +++ iptables-1.3.8/extensions/.CHAOS-test 2007-07-31 15:27:57.000000000 -0500
5 @@ -0,0 +1,2 @@
6 +#!/bin/sh
7 +[ -f "$KERNEL_DIR/include/linux/netfilter/xt_CHAOS.h" ] && echo "CHAOS";
8 Index: iptables-1.3.8/extensions/.DELUDE-test
9 ===================================================================
10 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
11 +++ iptables-1.3.8/extensions/.DELUDE-test 2007-07-31 15:27:57.000000000 -0500
12 @@ -0,0 +1,2 @@
13 +#!/bin/sh
14 +echo "DELUDE";
15 Index: iptables-1.3.8/extensions/libipt_CHAOS.c
16 ===================================================================
17 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
18 +++ iptables-1.3.8/extensions/libipt_CHAOS.c 2007-07-31 15:27:57.000000000 -0500
19 @@ -0,0 +1,111 @@
20 +/*
21 + CHAOS target for iptables
22 +
23 + Copyright © Jan Engelhardt <jengelh [at] gmx de>, 2006 - 2007
24 + released under the terms of the GNU General Public
25 + License version 2.x and only versions 2.x.
26 +*/
27 +#include <getopt.h>
28 +#include <stdio.h>
29 +#include <string.h>
30 +
31 +#include <iptables.h>
32 +#include <linux/netfilter_ipv4/ip_tables.h>
33 +#include <linux/netfilter/xt_CHAOS.h>
34 +
35 +static void libipt_chaos_help(void)
36 +{
37 + printf(
38 + "CHAOS target v%s options:\n"
39 + " --delude Enable DELUDE processing for TCP\n"
40 + " --tarpit Enable TARPIT processing for TCP\n",
41 + IPTABLES_VERSION);
42 + return;
43 +}
44 +
45 +static int libipt_chaos_parse(int c, char **argv, int invert,
46 + unsigned int *flags, const struct ipt_entry *entry,
47 + struct ipt_entry_target **target)
48 +{
49 + struct xt_chaos_info *info = (void *)((*target)->data);
50 + switch(c) {
51 + case 'd':
52 + info->variant = XTCHAOS_DELUDE;
53 + *flags |= 0x02;
54 + return 1;
55 + case 't':
56 + info->variant = XTCHAOS_TARPIT;
57 + *flags |= 0x01;
58 + return 1;
59 + }
60 + return 0;
61 +}
62 +
63 +static void libipt_chaos_check(unsigned int flags)
64 +{
65 + if(flags != 0x03)
66 + return;
67 + /* If flags == 0x03, both were specified, which should not be. */
68 + exit_error(PARAMETER_PROBLEM,
69 + "CHAOS: only one of --tarpit or --delude may be specified");
70 + return;
71 +}
72 +
73 +static void libipt_chaos_print(const struct ipt_ip *ip,
74 + const struct ipt_entry_target *target, int numeric)
75 +{
76 + const struct xt_chaos_info *info = (const void *)target->data;
77 + switch(info->variant) {
78 + case XTCHAOS_DELUDE:
79 + printf("DELUDE ");
80 + break;
81 + case XTCHAOS_TARPIT:
82 + printf("TARPIT ");
83 + break;
84 + default:
85 + break;
86 + }
87 + return;
88 +}
89 +
90 +static void libipt_chaos_save(const struct ipt_ip *ip,
91 + const struct ipt_entry_target *target)
92 +{
93 + const struct xt_chaos_info *info = (const void *)target->data;
94 + switch(info->variant) {
95 + case XTCHAOS_DELUDE:
96 + printf("--delude ");
97 + break;
98 + case XTCHAOS_TARPIT:
99 + printf("--tarpit ");
100 + break;
101 + default:
102 + break;
103 + }
104 + return;
105 +}
106 +
107 +static struct option libipt_chaos_opts[] = {
108 + {"delude", 0, NULL, 'd'},
109 + {"tarpit", 0, NULL, 't'},
110 + {NULL},
111 +};
112 +
113 +static struct iptables_target libipt_chaos_info = {
114 + .name = "CHAOS",
115 + .version = IPTABLES_VERSION,
116 + .size = IPT_ALIGN(sizeof(struct xt_chaos_info)),
117 + .userspacesize = IPT_ALIGN(sizeof(struct xt_chaos_info)),
118 + .help = libipt_chaos_help,
119 + .parse = libipt_chaos_parse,
120 + .final_check = libipt_chaos_check,
121 + .print = libipt_chaos_print,
122 + .save = libipt_chaos_save,
123 + .extra_opts = libipt_chaos_opts,
124 +};
125 +
126 +static __attribute__((constructor)) void libipt_chaos_init(void)
127 +{
128 + register_target(&libipt_chaos_info);
129 + return;
130 +}
131 Index: iptables-1.3.8/extensions/libipt_DELUDE.c
132 ===================================================================
133 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
134 +++ iptables-1.3.8/extensions/libipt_DELUDE.c 2007-07-31 15:27:57.000000000 -0500
135 @@ -0,0 +1,66 @@
136 +/*
137 + DELUDE target for iptables
138 +
139 + Copyright © Jan Engelhardt <jengelh [at] gmx de>, 2006 - 2007
140 + released under the terms of the GNU General Public
141 + License version 2.x and only versions 2.x.
142 +*/
143 +#include <getopt.h>
144 +#include <stdio.h>
145 +#include <string.h>
146 +
147 +#include <iptables.h>
148 +#include <linux/netfilter_ipv4/ip_tables.h>
149 +
150 +static void libipt_delude_help(void)
151 +{
152 + printf("DELUDE takes no options\n");
153 + return;
154 +}
155 +
156 +static int libipt_delude_parse(int c, char **argv, int invert,
157 + unsigned int *flags, const struct ipt_entry *entry,
158 + struct ipt_entry_target **target)
159 +{
160 + return 0;
161 +}
162 +
163 +static void libipt_delude_check(unsigned int flags)
164 +{
165 + return;
166 +}
167 +
168 +static void libipt_delude_print(const struct ipt_ip *ip,
169 + const struct ipt_entry_target *target, int numeric)
170 +{
171 + return;
172 +}
173 +
174 +static void libipt_delude_save(const struct ipt_ip *ip,
175 + const struct ipt_entry_target *target)
176 +{
177 + return;
178 +}
179 +
180 +static struct option libipt_delude_opts[] = {
181 + {NULL},
182 +};
183 +
184 +static struct iptables_target libipt_delude_info = {
185 + .name = "DELUDE",
186 + .version = IPTABLES_VERSION,
187 + .size = IPT_ALIGN(0),
188 + .userspacesize = IPT_ALIGN(0),
189 + .help = libipt_delude_help,
190 + .parse = libipt_delude_parse,
191 + .final_check = libipt_delude_check,
192 + .print = libipt_delude_print,
193 + .save = libipt_delude_save,
194 + .extra_opts = libipt_delude_opts,
195 +};
196 +
197 +static __attribute__((constructor)) void libipt_delude_init(void)
198 +{
199 + register_target(&libipt_delude_info);
200 + return;
201 +}
202 Index: iptables-1.3.8/extensions/libipt_portscan.c
203 ===================================================================
204 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
205 +++ iptables-1.3.8/extensions/libipt_portscan.c 2007-07-31 15:27:57.000000000 -0500
206 @@ -0,0 +1,129 @@
207 +/*
208 + portscan match for iptables
209 +
210 + Copyright © Jan Engelhardt <jengelh [at] gmx de>, 2006 - 2007
211 + released under the terms of the GNU General Public
212 + License version 2.x and only versions 2.x.
213 +*/
214 +#include <stdio.h>
215 +#include <string.h>
216 +#include <stdlib.h>
217 +#include <getopt.h>
218 +
219 +#include <iptables.h>
220 +#include <linux/netfilter_ipv4/ip_tables.h>
221 +#include <linux/netfilter/xt_portscan.h>
222 +
223 +static void libipt_portscan_help(void)
224 +{
225 + printf(
226 + "portscan match v%s options:\n"
227 + "(Combining them will make them match by OR-logic)\n"
228 + " --stealth Match TCP Stealth packets\n"
229 + " --synscan Match TCP SYN scans\n"
230 + " --cnscan Match TCP Connect scans\n"
231 + " --grscan Match Banner Grabbing scans\n",
232 + IPTABLES_VERSION);
233 + return;
234 +}
235 +
236 +static void libipt_portscan_mtinit(struct ipt_entry_match *match,
237 + unsigned int *nfcache)
238 +{
239 + /* Cannot cache this */
240 + *nfcache |= NFC_UNKNOWN;
241 + return;
242 +}
243 +
244 +static int libipt_portscan_parse(int c, char **argv, int invert,
245 + unsigned int *flags, const struct ipt_entry *entry, unsigned int *nfc,
246 + struct ipt_entry_match **match)
247 +{
248 + struct xt_portscan_info *info = (void *)((*match)->data);
249 +
250 + switch(c) {
251 + case 'c':
252 + info->match_cn = 1;
253 + return 1;
254 + case 'g':
255 + info->match_gr = 1;
256 + return 1;
257 + case 's':
258 + info->match_syn = 1;
259 + return 1;
260 + case 'x':
261 + info->match_stealth = 1;
262 + return 1;
263 + default:
264 + return 0;
265 + }
266 +}
267 +
268 +static void libipt_portscan_check(unsigned int flags)
269 +{
270 + return;
271 +}
272 +
273 +static void libipt_portscan_print(const struct ipt_ip *ip,
274 + const struct ipt_entry_match *match, int numeric)
275 +{
276 + const struct xt_portscan_info *info = (const void *)(match->data);
277 + const char *s = "";
278 +
279 + printf("portscan ");
280 + if(info->match_stealth) {
281 + printf("STEALTH");
282 + s = ",";
283 + }
284 + if(info->match_syn) {
285 + printf("%sSYNSCAN", s);
286 + s = ",";
287 + }
288 + if(info->match_cn) {
289 + printf("%sCNSCAN", s);
290 + s = ",";
291 + }
292 + if(info->match_gr)
293 + printf("%sGRSCAN", s);
294 + printf(" ");
295 + return;
296 +}
297 +
298 +static void libipt_portscan_save(const struct ipt_ip *ip,
299 + const struct ipt_entry_match *match)
300 +{
301 + const struct xt_portscan_info *info = (const void *)(match->data);
302 + if(info->match_stealth) printf("--stealth ");
303 + if(info->match_syn) printf("--synscan ");
304 + if(info->match_cn) printf("--cnscan ");
305 + if(info->match_gr) printf("--grscan ");
306 + return;
307 +}
308 +
309 +static struct option libipt_portscan_opts[] = {
310 + {"stealth", 0, NULL, 'x'},
311 + {"synscan", 0, NULL, 's'},
312 + {"cnscan", 0, NULL, 'c'},
313 + {"grscan", 0, NULL, 'g'},
314 + {NULL},
315 +};
316 +
317 +static struct iptables_match libipt_portscan_info = {
318 + .name = "portscan",
319 + .version = IPTABLES_VERSION,
320 + .size = IPT_ALIGN(sizeof(struct xt_portscan_info)),
321 + .userspacesize = IPT_ALIGN(sizeof(struct xt_portscan_info)),
322 + .help = libipt_portscan_help,
323 + .init = libipt_portscan_mtinit,
324 + .parse = libipt_portscan_parse,
325 + .final_check = libipt_portscan_check,
326 + .print = libipt_portscan_print,
327 + .save = libipt_portscan_save,
328 + .extra_opts = libipt_portscan_opts,
329 +};
330 +
331 +static __attribute__((constructor)) void libipt_portscan_init(void)
332 +{
333 + register_match(&libipt_portscan_info);
334 + return;
335 +}
336 Index: iptables-1.3.8/extensions/.portscan-test
337 ===================================================================
338 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
339 +++ iptables-1.3.8/extensions/.portscan-test 2007-07-31 15:27:57.000000000 -0500
340 @@ -0,0 +1,2 @@
341 +#!/bin/sh
342 +[ -f "$KERNEL_DIR/include/linux/netfilter/xt_portscan.h" ] && echo "portscan";