diff options
author | 2015-07-29 22:03:41 +0000 | |
---|---|---|
committer | 2015-07-29 22:03:41 +0000 | |
commit | 1fb81db11227c41c0433b8a8ec068987b67e1870 (patch) | |
tree | 6856f2656fef1b16fab0e838f5b6b0f32d4f05d7 | |
parent | Fix spacing and be more verbose in printfs under #ifdef AUDIO_DEBUG. (diff) | |
download | wireguard-openbsd-1fb81db11227c41c0433b8a8ec068987b67e1870.tar.xz wireguard-openbsd-1fb81db11227c41c0433b8a8ec068987b67e1870.zip |
backout the previous: it broke wordpress somehow.
we need more care to find a proper fix for the fastcgi headers.
acknowledged by deraadt@
-rw-r--r-- | usr.sbin/httpd/httpd.h | 12 | ||||
-rw-r--r-- | usr.sbin/httpd/server.c | 4 | ||||
-rw-r--r-- | usr.sbin/httpd/server_fcgi.c | 65 | ||||
-rw-r--r-- | usr.sbin/httpd/server_http.c | 3 |
4 files changed, 7 insertions, 77 deletions
diff --git a/usr.sbin/httpd/httpd.h b/usr.sbin/httpd/httpd.h index 896d25c1780..4060f3956e5 100644 --- a/usr.sbin/httpd/httpd.h +++ b/usr.sbin/httpd/httpd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: httpd.h,v 1.93 2015/07/29 20:03:14 florian Exp $ */ +/* $OpenBSD: httpd.h,v 1.94 2015/07/29 22:03:41 reyk Exp $ */ /* * Copyright (c) 2006 - 2015 Reyk Floeter <reyk@openbsd.org> @@ -280,13 +280,6 @@ enum fcgistate { FCGI_READ_PADDING }; -enum fcgihttpheaderstate { - FCGI_HTTP_HEADER_ERROR, - FCGI_HTTP_HEADER_UNREAD, - FCGI_HTTP_HEADER_READ, - FCGI_HTTP_HEADER_DONE -}; - struct client { u_int32_t clt_id; pid_t clt_pid; @@ -323,9 +316,6 @@ struct client { int clt_fcgi_type; int clt_fcgi_chunked; int clt_fcgi_end; - struct evbuffer *clt_fcgi_http_header_evb; - enum fcgihttpheaderstate clt_fcgi_http_header_state; - char *clt_remote_user; struct evbuffer *clt_srvevb; diff --git a/usr.sbin/httpd/server.c b/usr.sbin/httpd/server.c index d068788662f..51d4e846c55 100644 --- a/usr.sbin/httpd/server.c +++ b/usr.sbin/httpd/server.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server.c,v 1.72 2015/07/29 20:03:14 florian Exp $ */ +/* $OpenBSD: server.c,v 1.73 2015/07/29 22:03:41 reyk Exp $ */ /* * Copyright (c) 2006 - 2015 Reyk Floeter <reyk@openbsd.org> @@ -1093,8 +1093,6 @@ server_close(struct client *clt, const char *msg) evbuffer_free(clt->clt_output); if (clt->clt_srvevb != NULL) evbuffer_free(clt->clt_srvevb); - if (clt->clt_fcgi_http_header_evb != NULL) - evbuffer_free(clt->clt_fcgi_http_header_evb); if (clt->clt_srvbev != NULL) bufferevent_free(clt->clt_srvbev); diff --git a/usr.sbin/httpd/server_fcgi.c b/usr.sbin/httpd/server_fcgi.c index d7b0ef5d679..68e98e506eb 100644 --- a/usr.sbin/httpd/server_fcgi.c +++ b/usr.sbin/httpd/server_fcgi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server_fcgi.c,v 1.60 2015/07/29 20:03:14 florian Exp $ */ +/* $OpenBSD: server_fcgi.c,v 1.61 2015/07/29 22:03:41 reyk Exp $ */ /* * Copyright (c) 2014 Florian Obser <florian@openbsd.org> @@ -76,8 +76,6 @@ struct server_fcgi_param { uint8_t buf[FCGI_RECORD_SIZE]; }; -enum fcgihttpheaderstate - server_fcgi_read_header(struct client *); int server_fcgi_header(struct client *, u_int); void server_fcgi_read(struct bufferevent *, void *); int server_fcgi_writeheader(struct client *, struct kv *, void *); @@ -156,14 +154,6 @@ server_fcgi(struct httpd *env, struct client *clt) goto fail; } - if (clt->clt_fcgi_http_header_evb != NULL) - evbuffer_free(clt->clt_fcgi_http_header_evb); - - if ((clt->clt_fcgi_http_header_evb = evbuffer_new()) == NULL) { - errstr = "failed to allocate evbuffer"; - goto fail; - } - close(clt->clt_fd); clt->clt_fd = fd; @@ -553,25 +543,7 @@ server_fcgi_read(struct bufferevent *bev, void *arg) } break; case FCGI_STDOUT: - clt->clt_chunk++; - if (clt->clt_fcgi_http_header_state == - FCGI_HTTP_HEADER_UNREAD) { - clt->clt_fcgi_http_header_state = - server_fcgi_read_header(clt); - if (clt->clt_fcgi_http_header_state == - FCGI_HTTP_HEADER_ERROR) { - server_abort_http(clt, - 500, "out of memory"); - return; - } - if (clt->clt_fcgi_http_header_state == - FCGI_HTTP_HEADER_UNREAD) - break; - } - if (clt->clt_fcgi_http_header_state == - FCGI_HTTP_HEADER_READ) { - clt->clt_fcgi_http_header_state = - FCGI_HTTP_HEADER_DONE; + if (++clt->clt_chunk == 1) { if (server_fcgi_header(clt, server_fcgi_getheaders(clt)) == -1) { @@ -614,35 +586,6 @@ server_fcgi_read(struct bufferevent *bev, void *arg) } while (len > 0); } -enum fcgihttpheaderstate -server_fcgi_read_header(struct client *clt) -{ - size_t len; - int ret = FCGI_HTTP_HEADER_UNREAD; - u_char *ptr; - - if ((ptr = evbuffer_find(clt->clt_srvevb, "\r\n\r\n", 4)) != NULL) { - len = ptr - EVBUFFER_DATA(clt->clt_srvevb) + 4; - if (evbuffer_add(clt->clt_fcgi_http_header_evb, - EVBUFFER_DATA(clt->clt_srvevb), len) == -1) - ret = FCGI_HTTP_HEADER_ERROR; - ret = FCGI_HTTP_HEADER_READ; - } else if ((ptr = evbuffer_find(clt->clt_srvevb, "\n\n", 2)) != NULL) { - len = ptr - EVBUFFER_DATA(clt->clt_srvevb) + 2; - if (evbuffer_add(clt->clt_fcgi_http_header_evb, - EVBUFFER_DATA(clt->clt_srvevb), len) == -1) - ret = FCGI_HTTP_HEADER_ERROR; - ret = FCGI_HTTP_HEADER_READ; - } else { - len = EVBUFFER_LENGTH(clt->clt_srvevb); - if (evbuffer_add_buffer(clt->clt_fcgi_http_header_evb, - clt->clt_srvevb) == -1) - ret = FCGI_HTTP_HEADER_ERROR; - } - evbuffer_drain(clt->clt_srvevb, len); - return (ret); -} - int server_fcgi_header(struct client *clt, u_int code) { @@ -710,7 +653,7 @@ server_fcgi_header(struct client *clt, u_int code) kv_add(&resp->http_headers, "Date", tmbuf) == NULL) return (-1); - /* Write header */ + /* Write initial header (fcgi might append more) */ if (server_writeresponse_http(clt) == -1 || server_bufferevent_print(clt, "\r\n") == -1 || server_headers(clt, resp, server_writeheader_http, NULL) == -1 || @@ -801,7 +744,7 @@ int server_fcgi_getheaders(struct client *clt) { struct http_descriptor *resp = clt->clt_descresp; - struct evbuffer *evb = clt->clt_fcgi_http_header_evb; + struct evbuffer *evb = clt->clt_srvevb; int code = 200; char *line, *key, *value; const char *errstr; diff --git a/usr.sbin/httpd/server_http.c b/usr.sbin/httpd/server_http.c index bbf6ae8140c..75e379ab49e 100644 --- a/usr.sbin/httpd/server_http.c +++ b/usr.sbin/httpd/server_http.c @@ -1,4 +1,4 @@ -/* $OpenBSD: server_http.c,v 1.94 2015/07/29 20:03:14 florian Exp $ */ +/* $OpenBSD: server_http.c,v 1.95 2015/07/29 22:03:41 reyk Exp $ */ /* * Copyright (c) 2006 - 2015 Reyk Floeter <reyk@openbsd.org> @@ -632,7 +632,6 @@ server_reset_http(struct client *clt) clt->clt_line = 0; clt->clt_done = 0; clt->clt_chunk = 0; - clt->clt_fcgi_http_header_state = FCGI_HTTP_HEADER_UNREAD; free(clt->clt_remote_user); clt->clt_remote_user = NULL; clt->clt_bev->readcb = server_read_http; |