]> git.ipfire.org Git - thirdparty/iptables.git/commitdiff
arptables: Fix for trailing spaces in output
authorPhil Sutter <phil@nwl.cc>
Thu, 2 Aug 2018 15:05:25 +0000 (17:05 +0200)
committerFlorian Westphal <fw@strlen.de>
Sat, 4 Aug 2018 12:58:55 +0000 (14:58 +0200)
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>
extensions/libarpt_mangle.c

index 0d1f140ac28b5dc3895455edb325009ab5048b4c..547f5b618252c24cd5139ebac9af4357cce697e1 100644 (file)
@@ -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");
        }
 }