diff options
-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; |