- --- a/acct.c
- +++ b/acct.c
- @@ -37,8 +37,9 @@
-
- uint64_t acct_total_packets = 0, acct_total_bytes = 0;
-
- +#define LOCAL_NET_MAX 10
- static int using_localnet4 = 0, using_localnet6 = 0;
- -static struct addr localnet4, localmask4, localnet6, localmask6;
- +static struct addr localnet4[LOCAL_NET_MAX], localmask4[LOCAL_NET_MAX], localnet6[LOCAL_NET_MAX], localmask6[LOCAL_NET_MAX];
-
- /* Parse the net/mask specification into two IPs or die trying. */
- void
- @@ -120,13 +121,19 @@ acct_init_localnet(const char *spec)
- /* Register the correct netmask and calculate the correct net. */
- addr_mask(&localnet, &localmask);
- if (localnet.family == IPv6) {
- - using_localnet6 = 1;
- - localnet6 = localnet;
- - localmask6 = localmask;
- + if(using_localnet6 >= LOCAL_NET_MAX){
- + errx(1, "Exceeded maximum IPv6 local networks");
- + }
- + localnet6[using_localnet6] = localnet;
- + localmask6[using_localnet6] = localmask;
- + using_localnet6++;
- } else {
- - using_localnet4 = 1;
- - localnet4 = localnet;
- - localmask4 = localmask;
- + if(using_localnet4 >= LOCAL_NET_MAX){
- + errx(1, "Exceeded maximum IPv4 local networks");
- + }
- + localnet4[using_localnet4] = localnet;
- + localmask4[using_localnet4] = localmask;
- + using_localnet4++;
- }
-
- verbosef("local network address: %s", addr_to_str(&localnet));
- @@ -138,11 +145,15 @@ static int addr_is_local(const struct ad
- if (is_localip(a, local_ips))
- return 1;
- if (a->family == IPv4 && using_localnet4) {
- - if (addr_inside(a, &localnet4, &localmask4))
- - return 1;
- + for (int i=0; i < using_localnet4; i++){
- + if (addr_inside(a, &localnet4[i], &localmask4[i]))
- + return 1;
- + }
- } else if (a->family == IPv6 && using_localnet6) {
- - if (addr_inside(a, &localnet6, &localmask6))
- - return 1;
- + for (int i=0; i < using_localnet6; i++){
- + if (addr_inside(a, &localnet6[i], &localmask6[i]))
- + return 1;
- + }
- }
- return 0;
- }
- --- a/darkstat.c
- +++ b/darkstat.c
- @@ -193,7 +193,7 @@ static struct cmdline_arg cmdline_args[]
- {"-r", "capfile", cb_capfile, 0},
- {"-p", "port", cb_port, 0},
- {"-b", "bindaddr", cb_bindaddr, -1},
- - {"-l", "network/netmask", cb_local, 0},
- + {"-l", "network/netmask", cb_local, -1},
- {"--base", "path", cb_base, 0},
- {"--local-only", NULL, cb_local_only, 0},
- {"--snaplen", "bytes", cb_snaplen, 0},
|