Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Pkg Iptables
Commits
9caffe92
"vscode:/vscode.git/clone" did not exist on "031303e9f6be142ca0d934a36f3821ae713944fc"
Commit
9caffe92
authored
Nov 09, 2020
by
Arturo Borrero Gonzalez
Browse files
New upstream version 1.8.6
parent
eb1d7c5f
Changes
44
Hide whitespace changes
Inline
Side-by-side
libxtables/Makefile.in
View file @
9caffe92
...
...
@@ -282,6 +282,7 @@ SET_MAKE = @SET_MAKE@
SHELL
=
@SHELL@
STRIP
=
@STRIP@
VERSION
=
@VERSION@
XT_LOCK_NAME
=
@XT_LOCK_NAME@
abs_builddir
=
@abs_builddir@
abs_srcdir
=
@abs_srcdir@
abs_top_builddir
=
@abs_top_builddir@
...
...
libxtables/xtables.c
View file @
9caffe92
...
...
@@ -203,9 +203,12 @@ struct xtables_match *xtables_matches;
struct
xtables_target
*
xtables_targets
;
/* Fully register a match/target which was previously partially registered. */
static
bool
xtables_fully_register_pending_match
(
struct
xtables_match
*
me
);
static
bool
xtables_fully_register_pending_target
(
struct
xtables_target
*
me
);
static
bool
xtables_fully_register_pending_match
(
struct
xtables_match
*
me
,
struct
xtables_match
*
prev
);
static
bool
xtables_fully_register_pending_target
(
struct
xtables_target
*
me
,
struct
xtables_target
*
prev
);
#ifndef NO_SHARED_LIBS
/* registry for loaded shared objects to close later */
struct
dlreg
{
struct
dlreg
*
next
;
...
...
@@ -237,6 +240,7 @@ static void dlreg_free(void)
dlreg
=
next
;
}
}
#endif
void
xtables_init
(
void
)
{
...
...
@@ -267,7 +271,9 @@ void xtables_init(void)
void
xtables_fini
(
void
)
{
#ifndef NO_SHARED_LIBS
dlreg_free
();
#endif
}
void
xtables_set_nfproto
(
uint8_t
nfproto
)
...
...
@@ -658,6 +664,7 @@ struct xtables_match *
xtables_find_match
(
const
char
*
name
,
enum
xtables_tryload
tryload
,
struct
xtables_rule_match
**
matches
)
{
struct
xtables_match
*
prev
=
NULL
;
struct
xtables_match
**
dptr
;
struct
xtables_match
*
ptr
;
const
char
*
icmp6
=
"icmp6"
;
...
...
@@ -679,8 +686,12 @@ xtables_find_match(const char *name, enum xtables_tryload tryload,
if
(
extension_cmp
(
name
,
(
*
dptr
)
->
name
,
(
*
dptr
)
->
family
))
{
ptr
=
*
dptr
;
*
dptr
=
(
*
dptr
)
->
next
;
if
(
xtables_fully_register_pending_match
(
ptr
))
if
(
xtables_fully_register_pending_match
(
ptr
,
prev
))
{
prev
=
ptr
;
continue
;
}
else
if
(
prev
)
{
continue
;
}
*
dptr
=
ptr
;
}
dptr
=
&
((
*
dptr
)
->
next
);
...
...
@@ -774,6 +785,7 @@ xtables_find_match_revision(const char *name, enum xtables_tryload tryload,
struct
xtables_target
*
xtables_find_target
(
const
char
*
name
,
enum
xtables_tryload
tryload
)
{
struct
xtables_target
*
prev
=
NULL
;
struct
xtables_target
**
dptr
;
struct
xtables_target
*
ptr
;
...
...
@@ -790,8 +802,12 @@ xtables_find_target(const char *name, enum xtables_tryload tryload)
if
(
extension_cmp
(
name
,
(
*
dptr
)
->
name
,
(
*
dptr
)
->
family
))
{
ptr
=
*
dptr
;
*
dptr
=
(
*
dptr
)
->
next
;
if
(
xtables_fully_register_pending_target
(
ptr
))
if
(
xtables_fully_register_pending_target
(
ptr
,
prev
))
{
prev
=
ptr
;
continue
;
}
else
if
(
prev
)
{
continue
;
}
*
dptr
=
ptr
;
}
dptr
=
&
((
*
dptr
)
->
next
);
...
...
@@ -944,8 +960,14 @@ static void xtables_check_options(const char *name, const struct option *opt)
}
}
static
int
xtables_match_prefer
(
const
struct
xtables_match
*
a
,
const
struct
xtables_match
*
b
);
void
xtables_register_match
(
struct
xtables_match
*
me
)
{
struct
xtables_match
**
pos
;
bool
seen_myself
=
false
;
if
(
me
->
next
)
{
fprintf
(
stderr
,
"%s: match
\"
%s
\"
already registered
\n
"
,
xt_params
->
program_name
,
me
->
name
);
...
...
@@ -997,10 +1019,34 @@ void xtables_register_match(struct xtables_match *me)
if
(
me
->
extra_opts
!=
NULL
)
xtables_check_options
(
me
->
name
,
me
->
extra_opts
);
/* place on linked list of matches pending full registration */
me
->
next
=
xtables_pending_matches
;
xtables_pending_matches
=
me
;
/* order into linked list of matches pending full registration */
for
(
pos
=
&
xtables_pending_matches
;
*
pos
;
pos
=
&
(
*
pos
)
->
next
)
{
/* group by name and family */
if
(
strcmp
(
me
->
name
,
(
*
pos
)
->
name
)
||
me
->
family
!=
(
*
pos
)
->
family
)
{
if
(
seen_myself
)
break
;
/* end of own group, append to it */
continue
;
}
/* found own group */
seen_myself
=
true
;
if
(
xtables_match_prefer
(
me
,
*
pos
)
>=
0
)
break
;
/* put preferred items first in group */
}
/* if own group was not found, prepend item */
if
(
!*
pos
&&
!
seen_myself
)
pos
=
&
xtables_pending_matches
;
me
->
next
=
*
pos
;
*
pos
=
me
;
#ifdef DEBUG
printf
(
"%s: inserted match %s (family %d, revision %d):
\n
"
,
__func__
,
me
->
name
,
me
->
family
,
me
->
revision
);
for
(
pos
=
&
xtables_pending_matches
;
*
pos
;
pos
=
&
(
*
pos
)
->
next
)
{
printf
(
"%s:
\t
match %s (family %d, revision %d)
\n
"
,
__func__
,
(
*
pos
)
->
name
,
(
*
pos
)
->
family
,
(
*
pos
)
->
revision
);
}
#endif
}
/**
...
...
@@ -1064,64 +1110,27 @@ static int xtables_target_prefer(const struct xtables_target *a,
b
->
revision
,
b
->
family
);
}
static
bool
xtables_fully_register_pending_match
(
struct
xtables_match
*
me
)
static
bool
xtables_fully_register_pending_match
(
struct
xtables_match
*
me
,
struct
xtables_match
*
prev
)
{
struct
xtables_match
**
i
,
*
old
,
*
pos
=
NULL
;
struct
xtables_match
**
i
;
const
char
*
rn
;
int
compare
;
/* See if new match can be used. */
rn
=
(
me
->
real_name
!=
NULL
)
?
me
->
real_name
:
me
->
name
;
if
(
!
compatible_match_revision
(
rn
,
me
->
revision
))
return
false
;
old
=
xtables_find_match
(
me
->
name
,
XTF_DURING_LOAD
,
NULL
);
while
(
old
)
{
compare
=
xtables_match_prefer
(
old
,
me
);
if
(
compare
==
0
)
{
fprintf
(
stderr
,
"%s: match `%s' already registered.
\n
"
,
xt_params
->
program_name
,
me
->
name
);
exit
(
1
);
}
/* Now we have two (or more) options, check compatibility. */
rn
=
(
old
->
real_name
!=
NULL
)
?
old
->
real_name
:
old
->
name
;
if
(
compare
>
0
)
{
/* Kernel tells old isn't compatible anymore??? */
if
(
!
compatible_match_revision
(
rn
,
old
->
revision
))
{
/* Delete old one. */
for
(
i
=
&
xtables_matches
;
*
i
!=
old
;)
i
=
&
(
*
i
)
->
next
;
*
i
=
old
->
next
;
}
pos
=
old
;
old
=
old
->
next
;
if
(
!
old
)
break
;
if
(
!
extension_cmp
(
me
->
name
,
old
->
name
,
old
->
family
))
break
;
continue
;
}
/* Found right old */
pos
=
old
;
break
;
}
if
(
!
pos
)
{
if
(
!
prev
)
{
/* Append to list. */
for
(
i
=
&
xtables_matches
;
*
i
;
i
=
&
(
*
i
)
->
next
);
}
else
if
(
compare
<
0
)
{
/* Prepend it */
for
(
i
=
&
xtables_matches
;
*
i
!=
pos
;
i
=
&
(
*
i
)
->
next
);
}
else
if
(
compare
>
0
)
{
}
else
{
/* Append it */
i
=
&
p
os
->
next
;
p
os
=
p
os
->
next
;
i
=
&
p
rev
->
next
;
p
rev
=
p
rev
->
next
;
}
me
->
next
=
p
os
;
me
->
next
=
p
rev
;
*
i
=
me
;
me
->
m
=
NULL
;
...
...
@@ -1132,13 +1141,17 @@ static bool xtables_fully_register_pending_match(struct xtables_match *me)
void
xtables_register_matches
(
struct
xtables_match
*
match
,
unsigned
int
n
)
{
do
{
xtables_register_match
(
&
match
[
--
n
]);
}
while
(
n
>
0
);
int
i
;
for
(
i
=
0
;
i
<
n
;
i
++
)
xtables_register_match
(
&
match
[
i
]);
}
void
xtables_register_target
(
struct
xtables_target
*
me
)
{
struct
xtables_target
**
pos
;
bool
seen_myself
=
false
;
if
(
me
->
next
)
{
fprintf
(
stderr
,
"%s: target
\"
%s
\"
already registered
\n
"
,
xt_params
->
program_name
,
me
->
name
);
...
...
@@ -1194,16 +1207,40 @@ void xtables_register_target(struct xtables_target *me)
if
(
me
->
family
!=
afinfo
->
family
&&
me
->
family
!=
AF_UNSPEC
)
return
;
/* place on linked list of targets pending full registration */
me
->
next
=
xtables_pending_targets
;
xtables_pending_targets
=
me
;
/* order into linked list of targets pending full registration */
for
(
pos
=
&
xtables_pending_targets
;
*
pos
;
pos
=
&
(
*
pos
)
->
next
)
{
/* group by name */
if
(
!
extension_cmp
(
me
->
name
,
(
*
pos
)
->
name
,
(
*
pos
)
->
family
))
{
if
(
seen_myself
)
break
;
/* end of own group, append to it */
continue
;
}
/* found own group */
seen_myself
=
true
;
if
(
xtables_target_prefer
(
me
,
*
pos
)
>=
0
)
break
;
/* put preferred items first in group */
}
/* if own group was not found, prepend item */
if
(
!*
pos
&&
!
seen_myself
)
pos
=
&
xtables_pending_targets
;
me
->
next
=
*
pos
;
*
pos
=
me
;
#ifdef DEBUG
printf
(
"%s: inserted target %s (family %d, revision %d):
\n
"
,
__func__
,
me
->
name
,
me
->
family
,
me
->
revision
);
for
(
pos
=
&
xtables_pending_targets
;
*
pos
;
pos
=
&
(
*
pos
)
->
next
)
{
printf
(
"%s:
\t
target %s (family %d, revision %d)
\n
"
,
__func__
,
(
*
pos
)
->
name
,
(
*
pos
)
->
family
,
(
*
pos
)
->
revision
);
}
#endif
}
static
bool
xtables_fully_register_pending_target
(
struct
xtables_target
*
me
)
static
bool
xtables_fully_register_pending_target
(
struct
xtables_target
*
me
,
struct
xtables_target
*
prev
)
{
struct
xtables_target
**
i
,
*
old
,
*
pos
=
NULL
;
struct
xtables_target
**
i
;
const
char
*
rn
;
int
compare
;
if
(
strcmp
(
me
->
name
,
"standard"
)
!=
0
)
{
/* See if new target can be used. */
...
...
@@ -1212,54 +1249,17 @@ static bool xtables_fully_register_pending_target(struct xtables_target *me)
return
false
;
}
old
=
xtables_find_target
(
me
->
name
,
XTF_DURING_LOAD
);
while
(
old
)
{
compare
=
xtables_target_prefer
(
old
,
me
);
if
(
compare
==
0
)
{
fprintf
(
stderr
,
"%s: target `%s' already registered.
\n
"
,
xt_params
->
program_name
,
me
->
name
);
exit
(
1
);
}
/* Now we have two (or more) options, check compatibility. */
rn
=
(
old
->
real_name
!=
NULL
)
?
old
->
real_name
:
old
->
name
;
if
(
compare
>
0
)
{
/* Kernel tells old isn't compatible anymore??? */
if
(
!
compatible_target_revision
(
rn
,
old
->
revision
))
{
/* Delete old one. */
for
(
i
=
&
xtables_targets
;
*
i
!=
old
;)
i
=
&
(
*
i
)
->
next
;
*
i
=
old
->
next
;
}
pos
=
old
;
old
=
old
->
next
;
if
(
!
old
)
break
;
if
(
!
extension_cmp
(
me
->
name
,
old
->
name
,
old
->
family
))
break
;
continue
;
}
/* Found right old */
pos
=
old
;
break
;
}
if
(
!
pos
)
{
if
(
!
prev
)
{
/* Prepend to list. */
i
=
&
xtables_targets
;
pos
=
xtables_targets
;
}
else
if
(
compare
<
0
)
{
/* Prepend it */
for
(
i
=
&
xtables_targets
;
*
i
!=
pos
;
i
=
&
(
*
i
)
->
next
);
}
else
if
(
compare
>
0
)
{
prev
=
xtables_targets
;
}
else
{
/* Append it */
i
=
&
p
os
->
next
;
p
os
=
p
os
->
next
;
i
=
&
p
rev
->
next
;
p
rev
=
p
rev
->
next
;
}
me
->
next
=
p
os
;
me
->
next
=
p
rev
;
*
i
=
me
;
me
->
t
=
NULL
;
...
...
@@ -1270,9 +1270,10 @@ static bool xtables_fully_register_pending_target(struct xtables_target *me)
void
xtables_register_targets
(
struct
xtables_target
*
target
,
unsigned
int
n
)
{
do
{
xtables_register_target
(
&
target
[
--
n
]);
}
while
(
n
>
0
);
int
i
;
for
(
i
=
0
;
i
<
n
;
i
++
)
xtables_register_target
(
&
target
[
i
]);
}
/* receives a list of xtables_rule_match, release them */
...
...
utils/Makefile.am
View file @
9caffe92
...
...
@@ -14,6 +14,11 @@ sbin_PROGRAMS += nfnl_osf
pkgdata_DATA
+=
pf.os
nfnl_osf_LDADD
=
${libnfnetlink_LIBS}
uninstall-hook
:
dir
=
${DESTDIR}${pkgdatadir}
;
{
\
test
!
-d
"
$$
dir"
&&
test
!
-f
"
$$
dir"
&&
test
!
-r
"
$$
dir"
;
\
}
||
rmdir
-p
--ignore-fail-on-non-empty
"
$$
dir"
endif
if
ENABLE_BPFC
...
...
utils/Makefile.in
View file @
9caffe92
...
...
@@ -293,6 +293,7 @@ SET_MAKE = @SET_MAKE@
SHELL
=
@SHELL@
STRIP
=
@STRIP@
VERSION
=
@VERSION@
XT_LOCK_NAME
=
@XT_LOCK_NAME@
abs_builddir
=
@abs_builddir@
abs_srcdir
=
@abs_srcdir@
abs_top_builddir
=
@abs_top_builddir@
...
...
@@ -710,6 +711,7 @@ distclean-generic:
maintainer-clean-generic
:
@
echo
"This command is intended for maintainers to use"
@
echo
"it deletes files that may require special tools to rebuild."
@HAVE_LIBNFNETLINK_FALSE@uninstall-hook
:
clean
:
clean-am
clean-am
:
clean-generic clean-libtool clean-sbinPROGRAMS
\
...
...
@@ -785,10 +787,11 @@ ps-am:
uninstall-am
:
uninstall-man uninstall-pkgdataDATA
\
uninstall-sbinPROGRAMS
@
$(NORMAL_INSTALL)
$(MAKE)
$(AM_MAKEFLAGS)
uninstall-hook
uninstall-man
:
uninstall-man8
.MAKE
:
install-am install-strip
.MAKE
:
install-am install-strip
uninstall-am
.PHONY
:
CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean
\
clean-generic clean-libtool clean-sbinPROGRAMS cscopelist-am
\
...
...
@@ -803,12 +806,18 @@ uninstall-man: uninstall-man8
installcheck-am installdirs maintainer-clean
\
maintainer-clean-generic mostlyclean mostlyclean-compile
\
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am
\
tags tags-am uninstall uninstall-am uninstall-man
\
uninstall-man8 uninstall-pkgdataDATA uninstall-sbinPROGRAMS
tags tags-am uninstall uninstall-am uninstall-hook
\
uninstall-man uninstall-man8 uninstall-pkgdataDATA
\
uninstall-sbinPROGRAMS
.PRECIOUS
:
Makefile
@HAVE_LIBNFNETLINK_TRUE@uninstall-hook
:
@HAVE_LIBNFNETLINK_TRUE@
dir
=
${DESTDIR}${pkgdatadir}
;
{
\
@HAVE_LIBNFNETLINK_TRUE@
test
!
-d
"
$$
dir"
&&
test
!
-f
"
$$
dir"
&&
test
!
-r
"
$$
dir"
;
\
@HAVE_LIBNFNETLINK_TRUE@
}
||
rmdir
-p
--ignore-fail-on-non-empty
"
$$
dir"
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT
:
Prev
1
2
3
Next
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