version 1.14, 2001/06/27 04:48:53 |
version 1.15, 2001/12/05 16:54:51 |
|
|
} |
} |
|
|
/* |
/* |
* Tries to match the host name (which must be in all lowercase) against the |
* Tries to match the string against the |
* comma-separated sequence of subpatterns (each possibly preceded by ! to |
* comma-separated sequence of subpatterns (each possibly preceded by ! to |
* indicate negation). Returns -1 if negation matches, 1 if there is |
* indicate negation). Returns -1 if negation matches, 1 if there is |
* a positive match, 0 if there is no match at all. |
* a positive match, 0 if there is no match at all. |
*/ |
*/ |
|
|
int |
int |
match_hostname(const char *host, const char *pattern, u_int len) |
match_pattern_list(const char *string, const char *pattern, u_int len, |
|
int dolower) |
{ |
{ |
char sub[1024]; |
char sub[1024]; |
int negated; |
int negated; |
|
|
for (subi = 0; |
for (subi = 0; |
i < len && subi < sizeof(sub) - 1 && pattern[i] != ','; |
i < len && subi < sizeof(sub) - 1 && pattern[i] != ','; |
subi++, i++) |
subi++, i++) |
sub[subi] = isupper(pattern[i]) ? tolower(pattern[i]) : pattern[i]; |
sub[subi] = dolower && isupper(pattern[i]) ? |
|
tolower(pattern[i]) : pattern[i]; |
/* If subpattern too long, return failure (no match). */ |
/* If subpattern too long, return failure (no match). */ |
if (subi >= sizeof(sub) - 1) |
if (subi >= sizeof(sub) - 1) |
return 0; |
return 0; |
|
|
/* Null-terminate the subpattern. */ |
/* Null-terminate the subpattern. */ |
sub[subi] = '\0'; |
sub[subi] = '\0'; |
|
|
/* Try to match the subpattern against the host name. */ |
/* Try to match the subpattern against the string. */ |
if (match_pattern(host, sub)) { |
if (match_pattern(string, sub)) { |
if (negated) |
if (negated) |
return -1; /* Negative */ |
return -1; /* Negative */ |
else |
else |
|
|
* match, we have already returned -1 and never get here. |
* match, we have already returned -1 and never get here. |
*/ |
*/ |
return got_positive; |
return got_positive; |
|
} |
|
|
|
/* |
|
* Tries to match the host name (which must be in all lowercase) against the |
|
* comma-separated sequence of subpatterns (each possibly preceded by ! to |
|
* indicate negation). Returns -1 if negation matches, 1 if there is |
|
* a positive match, 0 if there is no match at all. |
|
*/ |
|
int |
|
match_hostname(const char *host, const char *pattern, u_int len) |
|
{ |
|
return match_pattern_list(host, pattern, len, 1); |
} |
} |
|
|
/* |
/* |