Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
d33cbeeb
Commit
d33cbeeb
authored
Aug 26, 2012
by
Patrick McHardy
Committed by
Pablo Neira Ayuso
Aug 30, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
netfilter: nf_nat: support IPv6 in FTP NAT helper
Signed-off-by:
Patrick McHardy
<
kaber@trash.net
>
parent
ed72d9e2
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
27 additions
and
20 deletions
+27
-20
net/ipv4/netfilter/Kconfig
net/ipv4/netfilter/Kconfig
+0
-5
net/ipv4/netfilter/Makefile
net/ipv4/netfilter/Makefile
+0
-1
net/netfilter/Kconfig
net/netfilter/Kconfig
+5
-0
net/netfilter/Makefile
net/netfilter/Makefile
+3
-0
net/netfilter/nf_conntrack_ftp.c
net/netfilter/nf_conntrack_ftp.c
+1
-2
net/netfilter/nf_nat_ftp.c
net/netfilter/nf_nat_ftp.c
+18
-12
No files found.
net/ipv4/netfilter/Kconfig
View file @
d33cbeeb
...
...
@@ -221,11 +221,6 @@ config NF_NAT_PROTO_GRE
tristate
depends on NF_NAT_IPV4 && NF_CT_PROTO_GRE
config NF_NAT_FTP
tristate
depends on NF_CONNTRACK && NF_NAT_IPV4
default NF_NAT_IPV4 && NF_CONNTRACK_FTP
config NF_NAT_IRC
tristate
depends on NF_CONNTRACK && NF_NAT_IPV4
...
...
net/ipv4/netfilter/Makefile
View file @
d33cbeeb
...
...
@@ -21,7 +21,6 @@ obj-$(CONFIG_NF_DEFRAG_IPV4) += nf_defrag_ipv4.o
# NAT helpers (nf_conntrack)
obj-$(CONFIG_NF_NAT_AMANDA)
+=
nf_nat_amanda.o
obj-$(CONFIG_NF_NAT_FTP)
+=
nf_nat_ftp.o
obj-$(CONFIG_NF_NAT_H323)
+=
nf_nat_h323.o
obj-$(CONFIG_NF_NAT_IRC)
+=
nf_nat_irc.o
obj-$(CONFIG_NF_NAT_PPTP)
+=
nf_nat_pptp.o
...
...
net/netfilter/Kconfig
View file @
d33cbeeb
...
...
@@ -380,6 +380,11 @@ config NF_NAT_PROTO_SCTP
depends on NF_NAT && NF_CT_PROTO_SCTP
select LIBCRC32C
config NF_NAT_FTP
tristate
depends on NF_CONNTRACK && NF_NAT
default NF_NAT && NF_CONNTRACK_FTP
endif # NF_CONNTRACK
# transparent proxy support
...
...
net/netfilter/Makefile
View file @
d33cbeeb
...
...
@@ -54,6 +54,9 @@ obj-$(CONFIG_NF_NAT_PROTO_DCCP) += nf_nat_proto_dccp.o
obj-$(CONFIG_NF_NAT_PROTO_UDPLITE)
+=
nf_nat_proto_udplite.o
obj-$(CONFIG_NF_NAT_PROTO_SCTP)
+=
nf_nat_proto_sctp.o
# NAT helpers
obj-$(CONFIG_NF_NAT_FTP)
+=
nf_nat_ftp.o
# transparent proxy support
obj-$(CONFIG_NETFILTER_TPROXY)
+=
nf_tproxy_core.o
...
...
net/netfilter/nf_conntrack_ftp.c
View file @
d33cbeeb
...
...
@@ -488,8 +488,7 @@ static int help(struct sk_buff *skb,
/* Now, NAT might want to mangle the packet, and register the
* (possibly changed) expectation itself. */
nf_nat_ftp
=
rcu_dereference
(
nf_nat_ftp_hook
);
if
(
nf_nat_ftp
&&
nf_ct_l3num
(
ct
)
==
NFPROTO_IPV4
&&
ct
->
status
&
IPS_NAT_MASK
)
if
(
nf_nat_ftp
&&
ct
->
status
&
IPS_NAT_MASK
)
ret
=
nf_nat_ftp
(
skb
,
ctinfo
,
search
[
dir
][
i
].
ftptype
,
protoff
,
matchoff
,
matchlen
,
exp
);
else
{
...
...
net/
ipv4/
netfilter/nf_nat_ftp.c
→
net/netfilter/nf_nat_ftp.c
View file @
d33cbeeb
...
...
@@ -10,7 +10,7 @@
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/i
p
.h>
#include <linux/i
net
.h>
#include <linux/tcp.h>
#include <linux/netfilter_ipv4.h>
#include <net/netfilter/nf_nat.h>
...
...
@@ -26,22 +26,27 @@ MODULE_ALIAS("ip_nat_ftp");
/* FIXME: Time out? --RR */
static
int
nf_nat_ftp_fmt_cmd
(
enum
nf_ct_ftp_type
type
,
static
int
nf_nat_ftp_fmt_cmd
(
struct
nf_conn
*
ct
,
enum
nf_ct_ftp_type
type
,
char
*
buffer
,
size_t
buflen
,
__be32
addr
,
u16
port
)
union
nf_inet_addr
*
addr
,
u16
port
)
{
switch
(
type
)
{
case
NF_CT_FTP_PORT
:
case
NF_CT_FTP_PASV
:
return
snprintf
(
buffer
,
buflen
,
"%u,%u,%u,%u,%u,%u"
,
((
unsigned
char
*
)
&
addr
)[
0
],
((
unsigned
char
*
)
&
addr
)[
1
],
((
unsigned
char
*
)
&
addr
)[
2
],
((
unsigned
char
*
)
&
addr
)[
3
],
((
unsigned
char
*
)
&
addr
->
ip
)[
0
],
((
unsigned
char
*
)
&
addr
->
ip
)[
1
],
((
unsigned
char
*
)
&
addr
->
ip
)[
2
],
((
unsigned
char
*
)
&
addr
->
ip
)[
3
],
port
>>
8
,
port
&
0xFF
);
case
NF_CT_FTP_EPRT
:
return
snprintf
(
buffer
,
buflen
,
"|1|%pI4|%u|"
,
&
addr
,
port
);
if
(
nf_ct_l3num
(
ct
)
==
NFPROTO_IPV4
)
return
snprintf
(
buffer
,
buflen
,
"|1|%pI4|%u|"
,
&
addr
->
ip
,
port
);
else
return
snprintf
(
buffer
,
buflen
,
"|2|%pI6|%u|"
,
&
addr
->
ip6
,
port
);
case
NF_CT_FTP_EPSV
:
return
snprintf
(
buffer
,
buflen
,
"|||%u|"
,
port
);
}
...
...
@@ -59,17 +64,17 @@ static unsigned int nf_nat_ftp(struct sk_buff *skb,
unsigned
int
matchlen
,
struct
nf_conntrack_expect
*
exp
)
{
__be32
newip
;
union
nf_inet_addr
newaddr
;
u_int16_t
port
;
int
dir
=
CTINFO2DIR
(
ctinfo
);
struct
nf_conn
*
ct
=
exp
->
master
;
char
buffer
[
sizeof
(
"|1|
255.255.255.255|65535|"
)
];
char
buffer
[
sizeof
(
"|1|
|65535|"
)
+
INET6_ADDRSTRLEN
];
unsigned
int
buflen
;
pr_debug
(
"FTP_NAT: type %i, off %u len %u
\n
"
,
type
,
matchoff
,
matchlen
);
/* Connection will come from wherever this packet goes, hence !dir */
new
ip
=
ct
->
tuplehash
[
!
dir
].
tuple
.
dst
.
u3
.
ip
;
new
addr
=
ct
->
tuplehash
[
!
dir
].
tuple
.
dst
.
u3
;
exp
->
saved_proto
.
tcp
.
port
=
exp
->
tuple
.
dst
.
u
.
tcp
.
port
;
exp
->
dir
=
!
dir
;
...
...
@@ -94,7 +99,8 @@ static unsigned int nf_nat_ftp(struct sk_buff *skb,
if
(
port
==
0
)
return
NF_DROP
;
buflen
=
nf_nat_ftp_fmt_cmd
(
type
,
buffer
,
sizeof
(
buffer
),
newip
,
port
);
buflen
=
nf_nat_ftp_fmt_cmd
(
ct
,
type
,
buffer
,
sizeof
(
buffer
),
&
newaddr
,
port
);
if
(
!
buflen
)
goto
out
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment