aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey V. Elsukov <ae@FreeBSD.org>2025-02-11 09:48:17 +0000
committerAndrey V. Elsukov <ae@FreeBSD.org>2025-02-21 11:18:44 +0000
commit63422982e074a144cfb420408be06e6dc154f9fe (patch)
treedaddb779e1a87c7237463693cf349e4e227cf8e5
parenta8c1ea2614a43922dff9598c7948df32473c720c (diff)
ipfw: make 'ipfw show' output compatible with 'ipfw add' commandstable/13
If rule was added in compact form and rule body is empty, print 'proto ip' opcode to be compatible with ipfw(8) syntax parser. Before: $ ipfw add allow proto ip 000700 allow After: $ ipfw add allow proto ip 000700 allow proto ip (cherry picked from commit 706a03f61bbb6e0cf10e6c3727966495b30d763e)
-rw-r--r--sbin/ipfw/ipfw2.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sbin/ipfw/ipfw2.c b/sbin/ipfw/ipfw2.c
index 46c51081ded4..7a084249c4eb 100644
--- a/sbin/ipfw/ipfw2.c
+++ b/sbin/ipfw/ipfw2.c
@@ -2276,6 +2276,13 @@ show_static_rule(struct cmdline_opts *co, struct format_opts *fo,
if (rule->flags & IPFW_RULE_JUSTOPTS) {
state.flags |= HAVE_PROTO | HAVE_SRCIP | HAVE_DSTIP;
+ /*
+ * Print `proto ip` if all opcodes has been already printed.
+ */
+ if (memchr(state.printed, 0, rule->act_ofs) == NULL) {
+ bprintf(bp, " proto ip");
+ goto end;
+ }
goto justopts;
}