diff options
author | Felix Fietkau <nbd@openwrt.org> | 2014-03-22 20:31:35 +0100 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2014-03-22 20:32:29 +0100 |
commit | f9dad9ffdd41c00d1fc7420f2f55983c7f6df8bc (patch) | |
tree | fa1d4aefea25736e73e078ef9083b25664494c43 | |
parent | d6366570bf706f3970b7f106a1ccd49b584559cf (diff) |
cgi: compare the physical path instead of the url to detect quirky urls
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-rw-r--r-- | cgi.c | 2 | ||||
-rw-r--r-- | main.c | 20 | ||||
-rw-r--r-- | uhttpd.h | 1 |
3 files changed, 16 insertions, 7 deletions
@@ -103,7 +103,7 @@ static bool check_cgi_path(struct path_info *pi, const char *url) } pi->ip = NULL; - return uh_path_match(conf.cgi_prefix, url); + return uh_path_match(conf.cgi_docroot_path, pi->phys); } struct dispatch_handler cgi_dispatch = { @@ -183,6 +183,13 @@ static void init_defaults_post(void) uh_index_add("index.htm"); uh_index_add("default.html"); uh_index_add("default.htm"); + + if (conf.cgi_prefix) { + char *str = malloc(strlen(conf.docroot) + strlen(conf.cgi_prefix) + 1); + strcpy(str, conf.docroot); + strcat(str, conf.cgi_prefix); + conf.cgi_docroot_path = str; + }; } static void fixup_prefix(char *str) @@ -406,12 +413,6 @@ int main(int argc, char **argv) } uh_config_parse(); - init_defaults_post(); - - if (!bound) { - fprintf(stderr, "Error: No sockets bound, unable to continue\n"); - return 1; - } if (!conf.docroot) { if (!realpath(".", uh_buf)) { @@ -421,6 +422,13 @@ int main(int argc, char **argv) conf.docroot = strdup(uh_buf); } + init_defaults_post(); + + if (!bound) { + fprintf(stderr, "Error: No sockets bound, unable to continue\n"); + return 1; + } + #ifdef HAVE_TLS if (n_tls) { if (!tls_crt || !tls_key) { @@ -52,6 +52,7 @@ struct config { const char *file; const char *error_handler; const char *cgi_prefix; + const char *cgi_docroot_path; const char *cgi_path; const char *lua_handler; const char *lua_prefix; |