From ae6cf8008e50ba9838a056d78cb6aea405c55b7d Mon Sep 17 00:00:00 2001 From: Hamster Tian Date: Thu, 22 Nov 2018 23:36:14 +0800 Subject: config: correctly break string for prefix filter This if statement does the following: 1. Copy the value of "config prefix_filter" 2. Break the string at "/" 3. Save the number after / as prefix length 4. Convert the address before / into in6_addr However the extraneous "=" broke the second step and inet_pton failed with addresses with mask. This commit removes the = thus fixes the feature. Signed-off-by: Tian Hao --- src/config.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/config.c b/src/config.c index b36afb1..9ae8466 100644 --- a/src/config.c +++ b/src/config.c @@ -730,14 +730,15 @@ int config_parse_interface(void *data, size_t len, const char *name, bool overwr char *astr = malloc(strlen(str) + 1); char *delim; int l; + if (!astr || !strcpy(astr, str) || - (delim = strchr(astr, '/')) == NULL || (*(delim++) == 0) || + (delim = strchr(astr, '/')) == NULL || (*(delim++) = 0) || sscanf(delim, "%i", &l) == 0 || l > 128 || - inet_pton(AF_INET6, astr, &iface->pio_filter_addr) == 0) { + inet_pton(AF_INET6, astr, &iface->pio_filter_addr) == 0) iface->pio_filter_length = 0; - } else { + else iface->pio_filter_length = l; - } + if (astr) free(astr); } -- cgit v1.2.3