X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/blobdiff_plain/a4243347741f0f7079858e03bca8fc32990f525c..440af55d72c65f5c149718dc52abd00f512ffb71:/lib/url.c diff --git a/lib/url.c b/lib/url.c index 16f3257..e05e6bf 100644 --- a/lib/url.c +++ b/lib/url.c @@ -21,13 +21,9 @@ * @brief URL support functions */ -#include -#include "types.h" +#include "common.h" -#include -#include #include -#include #include "mem.h" #include "log.h" @@ -36,12 +32,13 @@ #include "kvp.h" /** @brief Infer the for the web interface + * @param include_path_info 1 to include post-script path, else 0 * @return Inferred URL * * See RFC 3875. */ -char *infer_url(void) { - const char *scheme = "http", *server, *script, *e, *request_uri; +char *infer_url(int include_path_info) { + const char *scheme = "http", *server, *script, *e, *request_uri, *path_info; char *url; int port; @@ -62,7 +59,7 @@ char *infer_url(void) { port = 80; /* Figure out path to ourselves. */ - if((request_uri = getenv("REQUEST_URI"))) { + if(include_path_info && (request_uri = getenv("REQUEST_URI"))) { /* REQUEST_URI is an Apache extexnsion. If it's available it results in * more accurate self-referencing URLs. */ if((e = strchr(request_uri, '?'))) @@ -78,6 +75,9 @@ char *infer_url(void) { script = "/"; /* SCRIPT_NAME is not URL-encoded */ script = urlencodestring(script); + if(include_path_info && (path_info = getenv("PATH_INFO"))) + byte_xasprintf((char **)&script, "%s%s", + script, urlencodestring(path_info)); } if(script[0] != '/') fatal(0, "SCRIPT_NAME does not start with a '/'");