packages: iptables/iptables.spec, iptables/iptables-TPROXY-IPv6.patch (NEW)...
baggins
baggins at pld-linux.org
Fri Mar 18 22:10:33 CET 2011
Author: baggins Date: Fri Mar 18 21:10:33 2011 GMT
Module: packages Tag: HEAD
---- Log message:
- rel 5
- add support for IPv6 TPROXY (inlcuded in 2.6.37)
---- Files affected:
packages/iptables:
iptables.spec (1.296 -> 1.297) , iptables-TPROXY-IPv6.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: packages/iptables/iptables.spec
diff -u packages/iptables/iptables.spec:1.296 packages/iptables/iptables.spec:1.297
--- packages/iptables/iptables.spec:1.296 Sun Feb 6 12:53:49 2011
+++ packages/iptables/iptables.spec Fri Mar 18 22:10:28 2011
@@ -34,7 +34,7 @@
Summary(zh_CN.UTF-8): Linux内核包过滤管理工具
Name: iptables
Version: 1.4.10
-Release: 4
+Release: 5
License: GPL v2
Group: Networking/Admin
Source0: ftp://ftp.netfilter.org/pub/iptables/%{name}-%{version}.tar.bz2
@@ -63,6 +63,7 @@
Patch15: %{name}-owner-struct-size-vs.patch
# ipt_stealth; currently disabled (broken, see below)
Patch16: %{name}-stealth.patch
+Patch17: %{name}-TPROXY-IPv6.patch
URL: http://www.netfilter.org/
BuildRequires: autoconf >= 2.50
BuildRequires: automake
@@ -191,6 +192,7 @@
%endif
# builds but init() api is broken, see warnings
#patch16 -p1
+%patch17 -p1
%build
%{__libtoolize}
@@ -428,6 +430,10 @@
All persons listed below can be reached at <cvs_login>@pld-linux.org
$Log$
+Revision 1.297 2011/03/18 21:10:28 baggins
+- rel 5
+- add support for IPv6 TPROXY (inlcuded in 2.6.37)
+
Revision 1.296 2011/02/06 11:53:49 qboosh
- include needed headers (ipt_rpc.h, xt_layer7.h) in related patches, like upstream does
================================================================
Index: packages/iptables/iptables-TPROXY-IPv6.patch
diff -u /dev/null packages/iptables/iptables-TPROXY-IPv6.patch:1.1
--- /dev/null Fri Mar 18 22:10:34 2011
+++ packages/iptables/iptables-TPROXY-IPv6.patch Fri Mar 18 22:10:28 2011
@@ -0,0 +1,505 @@
+Date: Thu, 21 Oct 2010 17:19:22 +0200
+From: KOVACS Krisztian <hidden at balabit.hu>
+Subject: [PATCH 1/2] tproxy: add IPv6 support for socket match
+
+This patch also adds userspace support for the --transparent mode
+of matching, which the kernel already supports, but the iptables userspace
+doesn't.
+
+Signed-off-by: Balazs Scheidler <bazsi at balabit.hu>
+Signed-off-by: KOVACS Krisztian <hidden at balabit.hu>
+---
+ extensions/libxt_socket.c | 103 ++++++++++++++++++++++++++++++++---
+ extensions/libxt_socket.man | 6 ++
+ include/linux/netfilter/xt_socket.h | 12 ++++
+ 3 files changed, 112 insertions(+), 9 deletions(-)
+ create mode 100644 include/linux/netfilter/xt_socket.h
+
+diff --git a/extensions/libxt_socket.c b/extensions/libxt_socket.c
+index 1490473..5705466 100644
+--- a/extensions/libxt_socket.c
++++ b/extensions/libxt_socket.c
+@@ -1,19 +1,106 @@
+ /*
+ * Shared library add-on to iptables to add early socket matching support.
+ *
+- * Copyright (C) 2007 BalaBit IT Ltd.
++ * Copyright (C) 2007, 2009 BalaBit IT Ltd.
+ */
++#include <stdio.h>
++#include <getopt.h>
+ #include <xtables.h>
++#include <linux/netfilter/xt_socket.h>
+
+-static struct xtables_match socket_mt_reg = {
+- .name = "socket",
+- .version = XTABLES_VERSION,
+- .family = NFPROTO_IPV4,
+- .size = XT_ALIGN(0),
+- .userspacesize = XT_ALIGN(0),
++static void socket_mt_help_v0(void)
++{
++ printf("socket match has no options.\n\n");
++}
++
++static void socket_mt_help_v1(void)
++{
++ printf("socket match options:\n"
++"--transparent Matches only if the socket's transparent option is set\n");
++}
++
++static const struct option socket_opts_v1[] = {
++ { "transparent", 0, NULL, '1' },
++ { }
++};
++
++static int socket_mt_parse_v0(int c, char **argv, int invert,
++ unsigned int *flags, const void *entry,
++ struct xt_entry_match **match)
++{
++ return 0;
++}
++
++static int socket_mt_parse_v1(int c, char **argv, int invert,
++ unsigned int *flags, const void *entry,
++ struct xt_entry_match **match)
++{
++ struct xt_socket_mtinfo1 *info = (void *) (*match)->data;
++
++ switch (c) {
++ case '1':
++ if (*flags)
++ xtables_error(PARAMETER_PROBLEM,
++ "Can't specify multiple --transparent");
++ info->flags |= XT_SOCKET_TRANSPARENT;
++ *flags = 1;
++ break;
++ default:
++ return 0;
++ }
++ return 1;
++}
++
++static void socket_mt_check(unsigned int flags)
++{
++}
++
++static void socket_mt_print_v1(const void *ip,
++ const struct xt_entry_match *match,
++ int numeric)
++{
++ const struct xt_socket_mtinfo1 *info = (const void *)match->data;
++ printf("socket ");
++ if (info->flags & XT_SOCKET_TRANSPARENT)
++ printf("transparent ");
++}
++
++static void socket_mt_save_v1(const void *ip,
++ const struct xt_entry_match *match)
++{
++ const struct xt_socket_mtinfo1 *info = (const void *)match->data;
++
++ if (info->flags & XT_SOCKET_TRANSPARENT)
++ printf("--transparent ");
++}
++
++static struct xtables_match socket_matches[] = {
++ {
++ .name = "socket",
++ .revision = 0,
++ .version = XTABLES_VERSION,
++ .family = NFPROTO_IPV4,
++ .parse = socket_mt_parse_v0,
++ .final_check = socket_mt_check,
++ .help = socket_mt_help_v0,
++ },
++ {
++ .name = "socket",
++ .version = XTABLES_VERSION,
++ .revision = 1,
++ .family = NFPROTO_UNSPEC,
++ .size = XT_ALIGN(sizeof(struct xt_socket_mtinfo1)),
++ .userspacesize = XT_ALIGN(sizeof(struct xt_socket_mtinfo1)),
++ .parse = socket_mt_parse_v1,
++ .print = socket_mt_print_v1,
++ .save = socket_mt_save_v1,
++ .final_check = socket_mt_check,
++ .help = socket_mt_help_v1,
++ .extra_opts = socket_opts_v1,
++ }
+ };
+
+ void _init(void)
+ {
+- xtables_register_match(&socket_mt_reg);
++ xtables_register_matches(socket_matches, ARRAY_SIZE(socket_matches));
+ }
+diff --git a/extensions/libxt_socket.man b/extensions/libxt_socket.man
+index 50c8854..edc9d75 100644
+--- a/extensions/libxt_socket.man
++++ b/extensions/libxt_socket.man
+@@ -1,2 +1,6 @@
+ This matches if an open socket can be found by doing a socket lookup on the
+-packet.
++packet which doesn\'t listen on the \'any\' IP address (0.0.0.0).
++.TP
++.BI "\-\-transparent"
++Enables additional check, that the actual socket's transparent socket option
++has to be set.
+diff --git a/include/linux/netfilter/xt_socket.h b/include/linux/netfilter/xt_socket.h
+new file mode 100644
+index 0000000..6f475b8
+--- /dev/null
++++ b/include/linux/netfilter/xt_socket.h
+@@ -0,0 +1,12 @@
++#ifndef _XT_SOCKET_H
++#define _XT_SOCKET_H
++
++enum {
++ XT_SOCKET_TRANSPARENT = 1 << 0,
++};
++
++struct xt_socket_mtinfo1 {
++ __u8 flags;
++};
++
++#endif /* _XT_SOCKET_H */
+
+
+Date: Thu, 21 Oct 2010 17:19:22 +0200
+From: KOVACS Krisztian <hidden at balabit.hu>
+Subject: [PATCH 2/2] tproxy: add IPv6 support to the TPROXY target
+
+Signed-off-by: Balazs Scheidler <bazsi at balabit.hu>
+Signed-off-by: KOVACS Krisztian <hidden at balabit.hu>
+---
+ extensions/libxt_TPROXY.c | 213 +++++++++++++++++++++++++++++------
+ include/linux/netfilter/xt_TPROXY.h | 7 +
+ 2 files changed, 183 insertions(+), 37 deletions(-)
+
+diff --git a/extensions/libxt_TPROXY.c b/extensions/libxt_TPROXY.c
+index cd0b50a..74d122c 100644
+--- a/extensions/libxt_TPROXY.c
++++ b/extensions/libxt_TPROXY.c
+@@ -1,7 +1,7 @@
+ /*
+ * Shared library add-on to iptables to add TPROXY target support.
+ *
+- * Copyright (C) 2002-2008 BalaBit IT Ltd.
++ * Copyright (C) 2002-2009 BalaBit IT Ltd.
+ */
+ #include <getopt.h>
+ #include <stdbool.h>
+@@ -15,8 +15,8 @@
+ #include <linux/netfilter/xt_TPROXY.h>
+
+ static const struct option tproxy_tg_opts[] = {
+- {.name = "on-port", .has_arg = true, .val = '1'},
+- {.name = "on-ip", .has_arg = true, .val = '2'},
++ {.name = "on-port", .has_arg = true, .val = '1'},
++ {.name = "on-ip", .has_arg = true, .val = '2'},
+ {.name = "tproxy-mark", .has_arg = true, .val = '3'},
+ XT_GETOPT_TABLEEND,
+ };
+@@ -36,44 +36,64 @@ static void tproxy_tg_help(void)
+ " --tproxy-mark value[/mask] Mark packets with the given value/mask\n\n");
+ }
+
+-static void parse_tproxy_lport(const char *s, struct xt_tproxy_target_info *info)
++static void parse_tproxy_lport(const char *s, unsigned short *lport)
+ {
+- unsigned int lport;
++ unsigned int value;
+
+- if (xtables_strtoui(s, NULL, &lport, 0, UINT16_MAX))
+- info->lport = htons(lport);
++ if (xtables_strtoui(s, NULL, &value, 0, UINT16_MAX))
++ *lport = htons(value);
+ else
+ xtables_param_act(XTF_BAD_VALUE, "TPROXY", "--on-port", s);
+ }
+
+-static void parse_tproxy_laddr(const char *s, struct xt_tproxy_target_info *info)
++static void parse_tproxy_laddr_v0(const char *s, __be32 *laddr)
+ {
+- struct in_addr *laddr;
++ struct in_addr *ina;
+
+- if ((laddr = xtables_numeric_to_ipaddr(s)) == NULL)
++ if ((ina = xtables_numeric_to_ipaddr(s)) == NULL)
+ xtables_param_act(XTF_BAD_VALUE, "TPROXY", "--on-ip", s);
+
+- info->laddr = laddr->s_addr;
++ *laddr = ina->s_addr;
+ }
+
+-static void parse_tproxy_mark(char *s, struct xt_tproxy_target_info *info)
++static void parse_tproxy_laddr(const char *s, int family, union nf_inet_addr *laddr)
++{
++
++ if (family == NFPROTO_IPV6) {
++ struct in6_addr *addr6;
++
++ if ((addr6 = xtables_numeric_to_ip6addr(s))) {
++ laddr->in6 = *addr6;
++ } else {
++ xtables_param_act(XTF_BAD_VALUE, "TPROXY", "--on-ip", s);
++ }
++ } else {
++ struct in_addr *addr;
++
++ if ((addr = xtables_numeric_to_ipaddr(s))) {
++ laddr->in = *addr;
++ } else {
++ xtables_param_act(XTF_BAD_VALUE, "TPROXY", "--on-ip", s);
++ }
++
++ }
++}
++
++static void parse_tproxy_mark(char *s, unsigned int *value, unsigned int *mask)
+ {
+- unsigned int value, mask = UINT32_MAX;
+ char *end;
+
+- if (!xtables_strtoui(s, &end, &value, 0, UINT32_MAX))
++ *mask = UINT32_MAX;
++ if (!xtables_strtoui(s, &end, value, 0, UINT32_MAX))
+ xtables_param_act(XTF_BAD_VALUE, "TPROXY", "--tproxy-mark", s);
+ if (*end == '/')
+- if (!xtables_strtoui(end + 1, &end, &mask, 0, UINT32_MAX))
++ if (!xtables_strtoui(end + 1, &end, mask, 0, UINT32_MAX))
+ xtables_param_act(XTF_BAD_VALUE, "TPROXY", "--tproxy-mark", s);
+ if (*end != '\0')
+ xtables_param_act(XTF_BAD_VALUE, "TPROXY", "--tproxy-mark", s);
+-
+- info->mark_mask = mask;
+- info->mark_value = value;
+ }
+
+-static int tproxy_tg_parse(int c, char **argv, int invert, unsigned int *flags,
++static int tproxy_tg_parse_v0(int c, char **argv, int invert, unsigned int *flags,
+ const void *entry, struct xt_entry_target **target)
+ {
+ struct xt_tproxy_target_info *tproxyinfo = (void *)(*target)->data;
+@@ -82,19 +102,19 @@ static int tproxy_tg_parse(int c, char **argv, int invert, unsigned int *flags,
+ case '1':
+ xtables_param_act(XTF_ONLY_ONCE, "TPROXY", "--on-port", *flags & PARAM_ONPORT);
+ xtables_param_act(XTF_NO_INVERT, "TPROXY", "--on-port", invert);
+- parse_tproxy_lport(optarg, tproxyinfo);
++ parse_tproxy_lport(optarg, &tproxyinfo->lport);
+ *flags |= PARAM_ONPORT;
+ return 1;
+ case '2':
+ xtables_param_act(XTF_ONLY_ONCE, "TPROXY", "--on-ip", *flags & PARAM_ONIP);
+ xtables_param_act(XTF_NO_INVERT, "TPROXY", "--on-ip", invert);
+- parse_tproxy_laddr(optarg, tproxyinfo);
++ parse_tproxy_laddr_v0(optarg, &tproxyinfo->laddr);
+ *flags |= PARAM_ONIP;
+ return 1;
+ case '3':
+ xtables_param_act(XTF_ONLY_ONCE, "TPROXY", "--tproxy-mark", *flags & PARAM_MARK);
+ xtables_param_act(XTF_NO_INVERT, "TPROXY", "--tproxy-mark", invert);
+- parse_tproxy_mark(optarg, tproxyinfo);
++ parse_tproxy_mark(optarg, &tproxyinfo->mark_value, &tproxyinfo->mark_mask);
+ *flags |= PARAM_MARK;
+ return 1;
+ }
+@@ -102,6 +122,47 @@ static int tproxy_tg_parse(int c, char **argv, int invert, unsigned int *flags,
+ return 0;
+ }
+
++static int tproxy_tg_parse_v1(int family, int c, char **argv, int invert, unsigned int *flags,
++ const void *entry, struct xt_entry_target **target)
++{
++ struct xt_tproxy_target_info_v1 *tproxyinfo = (void *)(*target)->data;
++
++ switch (c) {
++ case '1':
++ xtables_param_act(XTF_ONLY_ONCE, "TPROXY", "--on-port", *flags & PARAM_ONPORT);
++ xtables_param_act(XTF_NO_INVERT, "TPROXY", "--on-port", invert);
++ parse_tproxy_lport(optarg, &tproxyinfo->lport);
++ *flags |= PARAM_ONPORT;
++ return 1;
++ case '2':
++ xtables_param_act(XTF_ONLY_ONCE, "TPROXY", "--on-ip", *flags & PARAM_ONIP);
++ xtables_param_act(XTF_NO_INVERT, "TPROXY", "--on-ip", invert);
++ parse_tproxy_laddr(optarg, family, &tproxyinfo->laddr);
++ *flags |= PARAM_ONIP;
++ return 1;
++ case '3':
++ xtables_param_act(XTF_ONLY_ONCE, "TPROXY", "--tproxy-mark", *flags & PARAM_MARK);
++ xtables_param_act(XTF_NO_INVERT, "TPROXY", "--tproxy-mark", invert);
++ parse_tproxy_mark(optarg, &tproxyinfo->mark_value, &tproxyinfo->mark_mask);
++ *flags |= PARAM_MARK;
++ return 1;
++ }
++
++ return 0;
++}
++
++static int tproxy_tg_parse4_v1(int c, char **argv, int invert, unsigned int *flags,
++ const void *entry, struct xt_entry_target **target)
++{
++ return tproxy_tg_parse_v1(NFPROTO_IPV4, c, argv, invert, flags, entry, target);
++}
++
++static int tproxy_tg_parse6_v1(int c, char **argv, int invert, unsigned int *flags,
++ const void *entry, struct xt_entry_target **target)
++{
++ return tproxy_tg_parse_v1(NFPROTO_IPV6, c, argv, invert, flags, entry, target);
++}
++
+ static void tproxy_tg_check(unsigned int flags)
+ {
+ if (!(flags & PARAM_ONPORT))
+@@ -109,7 +170,7 @@ static void tproxy_tg_check(unsigned int flags)
+ "TPROXY target: Parameter --on-port is required");
+ }
+
+-static void tproxy_tg_print(const void *ip, const struct xt_entry_target *target,
++static void tproxy_tg_print_v0(const void *ip, const struct xt_entry_target *target,
+ int numeric)
+ {
+ const struct xt_tproxy_target_info *info = (const void *)target->data;
+@@ -119,7 +180,31 @@ static void tproxy_tg_print(const void *ip, const struct xt_entry_target *target
+ (unsigned int)info->mark_mask);
+ }
+
+-static void tproxy_tg_save(const void *ip, const struct xt_entry_target *target)
++static void tproxy_tg_print_v1(int family, const void *ip, const struct xt_entry_target *target,
++ int numeric)
++{
++ const struct xt_tproxy_target_info_v1 *info = (const void *)target->data;
++ printf("TPROXY redirect %s:%u mark 0x%x/0x%x",
++ family == AF_INET
++ ? xtables_ipaddr_to_numeric(&info->laddr.in)
++ : xtables_ip6addr_to_numeric(&info->laddr.in6),
++ ntohs(info->lport), (unsigned int)info->mark_value,
++ (unsigned int)info->mark_mask);
++}
++
++static void tproxy_tg_print4_v1(const void *ip, const struct xt_entry_target *target,
++ int numeric)
++{
++ return tproxy_tg_print_v1(NFPROTO_IPV4, ip, target, numeric);
++}
++
++static void tproxy_tg_print6_v1(const void *ip, const struct xt_entry_target *target,
++ int numeric)
++{
++ return tproxy_tg_print_v1(NFPROTO_IPV6, ip, target, numeric);
++}
++
++static void tproxy_tg_save_v0(const void *ip, const struct xt_entry_target *target)
+ {
+ const struct xt_tproxy_target_info *info = (const void *)target->data;
+
+@@ -130,21 +215,75 @@ static void tproxy_tg_save(const void *ip, const struct xt_entry_target *target)
+ (unsigned int)info->mark_value, (unsigned int)info->mark_mask);
+ }
+
+-static struct xtables_target tproxy_tg_reg = {
+- .name = "TPROXY",
+- .family = NFPROTO_IPV4,
+- .version = XTABLES_VERSION,
+- .size = XT_ALIGN(sizeof(struct xt_tproxy_target_info)),
+- .userspacesize = XT_ALIGN(sizeof(struct xt_tproxy_target_info)),
+- .help = tproxy_tg_help,
+- .parse = tproxy_tg_parse,
+- .final_check = tproxy_tg_check,
+- .print = tproxy_tg_print,
+- .save = tproxy_tg_save,
+- .extra_opts = tproxy_tg_opts,
++static void tproxy_tg_save_v1(int family, const void *ip, const struct xt_entry_target *target)
++{
++ const struct xt_tproxy_target_info_v1 *info = (const void *)target->data;
++
++ printf("--on-port %u ", ntohs(info->lport));
++ printf("--on-ip %s ",
++ family == AF_INET
++ ? xtables_ipaddr_to_numeric(&info->laddr.in)
++ : xtables_ip6addr_to_numeric(&info->laddr.in6));
++ printf("--tproxy-mark 0x%x/0x%x ",
++ (unsigned int)info->mark_value, (unsigned int)info->mark_mask);
++}
++
++static void tproxy_tg_save4_v1(const void *ip, const struct xt_entry_target *target)
++{
++ return tproxy_tg_save_v1(NFPROTO_IPV4, ip, target);
++}
++
++static void tproxy_tg_save6_v1(const void *ip, const struct xt_entry_target *target)
++{
++ return tproxy_tg_save_v1(NFPROTO_IPV6, ip, target);
++}
++
++
++static struct xtables_target tproxy_tg_reg[] = {
++ {
++ .name = "TPROXY",
++ .family = NFPROTO_IPV4,
++ .version = XTABLES_VERSION,
++ .size = XT_ALIGN(sizeof(struct xt_tproxy_target_info)),
++ .userspacesize = XT_ALIGN(sizeof(struct xt_tproxy_target_info)),
++ .help = tproxy_tg_help,
++ .parse = tproxy_tg_parse_v0,
++ .final_check = tproxy_tg_check,
++ .print = tproxy_tg_print_v0,
++ .save = tproxy_tg_save_v0,
++ .extra_opts = tproxy_tg_opts,
++ },
++ {
++ .name = "TPROXY",
++ .family = NFPROTO_IPV4,
++ .version = XTABLES_VERSION,
++ .revision = 1,
++ .size = XT_ALIGN(sizeof(struct xt_tproxy_target_info_v1)),
++ .userspacesize = XT_ALIGN(sizeof(struct xt_tproxy_target_info_v1)),
++ .help = tproxy_tg_help,
++ .parse = tproxy_tg_parse4_v1,
++ .final_check = tproxy_tg_check,
++ .print = tproxy_tg_print4_v1,
++ .save = tproxy_tg_save4_v1,
++ .extra_opts = tproxy_tg_opts,
++ },
++ {
++ .name = "TPROXY",
++ .family = NFPROTO_IPV6,
++ .version = XTABLES_VERSION,
++ .revision = 1,
++ .size = XT_ALIGN(sizeof(struct xt_tproxy_target_info_v1)),
++ .userspacesize = XT_ALIGN(sizeof(struct xt_tproxy_target_info_v1)),
++ .help = tproxy_tg_help,
++ .parse = tproxy_tg_parse6_v1,
++ .final_check = tproxy_tg_check,
++ .print = tproxy_tg_print6_v1,
++ .save = tproxy_tg_save6_v1,
++ .extra_opts = tproxy_tg_opts,
++ },
+ };
+
+ void _init(void)
+ {
+- xtables_register_target(&tproxy_tg_reg);
++ xtables_register_targets(tproxy_tg_reg, ARRAY_SIZE(tproxy_tg_reg));
+ }
+diff --git a/include/linux/netfilter/xt_TPROXY.h b/include/linux/netfilter/xt_TPROXY.h
+index 152e8f9..28ff0e8 100644
+--- a/include/linux/netfilter/xt_TPROXY.h
++++ b/include/linux/netfilter/xt_TPROXY.h
+@@ -11,4 +11,11 @@ struct xt_tproxy_target_info {
+ __be16 lport;
+ };
+
++struct xt_tproxy_target_info_v1 {
++ u_int32_t mark_mask;
++ u_int32_t mark_value;
++ union nf_inet_addr laddr;
++ __be16 lport;
++};
++
+ #endif /* _XT_TPROXY_H_target */
+
+
+
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/iptables/iptables.spec?r1=1.296&r2=1.297&f=u
More information about the pld-cvs-commit
mailing list