file: specify UTF-8 as charset for dirlists, add option to override
[project/uhttpd.git] / proc.c
diff --git a/proc.c b/proc.c
index d4f5e3d4c2099c84850334f980d64ce05857c1a5..2b69703a07106066fccfa71a3f01363454398e93 100644 (file)
--- a/proc.c
+++ b/proc.c
        __header(connection, connection) \
        __header(cookie, cookie) \
        __header(host, host) \
+       __header(origin, origin) \
        __header(referer, referer) \
        __header(user_agent, user-agent) \
        __header(content_type, content-type) \
-       __header(content_length, content-length)
+       __header(content_length, content-length) \
+       __header(x_http_method_override, x-http-method-override) \
+       __header(http_auth_user, http-auth-user) \
+       __header(http_auth_pass, http-auth-pass)
 
 #undef __header
 #define __header __enum_header
@@ -60,8 +64,12 @@ static const struct {
        { "HTTP_CONNECTION", HDR_connection },
        { "HTTP_COOKIE", HDR_cookie },
        { "HTTP_HOST", HDR_host },
+       { "HTTP_ORIGIN", HDR_origin },
        { "HTTP_REFERER", HDR_referer },
        { "HTTP_USER_AGENT", HDR_user_agent },
+       { "HTTP_X_HTTP_METHOD_OVERRIDE", HDR_x_http_method_override },
+       { "HTTP_AUTH_USER", HDR_http_auth_user },
+       { "HTTP_AUTH_PASS", HDR_http_auth_pass },
        { "CONTENT_TYPE", HDR_content_type },
        { "CONTENT_LENGTH", HDR_content_length },
 };
@@ -160,7 +168,7 @@ struct env_var *uh_get_process_vars(struct client *cl, struct path_info *pi)
 
                cur = tb[proc_header_env[i].idx];
                vars[i].name = proc_header_env[i].name;
-               vars[i].value = cur ? blobmsg_data(cur) : "";
+               vars[i].value = cur ? blobmsg_data(cur) : NULL;
        }
 
        memcpy(&vars[i], extra_vars, sizeof(extra_vars));
@@ -217,14 +225,13 @@ static void proc_handle_header(struct relay *r, const char *name, const char *va
 static void proc_handle_header_end(struct relay *r)
 {
        struct client *cl = r->cl;
-       struct dispatch_proc *p = &cl->dispatch.proc;
        struct blob_attr *cur;
        int rem;
 
-       uloop_timeout_cancel(&p->timeout);
        uh_http_header(cl, cl->dispatch.proc.status_code, cl->dispatch.proc.status_msg);
        blob_for_each_attr(cur, cl->dispatch.proc.hdr.head, rem)
-               ustream_printf(cl->us, "%s: %s\r\n", blobmsg_name(cur), blobmsg_data(cur));
+               ustream_printf(cl->us, "%s: %s\r\n", blobmsg_name(cur),
+                              blobmsg_get_string(cur));
 
        ustream_printf(cl->us, "\r\n");