|
@@ -410,13 +410,13 @@ enum {
|
|
|
};
|
|
|
|
|
|
static const char *config_options[] = {
|
|
|
- "C", "cgi_pattern", "**.cgi|**.pl|**.php",
|
|
|
+ "C", "cgi_pattern", "**.cgi$|**.pl$|**.php$",
|
|
|
"E", "cgi_environment", NULL,
|
|
|
"G", "put_delete_passwords_file", NULL,
|
|
|
"I", "cgi_interpreter", NULL,
|
|
|
"P", "protect_uri", NULL,
|
|
|
"R", "authentication_domain", "mydomain.com",
|
|
|
- "S", "ssi_pattern", "**.shtml|**.shtm",
|
|
|
+ "S", "ssi_pattern", "**.shtml$|**.shtm$",
|
|
|
"a", "access_log_file", NULL,
|
|
|
"c", "ssl_chain_file", NULL,
|
|
|
"d", "enable_directory_listing", "yes",
|
|
@@ -771,10 +771,13 @@ static int match_prefix(const char *pattern, int pattern_len, const char *str) {
|
|
|
match_prefix(or_str + 1, (pattern + pattern_len) - (or_str + 1), str);
|
|
|
}
|
|
|
|
|
|
- i = j = res = 0;
|
|
|
+ i = j = 0;
|
|
|
+ res = -1;
|
|
|
for (; i < pattern_len; i++, j++) {
|
|
|
if (pattern[i] == '?' && str[j] != '\0') {
|
|
|
continue;
|
|
|
+ } else if (pattern[i] == '$') {
|
|
|
+ return str[j] == '\0' ? j : -1;
|
|
|
} else if (pattern[i] == '*') {
|
|
|
i++;
|
|
|
if (pattern[i] == '*') {
|
|
@@ -788,10 +791,10 @@ static int match_prefix(const char *pattern, int pattern_len, const char *str) {
|
|
|
}
|
|
|
do {
|
|
|
res = match_prefix(pattern + i, pattern_len - i, str + j + len);
|
|
|
- } while (res == 0 && len-- > 0);
|
|
|
- return res == 0 ? 0 : j + res + len;
|
|
|
+ } while (res == -1 && len-- > 0);
|
|
|
+ return res == -1 ? -1 : j + res + len;
|
|
|
} else if (pattern[i] != str[j]) {
|
|
|
- return 0;
|
|
|
+ return -1;
|
|
|
}
|
|
|
}
|
|
|
return j;
|