From 080b3ad42820e002b91ab4e3ddb728d2c6763b58 Mon Sep 17 00:00:00 2001 From: Mark Borst Date: Tue, 1 Dec 2009 16:15:15 -0800 Subject: [PATCH] iproute: "ip mroute show" doesn't show all output interfaces The command "ip mroute show" will only show the first Oif. mark@flappie:~$ ip mroute show (192.168.1.1, 224.0.0.123) Iif: _rename Oifs: eth1 mark@flappie:~$ cat /proc/net/ip_mr_cache Group Origin Iif Pkts Bytes Wrong Oifs 7B0000E0 0101A8C0 2 0 0 0 0:1 1:1 This shows 2 Oifs here. However, ipmroute.c, function read_mroute_list(), uses sscanf() with a %s mask for oiflist, which stops after the first whitespace (i.e. after Oif 0:1). The patch below fixes this to read until the newline (though I'm not sure whether this is the proper way to fix it). After this patch: mark@flappie:~/iproute-20090324/ip$ ./ip mroute show (192.168.1.1, 224.0.0.123) Iif: _rename Oifs: eth1 eth0 This patch originally submitted as http://bugs.debian.org/550097 Signed-off-by: Andreas Henriksson --- ip/ipmroute.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ip/ipmroute.c b/ip/ipmroute.c index 8f4b0612..977143cc 100644 --- a/ip/ipmroute.c +++ b/ip/ipmroute.c @@ -95,7 +95,8 @@ static void read_mroute_list(FILE *ofp) char obuf[256]; oiflist[0] = 0; - if (sscanf(buf, "%x%x%d%u%u%u%s", maddr.data, msrc.data, &vifi, + if (sscanf(buf, "%x%x%d%u%u%u %[^\n]", + maddr.data, msrc.data, &vifi, &pkts, &b, &w, oiflist) < 6) continue;