From 83bc1890aa939108fd06b80f35139fedd5856cbc Mon Sep 17 00:00:00 2001 From: Phil Sutter Date: Thu, 2 Aug 2018 17:05:25 +0200 Subject: 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 Signed-off-by: Florian Westphal --- extensions/libarpt_mangle.c | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) (limited to 'extensions/libarpt_mangle.c') 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"); } } -- cgit v1.2.3