summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorreyk <reyk@openbsd.org>2015-07-29 22:03:41 +0000
committerreyk <reyk@openbsd.org>2015-07-29 22:03:41 +0000
commit1fb81db11227c41c0433b8a8ec068987b67e1870 (patch)
tree6856f2656fef1b16fab0e838f5b6b0f32d4f05d7
parentFix spacing and be more verbose in printfs under #ifdef AUDIO_DEBUG. (diff)
downloadwireguard-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.h12
-rw-r--r--usr.sbin/httpd/server.c4
-rw-r--r--usr.sbin/httpd/server_fcgi.c65
-rw-r--r--usr.sbin/httpd/server_http.c3
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;