version 1.14, 2018/07/31 03:07:24 |
version 1.15, 2020/10/18 11:32:01 |
|
|
int ret = 0, r; |
int ret = 0, r; |
|
|
if (addr != NULL && addr_pton(addr, &try_addr) != 0) { |
if (addr != NULL && addr_pton(addr, &try_addr) != 0) { |
debug2("%s: couldn't parse address %.100s", __func__, addr); |
debug2_f("couldn't parse address %.100s", addr); |
return 0; |
return 0; |
} |
} |
if ((o = list = strdup(_list)) == NULL) |
if ((o = list = strdup(_list)) == NULL) |
|
|
/* Prefer CIDR address matching */ |
/* Prefer CIDR address matching */ |
r = addr_pton_cidr(cp, &match_addr, &masklen); |
r = addr_pton_cidr(cp, &match_addr, &masklen); |
if (r == -2) { |
if (r == -2) { |
debug2("%s: inconsistent mask length for " |
debug2_f("inconsistent mask length for " |
"match network \"%.100s\"", __func__, cp); |
"match network \"%.100s\"", cp); |
ret = -2; |
ret = -2; |
break; |
break; |
} else if (r == 0) { |
} else if (r == 0) { |
|
|
int ret = 0, r; |
int ret = 0, r; |
|
|
if (addr != NULL && addr_pton(addr, &try_addr) != 0) { |
if (addr != NULL && addr_pton(addr, &try_addr) != 0) { |
debug2("%s: couldn't parse address %.100s", __func__, addr); |
debug2_f("couldn't parse address %.100s", addr); |
return 0; |
return 0; |
} |
} |
if ((o = list = strdup(_list)) == NULL) |
if ((o = list = strdup(_list)) == NULL) |
return -1; |
return -1; |
while ((cp = strsep(&list, ",")) != NULL) { |
while ((cp = strsep(&list, ",")) != NULL) { |
if (*cp == '\0') { |
if (*cp == '\0') { |
error("%s: empty entry in list \"%.100s\"", |
error_f("empty entry in list \"%.100s\"", o); |
__func__, o); |
|
ret = -1; |
ret = -1; |
break; |
break; |
} |
} |
|
|
|
|
/* Stop junk from reaching getaddrinfo. +3 is for masklen */ |
/* Stop junk from reaching getaddrinfo. +3 is for masklen */ |
if (strlen(cp) > INET6_ADDRSTRLEN + 3) { |
if (strlen(cp) > INET6_ADDRSTRLEN + 3) { |
error("%s: list entry \"%.100s\" too long", |
error_f("list entry \"%.100s\" too long", cp); |
__func__, cp); |
|
ret = -1; |
ret = -1; |
break; |
break; |
} |
} |
#define VALID_CIDR_CHARS "0123456789abcdefABCDEF.:/" |
#define VALID_CIDR_CHARS "0123456789abcdefABCDEF.:/" |
if (strspn(cp, VALID_CIDR_CHARS) != strlen(cp)) { |
if (strspn(cp, VALID_CIDR_CHARS) != strlen(cp)) { |
error("%s: list entry \"%.100s\" contains invalid " |
error_f("list entry \"%.100s\" contains invalid " |
"characters", __func__, cp); |
"characters", cp); |
ret = -1; |
ret = -1; |
} |
} |
|
|