version 1.2, 2008/06/10 05:22:45 |
version 1.3, 2008/06/10 23:06:19 |
|
|
* |
* |
* Returns 1 on match found (never returned when addr == NULL). |
* Returns 1 on match found (never returned when addr == NULL). |
* Returns 0 on if no match found, or no errors found when addr == NULL. |
* Returns 0 on if no match found, or no errors found when addr == NULL. |
* Returns -1 on invalid list entry. |
* Returns -1 on negated match found (never returned when addr == NULL). |
|
* Returns -2 on invalid list entry. |
*/ |
*/ |
int |
int |
addr_match_list(const char *addr, const char *_list) |
addr_match_list(const char *addr, const char *_list) |
|
|
if (neg) |
if (neg) |
cp++; |
cp++; |
if (*cp == '\0') { |
if (*cp == '\0') { |
ret = -1; |
ret = -2; |
break; |
break; |
} |
} |
/* Prefer CIDR address matching */ |
/* Prefer CIDR address matching */ |
|
|
if (r == -2) { |
if (r == -2) { |
error("Inconsistent mask length for " |
error("Inconsistent mask length for " |
"network \"%.100s\"", cp); |
"network \"%.100s\"", cp); |
ret = -1; |
ret = -2; |
break; |
break; |
} else if (r == 0) { |
} else if (r == 0) { |
if (addr != NULL && addr_netmatch(&try_addr, |
if (addr != NULL && addr_netmatch(&try_addr, |
&match_addr, masklen) == 0) { |
&match_addr, masklen) == 0) { |
foundit: |
foundit: |
if (neg) { |
if (neg) { |
ret = 0; |
ret = -1; |
break; |
break; |
} |
} |
ret = 1; |
ret = 1; |