summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2018-08-02 17:05:25 +0200
committerFlorian Westphal <fw@strlen.de>2018-08-04 14:58:55 +0200
commit83bc1890aa939108fd06b80f35139fedd5856cbc (patch)
treeacaae238284afed1027e1100ec0895cfc07b720c
parentaaed1b68cba7fe78fca42b9fc774b3b6887eff51 (diff)
arptables: Fix for trailing spaces in output
This changes mangle target to print whitespace before each option, not afterwards. This fixes any cases of trailing or double whitespace in arptables output. While being at it, introduce ipaddr_to() helper in libarpt_mangle.c to simplify arpmangle_print() a bit. Signed-off-by: Phil Sutter <phil@nwl.cc> Signed-off-by: Florian Westphal <fw@strlen.de>
-rw-r--r--extensions/libarpt_mangle.c40
1 files changed, 16 insertions, 24 deletions
diff --git a/extensions/libarpt_mangle.c b/extensions/libarpt_mangle.c
index 0d1f140a..547f5b61 100644
--- a/extensions/libarpt_mangle.c
+++ b/extensions/libarpt_mangle.c
@@ -139,47 +139,39 @@ static void print_mac(const unsigned char *mac, int l)
(j==l-1) ? "" : ":");
}
+static const char *ipaddr_to(const struct in_addr *addrp, int numeric)
+{
+ if (numeric)
+ return xtables_ipaddr_to_numeric(addrp);
+ else
+ return xtables_ipaddr_to_anyname(addrp);
+}
+
static void
arpmangle_print(const void *ip, const struct xt_entry_target *target,
int numeric)
{
struct arpt_mangle *m = (struct arpt_mangle *)(target->data);
- char buf[100];
if (m->flags & ARPT_MANGLE_SIP) {
- if (numeric)
- sprintf(buf, "%s",
- xtables_ipaddr_to_numeric(&(m->u_s.src_ip)));
- else
- sprintf(buf, "%s",
- xtables_ipaddr_to_anyname(&(m->u_s.src_ip)));
- printf("--mangle-ip-s %s ", buf);
+ printf(" --mangle-ip-s %s",
+ ipaddr_to(&(m->u_s.src_ip), numeric));
}
if (m->flags & ARPT_MANGLE_SDEV) {
- printf("--mangle-mac-s ");
+ printf(" --mangle-mac-s ");
print_mac((unsigned char *)m->src_devaddr, 6);
- printf(" ");
}
if (m->flags & ARPT_MANGLE_TIP) {
- if (numeric)
- sprintf(buf, "%s",
- xtables_ipaddr_to_numeric(&(m->u_t.tgt_ip)));
- else
- sprintf(buf, "%s",
- xtables_ipaddr_to_anyname(&(m->u_t.tgt_ip)));
- printf("--mangle-ip-d %s ", buf);
+ printf(" --mangle-ip-d %s",
+ ipaddr_to(&(m->u_t.tgt_ip), numeric));
}
if (m->flags & ARPT_MANGLE_TDEV) {
- printf("--mangle-mac-d ");
+ printf(" --mangle-mac-d ");
print_mac((unsigned char *)m->tgt_devaddr, 6);
- printf(" ");
}
if (m->target != NF_ACCEPT) {
- printf("--mangle-target ");
- if (m->target == NF_DROP)
- printf("DROP ");
- else
- printf("CONTINUE ");
+ printf(" --mangle-target %s",
+ m->target == NF_DROP ? "DROP" : "CONTINUE");
}
}